@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
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic lexicon-based LSP completion and hover providers.
|
|
3
|
+
*
|
|
4
|
+
* Provides LexiconIndex for looking up resources/properties by class name,
|
|
5
|
+
* and helper functions that implement the common completion/hover patterns
|
|
6
|
+
* shared across lexicons.
|
|
7
|
+
*/
|
|
8
|
+
// ── LexiconIndex ───────────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* Indexed access to lexicon entries for LSP features.
|
|
11
|
+
*/
|
|
12
|
+
export class LexiconIndex {
|
|
13
|
+
constructor(entries) {
|
|
14
|
+
this.entries = entries;
|
|
15
|
+
}
|
|
16
|
+
/** All resource class names with their backing type names. */
|
|
17
|
+
getResourceNames() {
|
|
18
|
+
const results = [];
|
|
19
|
+
for (const [name, entry] of Object.entries(this.entries)) {
|
|
20
|
+
if (entry.kind === "resource") {
|
|
21
|
+
results.push({ className: name, resourceType: entry.resourceType });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return results;
|
|
25
|
+
}
|
|
26
|
+
/** Property names available on a given resource class. */
|
|
27
|
+
getPropertyNames(className) {
|
|
28
|
+
const entry = this.entries[className];
|
|
29
|
+
if (!entry || entry.kind !== "resource")
|
|
30
|
+
return [];
|
|
31
|
+
const props = [];
|
|
32
|
+
if (entry.propertyConstraints) {
|
|
33
|
+
props.push(...Object.keys(entry.propertyConstraints));
|
|
34
|
+
}
|
|
35
|
+
if (entry.createOnly) {
|
|
36
|
+
for (const p of entry.createOnly) {
|
|
37
|
+
if (!props.includes(p))
|
|
38
|
+
props.push(p);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (entry.writeOnly) {
|
|
42
|
+
for (const p of entry.writeOnly) {
|
|
43
|
+
if (!props.includes(p))
|
|
44
|
+
props.push(p);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return props;
|
|
48
|
+
}
|
|
49
|
+
/** Look up a single entry by class name. */
|
|
50
|
+
getEntry(name) {
|
|
51
|
+
return this.entries[name];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ── Completion helper ──────────────────────────────────────────────
|
|
55
|
+
/**
|
|
56
|
+
* Provide completions from a lexicon index.
|
|
57
|
+
*
|
|
58
|
+
* Handles two contexts:
|
|
59
|
+
* - After `new ` — suggests resource class names
|
|
60
|
+
* - Inside constructor props — suggests property names
|
|
61
|
+
*
|
|
62
|
+
* @param importSource - Human-readable source label for documentation
|
|
63
|
+
* (e.g. "AWS CloudFormation resource")
|
|
64
|
+
*/
|
|
65
|
+
export function lexiconCompletions(ctx, index, importSource) {
|
|
66
|
+
const { linePrefix, wordAtCursor } = ctx;
|
|
67
|
+
// After `new ` — suggest resource class names
|
|
68
|
+
if (/\bnew\s+\w*$/.test(linePrefix)) {
|
|
69
|
+
const resources = index.getResourceNames();
|
|
70
|
+
const prefix = wordAtCursor?.toLowerCase();
|
|
71
|
+
const filtered = prefix
|
|
72
|
+
? resources.filter((r) => r.className.toLowerCase().startsWith(prefix))
|
|
73
|
+
: resources;
|
|
74
|
+
// Deterministic ordering (the raw index order is arbitrary).
|
|
75
|
+
const sorted = [...filtered].sort((a, b) => a.className.localeCompare(b.className));
|
|
76
|
+
// When the user has typed a prefix, the set is already narrowed — return
|
|
77
|
+
// every match so a common resource never gets truncated out of a short
|
|
78
|
+
// prefix on a large lexicon (e.g. StorageBucket for "S" on gcp/aws, #600).
|
|
79
|
+
// Only cap the unfiltered `new ` dump, to bound the payload.
|
|
80
|
+
const items = prefix ? sorted : sorted.slice(0, 100);
|
|
81
|
+
return items.map((r) => ({
|
|
82
|
+
label: r.className,
|
|
83
|
+
insertText: r.className,
|
|
84
|
+
kind: "resource",
|
|
85
|
+
detail: r.resourceType,
|
|
86
|
+
documentation: `${importSource}: ${r.resourceType}`,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
// Inside constructor props — look for `new ClassName({` pattern
|
|
90
|
+
if (!ctx.content)
|
|
91
|
+
return [];
|
|
92
|
+
const constructorMatch = ctx.content.slice(0, ctx.content.split("\n").slice(0, ctx.position.line + 1).join("\n").length)
|
|
93
|
+
.match(/\bnew\s+(\w+)\s*\(\s*(?:["'][^"']*["']\s*,\s*)?{[^}]*$/s);
|
|
94
|
+
if (constructorMatch) {
|
|
95
|
+
const className = constructorMatch[1];
|
|
96
|
+
const entry = index.getEntry(className);
|
|
97
|
+
const props = index.getPropertyNames(className);
|
|
98
|
+
if (props.length > 0) {
|
|
99
|
+
const inferred = new Set(entry?.inferredDeprecations ?? []);
|
|
100
|
+
const deprecatedSet = new Set((entry?.deprecatedProperties ?? []).filter((p) => !inferred.has(p)));
|
|
101
|
+
const filtered = wordAtCursor
|
|
102
|
+
? props.filter((p) => p.toLowerCase().startsWith(wordAtCursor.toLowerCase()))
|
|
103
|
+
: props;
|
|
104
|
+
return filtered.map((p) => ({
|
|
105
|
+
label: p,
|
|
106
|
+
insertText: p,
|
|
107
|
+
kind: "property",
|
|
108
|
+
detail: `Property of ${className}`,
|
|
109
|
+
...(deprecatedSet.has(p) && { deprecated: true }),
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
// ── Hover helper ───────────────────────────────────────────────────
|
|
116
|
+
/**
|
|
117
|
+
* Provide hover information from a lexicon index.
|
|
118
|
+
*
|
|
119
|
+
* @param formatHover - Lexicon-specific hover content formatter.
|
|
120
|
+
* If not provided, uses a generic format.
|
|
121
|
+
*/
|
|
122
|
+
export function lexiconHover(ctx, index, formatHover) {
|
|
123
|
+
const { word } = ctx;
|
|
124
|
+
if (!word)
|
|
125
|
+
return undefined;
|
|
126
|
+
const entry = index.getEntry(word);
|
|
127
|
+
if (!entry)
|
|
128
|
+
return undefined;
|
|
129
|
+
if (formatHover) {
|
|
130
|
+
return formatHover(word, entry);
|
|
131
|
+
}
|
|
132
|
+
// Default hover format for resource entries
|
|
133
|
+
if (entry.kind === "resource") {
|
|
134
|
+
return defaultResourceHover(word, entry);
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
function defaultResourceHover(className, entry) {
|
|
139
|
+
const lines = [];
|
|
140
|
+
lines.push(`**${className}**`);
|
|
141
|
+
lines.push("");
|
|
142
|
+
lines.push(`Resource type: \`${entry.resourceType}\``);
|
|
143
|
+
if (entry.attrs && Object.keys(entry.attrs).length > 0) {
|
|
144
|
+
lines.push("");
|
|
145
|
+
lines.push("**Attributes:**");
|
|
146
|
+
for (const [key, value] of Object.entries(entry.attrs)) {
|
|
147
|
+
lines.push(`- \`${key}\` → \`${value}\``);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (entry.primaryIdentifier && entry.primaryIdentifier.length > 0) {
|
|
151
|
+
lines.push("");
|
|
152
|
+
lines.push(`**Primary identifier:** ${entry.primaryIdentifier.map((p) => `\`${p}\``).join(", ")}`);
|
|
153
|
+
}
|
|
154
|
+
if (entry.createOnly && entry.createOnly.length > 0) {
|
|
155
|
+
lines.push("");
|
|
156
|
+
lines.push(`**Create-only:** ${entry.createOnly.map((p) => `\`${p}\``).join(", ")}`);
|
|
157
|
+
}
|
|
158
|
+
if (entry.writeOnly && entry.writeOnly.length > 0) {
|
|
159
|
+
lines.push("");
|
|
160
|
+
lines.push(`**Write-only:** ${entry.writeOnly.map((p) => `\`${p}\``).join(", ")}`);
|
|
161
|
+
}
|
|
162
|
+
return { contents: lines.join("\n") };
|
|
163
|
+
}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kubernetes-object-shape utilities shared by every lexicon whose live model
|
|
3
|
+
* is a Kubernetes API object — the k8s lexicon itself (chant #1076) and GCP's
|
|
4
|
+
* Config Connector custom resources (chant #1087).
|
|
5
|
+
*
|
|
6
|
+
* A Config Connector custom resource *is* a Kubernetes object: it carries the
|
|
7
|
+
* same envelope (`status`, `metadata.{uid,resourceVersion,generation,
|
|
8
|
+
* creationTimestamp,managedFields,selfLink}`), the same SSA `fieldsV1`
|
|
9
|
+
* encoding for `metadata.managedFields`, and some CNRM kinds even embed
|
|
10
|
+
* genuinely k8s-shaped substructures (Cloud Run's `RunService` wraps a
|
|
11
|
+
* Knative pod spec with `containers`/`env`/`ports`, keyed the same way a
|
|
12
|
+
* Deployment's are). None of that is specific to chant's k8s *lexicon* — it
|
|
13
|
+
* is a fact about the Kubernetes API that any reader of a Kubernetes-shaped
|
|
14
|
+
* object needs, regardless of which lexicon is doing the reading.
|
|
15
|
+
*
|
|
16
|
+
* This module lives in core rather than in the k8s lexicon for the same
|
|
17
|
+
* reason `./kubectl-context.ts`'s `resolveClusterTarget` does (chant #1100):
|
|
18
|
+
* GCP's observation needs it too, without taking a dependency on the k8s
|
|
19
|
+
* lexicon package. Nothing here is keyed by chant's own k8s entityType
|
|
20
|
+
* catalog (`K8s::Apps::Deployment`, …) or by any lexicon's service-default
|
|
21
|
+
* table — that stays lexicon-specific, layered on top of what's here
|
|
22
|
+
* (`lexicons/k8s/src/deep-observe-hooks.ts`'s `K8S_SERVICE_DEFAULTS`,
|
|
23
|
+
* `lexicons/gcp/src/deep-observe.ts`'s CNRM-specific annotation noise).
|
|
24
|
+
*/
|
|
25
|
+
// ── The generic Kubernetes object envelope ──────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Paths every Kubernetes API object carries regardless of kind, matched on
|
|
28
|
+
* the exact index-erased pattern (there is exactly one `status`, one
|
|
29
|
+
* `metadata.managedFields`, per object — no per-type variation the way AWS's
|
|
30
|
+
* `Arn`/`RoleId` repeat at every nesting depth).
|
|
31
|
+
*
|
|
32
|
+
* - `status` — the whole subtree is server-computed; no declarative source
|
|
33
|
+
* (chant's k8s manifests, chant's Config Connector CRs) ever authors it.
|
|
34
|
+
* - `metadata.uid`/`resourceVersion`/`generation`/`creationTimestamp` — minted
|
|
35
|
+
* and incremented by the API server, never authored.
|
|
36
|
+
* - `metadata.managedFields` — the bookkeeping the ownership walk below reads
|
|
37
|
+
* to decide everything else. Left in the tree it would report as permanent
|
|
38
|
+
* drift (a timestamp changes on every write) and would recurse into the
|
|
39
|
+
* encoded `fieldsV1` structure as if it were ordinary properties.
|
|
40
|
+
* - `metadata.selfLink` — deprecated API-server bookkeeping some clusters
|
|
41
|
+
* still echo; never a declared field.
|
|
42
|
+
*/
|
|
43
|
+
export const K8S_OBJECT_ENVELOPE_PRUNE_PATTERNS = new Set([
|
|
44
|
+
"status",
|
|
45
|
+
"metadata.uid",
|
|
46
|
+
"metadata.resourceVersion",
|
|
47
|
+
"metadata.generation",
|
|
48
|
+
"metadata.creationTimestamp",
|
|
49
|
+
"metadata.managedFields",
|
|
50
|
+
"metadata.selfLink",
|
|
51
|
+
]);
|
|
52
|
+
function isRecord(value) {
|
|
53
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
54
|
+
}
|
|
55
|
+
/** Stable JSON with sorted keys — the fallback ordering key for a set-like array without a natural identity field. */
|
|
56
|
+
function canonicalJson(value) {
|
|
57
|
+
return (JSON.stringify(value, (_k, v) => v && typeof v === "object" && !Array.isArray(v)
|
|
58
|
+
? Object.fromEntries(Object.entries(v).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)))
|
|
59
|
+
: v) ?? "");
|
|
60
|
+
}
|
|
61
|
+
/** The final segment of an index-erased pattern (`spec.template.spec.containers[].env[].name` → `name`'s *container*, i.e. `env`). */
|
|
62
|
+
function lastSegment(pattern) {
|
|
63
|
+
const withoutIndex = pattern.replace(/\[\]$/, "");
|
|
64
|
+
const dot = withoutIndex.lastIndexOf(".");
|
|
65
|
+
return dot === -1 ? withoutIndex : withoutIndex.slice(dot + 1);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Kubernetes' own well-known list-map-key conventions for the substructures
|
|
69
|
+
* that recur across kinds and across lexicons: containers/initContainers/
|
|
70
|
+
* ephemeralContainers and `env`/`volumes` keyed by `name` — the same field
|
|
71
|
+
* Kubernetes' strategic-merge-patch and SSA's `list-map-keys` key on for
|
|
72
|
+
* these lists — and container ports keyed by `containerPort`+`protocol`,
|
|
73
|
+
* Service ports keyed by `port`+`protocol` (Kubernetes' own SSA
|
|
74
|
+
* `list-map-keys` for each). Both port shapes are handled under one `ports`
|
|
75
|
+
* branch by checking which field is present.
|
|
76
|
+
*
|
|
77
|
+
* Entity-type-agnostic on purpose: whether an array named `containers`
|
|
78
|
+
* belongs to a `K8s::Apps::Deployment` or to a GCP `RunService`'s embedded
|
|
79
|
+
* pod spec, the identity Kubernetes assigns each element is the same.
|
|
80
|
+
*/
|
|
81
|
+
export function k8sListMapOrderKey(element) {
|
|
82
|
+
const name = lastSegment(element.pattern);
|
|
83
|
+
const el = element.element;
|
|
84
|
+
if (name === "containers" || name === "initContainers" || name === "ephemeralContainers") {
|
|
85
|
+
return isRecord(el) && typeof el.name === "string" ? el.name : canonicalJson(el);
|
|
86
|
+
}
|
|
87
|
+
if (name === "env" || name === "volumes") {
|
|
88
|
+
return isRecord(el) && typeof el.name === "string" ? el.name : canonicalJson(el);
|
|
89
|
+
}
|
|
90
|
+
if (name === "ports") {
|
|
91
|
+
if (isRecord(el)) {
|
|
92
|
+
const protocol = typeof el.protocol === "string" ? el.protocol : "TCP";
|
|
93
|
+
// Zero-padded so the sort key orders numerically, not lexicographically
|
|
94
|
+
// ("443" would otherwise sort before "80") — cosmetic, since either
|
|
95
|
+
// order canonicalizes the two sides identically, but a stable,
|
|
96
|
+
// human-sensible order is free to have here.
|
|
97
|
+
if (typeof el.containerPort === "number")
|
|
98
|
+
return `${String(el.containerPort).padStart(5, "0")}/${protocol}`;
|
|
99
|
+
if (typeof el.port === "number")
|
|
100
|
+
return `${String(el.port).padStart(5, "0")}/${protocol}`;
|
|
101
|
+
}
|
|
102
|
+
return canonicalJson(el);
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
function sameJson(a, b) {
|
|
107
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
108
|
+
}
|
|
109
|
+
function findKeyedIndex(array, keyFields) {
|
|
110
|
+
return array.findIndex((el) => isRecord(el) && Object.entries(keyFields).every(([k, v]) => sameJson(el[k], v)));
|
|
111
|
+
}
|
|
112
|
+
function findValueIndex(array, value) {
|
|
113
|
+
return array.findIndex((el) => sameJson(el, value));
|
|
114
|
+
}
|
|
115
|
+
function joinField(parent, name) {
|
|
116
|
+
return parent ? `${parent}.${name}` : name;
|
|
117
|
+
}
|
|
118
|
+
function joinIndex(parent, index) {
|
|
119
|
+
return `${parent}[${index}]`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Walk one manager's `fieldsV1` tree in lockstep with the live object and the
|
|
123
|
+
* declared props, threading the *live* dot-path (chant's own path syntax —
|
|
124
|
+
* no leading dot, real array indices) as it goes. `owned` collects every path
|
|
125
|
+
* this manager's entry reaches on the live tree; `contested` collects the
|
|
126
|
+
* subset where the declared tree also has a value at the equivalent
|
|
127
|
+
* position, resolved by the same key/value match rather than by index.
|
|
128
|
+
*
|
|
129
|
+
* Only `f:`/`i:`/`v:`/`k:`/`.` are understood — the same five forms
|
|
130
|
+
* `@intentius/chant-k8s-client`'s `managed-fields.ts`'s `renderSegment`
|
|
131
|
+
* renders — and an unrecognized prefix is skipped, consistent with that
|
|
132
|
+
* module's own behavior, rather than guessed at.
|
|
133
|
+
*/
|
|
134
|
+
function walkOwnership(fieldsNode, liveNode, declaredNode, path, owned, contested,
|
|
135
|
+
/** Records path → manager as it walks (#1189); omitted by callers that only need the sets. */
|
|
136
|
+
owners, manager) {
|
|
137
|
+
if (fieldsNode === null || typeof fieldsNode !== "object" || Array.isArray(fieldsNode))
|
|
138
|
+
return;
|
|
139
|
+
for (const [key, child] of Object.entries(fieldsNode)) {
|
|
140
|
+
if (key === ".") {
|
|
141
|
+
if (path !== "") {
|
|
142
|
+
owned.add(path);
|
|
143
|
+
if (declaredNode !== undefined)
|
|
144
|
+
contested.add(path);
|
|
145
|
+
if (owners && manager)
|
|
146
|
+
owners.set(path, manager);
|
|
147
|
+
}
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (key.startsWith("f:")) {
|
|
151
|
+
const name = key.slice(2);
|
|
152
|
+
if (!isRecord(liveNode) || !(name in liveNode))
|
|
153
|
+
continue;
|
|
154
|
+
const childLive = liveNode[name];
|
|
155
|
+
const childDeclared = isRecord(declaredNode) ? declaredNode[name] : undefined;
|
|
156
|
+
const childPath = joinField(path, name);
|
|
157
|
+
owned.add(childPath);
|
|
158
|
+
if (childDeclared !== undefined)
|
|
159
|
+
contested.add(childPath);
|
|
160
|
+
if (owners && manager)
|
|
161
|
+
owners.set(childPath, manager);
|
|
162
|
+
walkOwnership(child, childLive, childDeclared, childPath, owned, contested, owners, manager);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (key.startsWith("i:")) {
|
|
166
|
+
const idx = Number(key.slice(2));
|
|
167
|
+
if (!Array.isArray(liveNode) || !Number.isInteger(idx) || idx < 0 || idx >= liveNode.length)
|
|
168
|
+
continue;
|
|
169
|
+
const childLive = liveNode[idx];
|
|
170
|
+
const childDeclared = Array.isArray(declaredNode) ? declaredNode[idx] : undefined;
|
|
171
|
+
const childPath = joinIndex(path, idx);
|
|
172
|
+
owned.add(childPath);
|
|
173
|
+
if (childDeclared !== undefined)
|
|
174
|
+
contested.add(childPath);
|
|
175
|
+
if (owners && manager)
|
|
176
|
+
owners.set(childPath, manager);
|
|
177
|
+
walkOwnership(child, childLive, childDeclared, childPath, owned, contested, owners, manager);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (key.startsWith("v:") || key.startsWith("k:")) {
|
|
181
|
+
if (!Array.isArray(liveNode))
|
|
182
|
+
continue;
|
|
183
|
+
let decoded;
|
|
184
|
+
try {
|
|
185
|
+
decoded = JSON.parse(key.slice(2));
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
continue; // not decodable JSON — skip rather than mangle, like renderSegment.
|
|
189
|
+
}
|
|
190
|
+
const liveIdx = key.startsWith("v:")
|
|
191
|
+
? findValueIndex(liveNode, decoded)
|
|
192
|
+
: isRecord(decoded)
|
|
193
|
+
? findKeyedIndex(liveNode, decoded)
|
|
194
|
+
: -1;
|
|
195
|
+
if (liveIdx === -1)
|
|
196
|
+
continue;
|
|
197
|
+
let childDeclared;
|
|
198
|
+
if (Array.isArray(declaredNode)) {
|
|
199
|
+
const declaredIdx = key.startsWith("v:")
|
|
200
|
+
? findValueIndex(declaredNode, decoded)
|
|
201
|
+
: isRecord(decoded)
|
|
202
|
+
? findKeyedIndex(declaredNode, decoded)
|
|
203
|
+
: -1;
|
|
204
|
+
childDeclared = declaredIdx === -1 ? undefined : declaredNode[declaredIdx];
|
|
205
|
+
}
|
|
206
|
+
const childLive = liveNode[liveIdx];
|
|
207
|
+
const childPath = joinIndex(path, liveIdx);
|
|
208
|
+
owned.add(childPath);
|
|
209
|
+
if (childDeclared !== undefined)
|
|
210
|
+
contested.add(childPath);
|
|
211
|
+
if (owners && manager)
|
|
212
|
+
owners.set(childPath, manager);
|
|
213
|
+
walkOwnership(child, childLive, childDeclared, childPath, owned, contested, owners, manager);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
// An unrecognized prefix (a future fieldsV1 encoding) — skip.
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Build the three ownership sets for one live object. `entries` is
|
|
221
|
+
* `metadata.managedFields`, already decoded (`@intentius/chant-k8s-client`'s
|
|
222
|
+
* `managedFieldsOf` for the k8s lexicon; a plain `JSON.parse` of `kubectl get
|
|
223
|
+
* -o json` for gcp); `isChantManager` classifies each entry's manager name
|
|
224
|
+
* — matched on the `chant`/`chant:<stack>` family per chant #1075, but the
|
|
225
|
+
* matcher itself is supplied by the caller rather than fixed here, because
|
|
226
|
+
* what counts as "chant" is not the same fact on every lexicon's apply path
|
|
227
|
+
* (see gcp's `deep-observe.ts` module doc for why that matters there).
|
|
228
|
+
*
|
|
229
|
+
* Subresource entries (`status`, `scale`) are excluded: a controller writing
|
|
230
|
+
* a Deployment's `status` is not competing for the spec chant declared, the
|
|
231
|
+
* same reasoning `@intentius/chant-k8s-client`'s `fieldsOwnedBy` default
|
|
232
|
+
* already encodes.
|
|
233
|
+
*/
|
|
234
|
+
export function buildOwnershipSets(entries, liveRoot, declaredRoot, isChantManager) {
|
|
235
|
+
const chantOwned = new Set();
|
|
236
|
+
const foreignOwned = new Set();
|
|
237
|
+
const foreignContested = new Set();
|
|
238
|
+
const owners = new Map();
|
|
239
|
+
for (const entry of entries) {
|
|
240
|
+
if (typeof entry.manager !== "string" || entry.manager.length === 0)
|
|
241
|
+
continue;
|
|
242
|
+
if (entry.subresource !== undefined)
|
|
243
|
+
continue;
|
|
244
|
+
if (isChantManager(entry.manager)) {
|
|
245
|
+
// Chant-owned paths are always diffable, regardless of who else is
|
|
246
|
+
// involved — "contested" only matters for a *foreign* owner.
|
|
247
|
+
walkOwnership(entry.fieldsV1, liveRoot, declaredRoot, "", chantOwned, new Set(), owners, entry.manager);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
walkOwnership(entry.fieldsV1, liveRoot, declaredRoot, "", foreignOwned, foreignContested, owners, entry.manager);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return { chantOwned, foreignOwned, foreignContested, owners };
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Well-known metadata the control plane writes on an object regardless of
|
|
257
|
+
* who applied it — matched on the exact index-erased pattern, like
|
|
258
|
+
* {@link K8S_OBJECT_ENVELOPE_PRUNE_PATTERNS}, but gated by the caller on
|
|
259
|
+
* `side === "live" && counterpart === "absent"` so a manifest that *does*
|
|
260
|
+
* declare one of these (a hand-pinned `change-cause`, say) is still compared.
|
|
261
|
+
*
|
|
262
|
+
* This list is the noise valve that replaced the managed-fields prune
|
|
263
|
+
* (chant #1191). Until then a foreign-owned, undeclared path was dropped
|
|
264
|
+
* before the diff ever saw it, which silenced `kubectl label deploy web
|
|
265
|
+
* team=platform` — the exact console-edit class the `undeclared` drift kind
|
|
266
|
+
* exists for. Now a foreign-owned path nobody declared is reported as
|
|
267
|
+
* `undeclared` (with its owner named, #1189) unless the accepted baseline
|
|
268
|
+
* already carries it — and what remains to subtract statically is only the
|
|
269
|
+
* handful of annotations and labels Kubernetes' own controllers stamp on
|
|
270
|
+
* every object of a kind. Widening this set is additive; each entry must be
|
|
271
|
+
* something *no* human writes out of band.
|
|
272
|
+
*
|
|
273
|
+
* - `kubectl.kubernetes.io/last-applied-configuration` — client-side apply's
|
|
274
|
+
* bookkeeping, a JSON copy of whatever was last applied.
|
|
275
|
+
* - `deployment.kubernetes.io/revision` (+ `revision-history`,
|
|
276
|
+
* `desired-replicas`, `max-replicas`) — the Deployment controller's
|
|
277
|
+
* rollout counters, written to Deployments and their ReplicaSets.
|
|
278
|
+
* - `pod-template-hash` / `controller-revision-hash` /
|
|
279
|
+
* `statefulset.kubernetes.io/pod-name` — the selector labels the
|
|
280
|
+
* ReplicaSet, DaemonSet and StatefulSet controllers add to what they own.
|
|
281
|
+
*/
|
|
282
|
+
export const K8S_SYSTEM_METADATA_PRUNE_PATTERNS = new Set([
|
|
283
|
+
"metadata.annotations.kubectl.kubernetes.io/last-applied-configuration",
|
|
284
|
+
"metadata.annotations.deployment.kubernetes.io/revision",
|
|
285
|
+
"metadata.annotations.deployment.kubernetes.io/revision-history",
|
|
286
|
+
"metadata.annotations.deployment.kubernetes.io/desired-replicas",
|
|
287
|
+
"metadata.annotations.deployment.kubernetes.io/max-replicas",
|
|
288
|
+
"metadata.labels.pod-template-hash",
|
|
289
|
+
"metadata.labels.controller-revision-hash",
|
|
290
|
+
"metadata.labels.statefulset.kubernetes.io/pod-name",
|
|
291
|
+
"spec.template.metadata.labels.pod-template-hash",
|
|
292
|
+
"spec.template.metadata.labels.controller-revision-hash",
|
|
293
|
+
]);
|
package/dist/notify-verify.js
CHANGED
package/dist/notify.js
CHANGED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://intentius.io/chant/schemas/notify/v1/notify.schema.json",
|
|
4
|
+
"title": "chant.notify/v1",
|
|
5
|
+
"description": "The event a notify webhook receives (#3761): a wave or environment waits for an approval, a run was refused or failed, or drift was found. Sent by chant's Op waves and by products built on chant (terragucci, SQL Yodeler) through @intentius/chant/notify, signed with HMAC-SHA256 over <timestamp>.<body>. Readers ignore fields they do not know; a field is only ever added within a version.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["schema", "id", "event", "at", "source", "project", "summary", "targets"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema": { "const": "chant.notify/v1" },
|
|
10
|
+
"id": { "type": "string", "minLength": 1, "description": "The same for every send of one event about one digest (else drift fingerprint, else commit), so a receiver can drop a repeat; random when there is none. The delivery header carries it too." },
|
|
11
|
+
"event": { "enum": ["waiting", "refused", "failed", "drift"] },
|
|
12
|
+
"at": { "type": "string", "description": "When it was sent, ISO 8601 UTC." },
|
|
13
|
+
"source": { "type": "string", "minLength": 1, "description": "The product that sent it: chant, terragucci, sql-yodeler." },
|
|
14
|
+
"project": { "type": "string", "description": "What the run belongs to: the repository, or a name the product gives." },
|
|
15
|
+
"summary": { "type": "string", "description": "One line a person can read." },
|
|
16
|
+
"wave": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"required": ["number"],
|
|
19
|
+
"properties": {
|
|
20
|
+
"number": { "type": "integer", "minimum": 1 },
|
|
21
|
+
"name": { "type": "string" },
|
|
22
|
+
"gate": { "type": "string", "description": "The gate the wave waits on." }
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"environment": { "type": "string" },
|
|
26
|
+
"targets": { "type": "array", "items": { "type": "string" }, "description": "What the event concerns: a wave's roots or runs, an environment's pending migrations. For refused and failed, the ones refused or failed when the product knows them." },
|
|
27
|
+
"digest": { "type": "string", "description": "The plan digest an approval binds." },
|
|
28
|
+
"approve": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"description": "On waiting: how a person approves it.",
|
|
31
|
+
"required": ["command"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"command": { "type": "string", "description": "The command to run, as the product prints it." },
|
|
34
|
+
"chant": { "type": "string", "description": "chant's own command for the same approval, when the product's differs." },
|
|
35
|
+
"review": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"description": "Under pr-review: the pull request whose approving review would approve it.",
|
|
38
|
+
"required": ["pr", "url"],
|
|
39
|
+
"properties": { "pr": { "type": "integer" }, "url": { "type": "string" } }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"status": { "type": "string", "description": "The product's own word for the outcome." },
|
|
44
|
+
"reason": { "type": "string", "description": "On refused and failed: why." },
|
|
45
|
+
"exitCode": { "type": "integer" },
|
|
46
|
+
"drift": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"required": ["changed"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"changed": { "type": "array", "items": { "type": "string" } },
|
|
51
|
+
"missing": { "type": "array", "items": { "type": "string" } },
|
|
52
|
+
"failed": { "type": "array", "items": { "type": "string" }, "description": "What could not be checked." },
|
|
53
|
+
"fingerprint": { "type": "string", "description": "The same drift has the same fingerprint, run after run." }
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"run": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"properties": {
|
|
59
|
+
"url": { "type": "string", "description": "The CI run's page (GitHub, Forgejo) or job's page (GitLab)." },
|
|
60
|
+
"forge": { "enum": ["github", "gitlab", "forgejo"] },
|
|
61
|
+
"repository": { "type": "string" },
|
|
62
|
+
"commit": { "type": "string" },
|
|
63
|
+
"pr": { "type": "integer" }
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"reportUrl": { "type": "string" },
|
|
67
|
+
"detail": { "type": "object", "description": "The product's own record of the outcome, carried whole (terragucci.outcome/v1)." }
|
|
68
|
+
},
|
|
69
|
+
"allOf": [
|
|
70
|
+
{ "if": { "required": ["event"], "properties": { "event": { "const": "drift" } } }, "then": { "required": ["drift"], "properties": { "drift": { "type": "object" } } } }
|
|
71
|
+
]
|
|
72
|
+
}
|