@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,16 @@
|
|
|
1
|
+
import { phase } from "../../../../../../components/component.js";
|
|
2
|
+
/** COMP007 pass case: structurally distinct from orders-table.component.ts (service: build+publish+apply+verify vs. infra: apply+verify only) — no sprawl hint expected. */
|
|
3
|
+
export const searchService = {
|
|
4
|
+
name: "search-service",
|
|
5
|
+
archetype: "service",
|
|
6
|
+
dependsOn: [],
|
|
7
|
+
build: { kind: "docker-build", context: ".", into: "archive" },
|
|
8
|
+
deploy: [
|
|
9
|
+
phase("Publish", [{ kind: "publish-image", from: "archive", to: "$env.registry" }]),
|
|
10
|
+
phase("Apply", [
|
|
11
|
+
{ kind: "cfn-deploy", template: "archive:search.template.json", imageRef: "@Publish.digest" },
|
|
12
|
+
{ kind: "ecs-update-service", cluster: "$env.cluster", service: "search" },
|
|
13
|
+
]),
|
|
14
|
+
phase("Verify", [{ kind: "wait-steady-state", service: "search" }]),
|
|
15
|
+
],
|
|
16
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP001: publishes-but-never-applies
|
|
3
|
+
*
|
|
4
|
+
* Flags a component that publishes an image/artifact (a `publish-image`,
|
|
5
|
+
* `publish-artifact`, or `load-image-on-host` step) that nothing ever
|
|
6
|
+
* consumes: neither an apply/submit step later in the same component (via a
|
|
7
|
+
* `@Phase.field` prior-step reference into the publish phase) nor any other
|
|
8
|
+
* component (via `@<this-component>.publish.uri|digest|key`). A publish step
|
|
9
|
+
* with no consumer either belongs to a producer/library component another
|
|
10
|
+
* component should depend on, or is dead composition — see epic #551 §7
|
|
11
|
+
* ("What chant adds") and §"Failure modes" (renamed/orphaned sprawl).
|
|
12
|
+
*
|
|
13
|
+
* Triggers on: a `service`-shaped component whose `publish-image` output is
|
|
14
|
+
* never referenced by its own Apply phase or by any sibling component.
|
|
15
|
+
* OK: the publish output is referenced via `@Publish.digest` (same
|
|
16
|
+
* component) or `@<name>.publish.uri` (a consumer component).
|
|
17
|
+
*/
|
|
18
|
+
import { collectWiringRefs, walkComponent } from "./support.js";
|
|
19
|
+
const PUBLISH_KIND = /^(publish-image|publish-artifact|load-image-on-host)$/;
|
|
20
|
+
export const comp001PublishesNeverAppliesRule = {
|
|
21
|
+
id: "COMP001",
|
|
22
|
+
severity: "error",
|
|
23
|
+
category: "correctness",
|
|
24
|
+
description: "A publish step's output is never consumed by an apply/submit step, in this component or any other",
|
|
25
|
+
check(ctx) {
|
|
26
|
+
const diagnostics = [];
|
|
27
|
+
// Every `@<name>.publish.*` reference anywhere across every discovered
|
|
28
|
+
// component — a publish step in component X is "consumed" if some
|
|
29
|
+
// component (including X itself, via `@Phase.field`) references it.
|
|
30
|
+
const referencedComponentPublishes = new Set();
|
|
31
|
+
for (const { component } of ctx.components.values()) {
|
|
32
|
+
const { steps } = walkComponent(component);
|
|
33
|
+
for (const { step } of steps) {
|
|
34
|
+
for (const ref of collectWiringRefs(step)) {
|
|
35
|
+
if (ref.kind === "component-artifact")
|
|
36
|
+
referencedComponentPublishes.add(ref.componentName);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
for (const [name, { component, filePath }] of ctx.components) {
|
|
41
|
+
const { steps } = walkComponent(component);
|
|
42
|
+
const publishSteps = steps.filter(({ step }) => PUBLISH_KIND.test(step.kind));
|
|
43
|
+
if (publishSteps.length === 0)
|
|
44
|
+
continue;
|
|
45
|
+
// Consumed if: (a) some other/same component references
|
|
46
|
+
// `@<name>.publish.*`, or (b) a same-component prior-step reference
|
|
47
|
+
// points at the publish step's own phase (e.g. `@Publish.digest` used
|
|
48
|
+
// by a later Apply step in the same component).
|
|
49
|
+
if (referencedComponentPublishes.has(name))
|
|
50
|
+
continue;
|
|
51
|
+
const publishPhaseNames = new Set(publishSteps.map(({ phaseName }) => phaseName));
|
|
52
|
+
const consumedByPriorStepRef = steps.some(({ step }) => collectWiringRefs(step).some((ref) => ref.kind === "prior-step" && publishPhaseNames.has(ref.phaseName)));
|
|
53
|
+
if (consumedByPriorStepRef)
|
|
54
|
+
continue;
|
|
55
|
+
diagnostics.push({
|
|
56
|
+
checkId: "COMP001",
|
|
57
|
+
severity: "error",
|
|
58
|
+
component: name,
|
|
59
|
+
file: filePath,
|
|
60
|
+
message: `Component "${name}" publishes an artifact (${[...publishPhaseNames].join(", ")} phase) that is never ` +
|
|
61
|
+
`consumed — no apply/submit step in this component references it via "@${[...publishPhaseNames][0]}.<field>", ` +
|
|
62
|
+
`and no other component references "@${name}.publish.<field>". If this is a producer/library ` +
|
|
63
|
+
`component, a consumer should depend on it and reference its publish output; otherwise this publish step ` +
|
|
64
|
+
`is dead composition.`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return diagnostics;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP002: dangling-wiring-ref
|
|
3
|
+
*
|
|
4
|
+
* Flags a wiring reference (`@Phase.field` or `@<component>.publish.*`,
|
|
5
|
+
* carried in a step's `imageRef`/`jar`/`revision`/`inputs`/any other
|
|
6
|
+
* capability-specific field — see ../../../components/component.ts's
|
|
7
|
+
* `Wiring`) that points at a phase or component that does not exist:
|
|
8
|
+
*
|
|
9
|
+
* - `@Phase.field` naming a phase not declared anywhere in this component's
|
|
10
|
+
* own `deploy` (top-level phase names only — a nested fan-out phase's
|
|
11
|
+
* name is addressed by its own name, never a parent's, matching how
|
|
12
|
+
* ../../../components/driver.ts's `resolveWiring` keys `phaseOutputs` by
|
|
13
|
+
* the phase the step ran directly under).
|
|
14
|
+
* - `@<component>.publish.<field>` naming a component that either is not
|
|
15
|
+
* discovered at all, or is discovered but not listed in this component's
|
|
16
|
+
* `dependsOn` — the graph only resolves an artifact reference for a
|
|
17
|
+
* declared dependency (composition-and-wiring.mdx#cross-component-outputs).
|
|
18
|
+
*
|
|
19
|
+
* Triggers on: `imageRef: "@Build.digest"` when no phase named "Build"
|
|
20
|
+
* exists, or `jar: "@some-lib.publish.uri"` when "some-lib" is undiscovered
|
|
21
|
+
* or missing from `dependsOn`.
|
|
22
|
+
* OK: `imageRef: "@Publish.digest"` when a "Publish" phase exists in the same
|
|
23
|
+
* component, or `jar: "@jar-lib.publish.uri"` when "jar-lib" is discovered
|
|
24
|
+
* and listed in `dependsOn`.
|
|
25
|
+
*/
|
|
26
|
+
import { collectWiringRefs, topLevelPhaseNames, walkComponent } from "./support.js";
|
|
27
|
+
export const comp002DanglingWiringRefRule = {
|
|
28
|
+
id: "COMP002",
|
|
29
|
+
severity: "error",
|
|
30
|
+
category: "correctness",
|
|
31
|
+
description: "A wiring reference (@Phase.field or @component.publish.*) points at a phase or component that does not exist",
|
|
32
|
+
check(ctx) {
|
|
33
|
+
const diagnostics = [];
|
|
34
|
+
for (const [name, { component, filePath }] of ctx.components) {
|
|
35
|
+
const phaseNames = topLevelPhaseNames(component);
|
|
36
|
+
const dependsOn = new Set(component.dependsOn ?? []);
|
|
37
|
+
const { steps } = walkComponent(component);
|
|
38
|
+
for (const { step, phaseName } of steps) {
|
|
39
|
+
for (const ref of collectWiringRefs(step)) {
|
|
40
|
+
if (ref.kind === "prior-step") {
|
|
41
|
+
if (phaseNames.has(ref.phaseName))
|
|
42
|
+
continue;
|
|
43
|
+
diagnostics.push({
|
|
44
|
+
checkId: "COMP002",
|
|
45
|
+
severity: "error",
|
|
46
|
+
component: name,
|
|
47
|
+
file: filePath,
|
|
48
|
+
message: `Component "${name}": step "${step.kind}" (in phase "${phaseName}") references "@${ref.phaseName}.${ref.field}", ` +
|
|
49
|
+
`but no phase named "${ref.phaseName}" exists in this component's "deploy". Known phases: ` +
|
|
50
|
+
`${[...phaseNames].join(", ") || "(none)"}.`,
|
|
51
|
+
});
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// ref.kind === "component-artifact"
|
|
55
|
+
const target = ctx.components.get(ref.componentName);
|
|
56
|
+
if (!target) {
|
|
57
|
+
diagnostics.push({
|
|
58
|
+
checkId: "COMP002",
|
|
59
|
+
severity: "error",
|
|
60
|
+
component: name,
|
|
61
|
+
file: filePath,
|
|
62
|
+
message: `Component "${name}": step "${step.kind}" (in phase "${phaseName}") references ` +
|
|
63
|
+
`"@${ref.componentName}.publish.${ref.field}", but no component named "${ref.componentName}" was discovered.`,
|
|
64
|
+
});
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!dependsOn.has(ref.componentName)) {
|
|
68
|
+
diagnostics.push({
|
|
69
|
+
checkId: "COMP002",
|
|
70
|
+
severity: "error",
|
|
71
|
+
component: name,
|
|
72
|
+
file: filePath,
|
|
73
|
+
message: `Component "${name}": step "${step.kind}" (in phase "${phaseName}") references ` +
|
|
74
|
+
`"@${ref.componentName}.publish.${ref.field}", but "${ref.componentName}" is not listed in this ` +
|
|
75
|
+
`component's "dependsOn" — the graph only resolves an artifact reference for a declared dependency. ` +
|
|
76
|
+
`Add "${ref.componentName}" to dependsOn.`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return diagnostics;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP003: mutating-no-rollback
|
|
3
|
+
*
|
|
4
|
+
* Flags a mutating capability step whose family has no known native/starter
|
|
5
|
+
* rollback and no explicit opt-out — the "mutating capability with no
|
|
6
|
+
* rollback and no explicit opt-out reason" guardrail from epic #551 §7 and
|
|
7
|
+
* §"Failure modes".
|
|
8
|
+
*
|
|
9
|
+
* Each capability declares its rollback disposition via `rollbackPolicy`
|
|
10
|
+
* (../../../components/capability.ts): `"native"` (a paired `rollback`, e.g.
|
|
11
|
+
* `cfn-deploy`/`ecs-update-service`/`lambda-deploy`/`code-deploy`),
|
|
12
|
+
* `"none-by-design"` (nothing to compensate — the build/publish and wait/verify
|
|
13
|
+
* families, whose outputs are immutable/content-addressed or read-only), or
|
|
14
|
+
* `"needs-opt-out"` (a mutating verb with no native rollback and no safe undo,
|
|
15
|
+
* e.g. `s3-sync`/`run-migration`). This rule flags only `"needs-opt-out"` steps
|
|
16
|
+
* lacking an explicit opt-out. It reads the disposition from the project's
|
|
17
|
+
* capability registry (`ctx.rollbackPolicies`, built by `chant lint` from the
|
|
18
|
+
* active lexicons + core starter — the same seam COMP005 uses for
|
|
19
|
+
* `ctx.knownKinds`), never a hard-coded verb list, so the aws leaves'
|
|
20
|
+
* dispositions come from the aws lexicon that owns them.
|
|
21
|
+
*
|
|
22
|
+
* The opt-out: since the capability interface and schema are out of scope for
|
|
23
|
+
* this issue (`Step` already has `additionalProperties: true` — see
|
|
24
|
+
* component.schema.json), a component may attach a `noRollback: "<reason>"`
|
|
25
|
+
* string property directly on the step to declare the compensation gap is
|
|
26
|
+
* intentional and understood, or supply its own explicit compensation via a
|
|
27
|
+
* component-level `rollback` field or a sibling
|
|
28
|
+
* `rollback-previous`/`snapshot-before` step in the same phase.
|
|
29
|
+
*
|
|
30
|
+
* Triggers on: a bare `{ kind: "run-migration", ... }` step with no
|
|
31
|
+
* `noRollback` reason, no component-level `rollback`, and no sibling
|
|
32
|
+
* `rollback-previous`/`snapshot-before` step.
|
|
33
|
+
* OK: `{ kind: "run-migration", ..., noRollback: "forward-only migration, ..." }`,
|
|
34
|
+
* or a component `rollback` field, or a sibling compensation step.
|
|
35
|
+
*/
|
|
36
|
+
import { walkComponent } from "./support.js";
|
|
37
|
+
/**
|
|
38
|
+
* A step is flagged only when its verb's rollback disposition is
|
|
39
|
+
* `"needs-opt-out"` — a mutating capability with no native rollback and no safe
|
|
40
|
+
* undo. That disposition is the capability's own declaration (`rollbackPolicy`,
|
|
41
|
+
* ../../../components/capability.ts), surfaced to this rule via
|
|
42
|
+
* `ctx.rollbackPolicies` (built from the project's registry by `chant lint`,
|
|
43
|
+
* exactly like `ctx.knownKinds` for COMP005). Verbs with a native rollback
|
|
44
|
+
* (`cfn-deploy`, …) or nothing to compensate (build/publish/wait) are
|
|
45
|
+
* `"native"`/`"none-by-design"` and never flagged. When no registry was
|
|
46
|
+
* resolved (a direct unit test), an unknown verb defaults to
|
|
47
|
+
* `"none-by-design"` — the rule stays silent rather than guessing.
|
|
48
|
+
*/
|
|
49
|
+
function policyFor(ctx, kind) {
|
|
50
|
+
return ctx.rollbackPolicies?.get(kind) ?? "none-by-design";
|
|
51
|
+
}
|
|
52
|
+
/** A sibling step kind that itself is (or supplies) compensation — its presence in the same phase is treated as the component handling rollback explicitly, not silence. */
|
|
53
|
+
const COMPENSATION_SIBLING_KINDS = new Set(["rollback-previous", "snapshot-before"]);
|
|
54
|
+
export const comp003MutatingNoRollbackRule = {
|
|
55
|
+
id: "COMP003",
|
|
56
|
+
severity: "error",
|
|
57
|
+
category: "correctness",
|
|
58
|
+
description: "A mutating capability step has no known rollback and no explicit opt-out (noRollback reason, component rollback, or a compensation sibling step)",
|
|
59
|
+
check(ctx) {
|
|
60
|
+
const diagnostics = [];
|
|
61
|
+
for (const [name, { component, filePath }] of ctx.components) {
|
|
62
|
+
const hasComponentRollback = Array.isArray(component.rollback) && component.rollback.length > 0;
|
|
63
|
+
// Walk every step (including inside nested fan-out phases and
|
|
64
|
+
// onFailure compensation phases — see support.ts's walkComponent) so a
|
|
65
|
+
// mutating step nested inside a fan-out unit (e.g. a Neo4j-style
|
|
66
|
+
// per-instance phase) is inspected the same as a top-level one.
|
|
67
|
+
const { steps } = walkComponent(component);
|
|
68
|
+
// Group steps by the exact Phase object they live under (identity, not
|
|
69
|
+
// name — two different nested phases can share a display name) so the
|
|
70
|
+
// "sibling in the same phase" compensation check only looks at true
|
|
71
|
+
// siblings, never steps from an unrelated phase of the same name.
|
|
72
|
+
const stepsByPhase = new Map();
|
|
73
|
+
for (const walked of steps) {
|
|
74
|
+
const group = stepsByPhase.get(walked.phase) ?? [];
|
|
75
|
+
group.push(walked);
|
|
76
|
+
stepsByPhase.set(walked.phase, group);
|
|
77
|
+
}
|
|
78
|
+
for (const walked of steps) {
|
|
79
|
+
const { step, phaseName, phase } = walked;
|
|
80
|
+
if (policyFor(ctx, step.kind) !== "needs-opt-out")
|
|
81
|
+
continue;
|
|
82
|
+
const noRollback = step.noRollback;
|
|
83
|
+
const hasStepOptOut = typeof noRollback === "string" && noRollback.trim().length > 0;
|
|
84
|
+
if (hasStepOptOut || hasComponentRollback)
|
|
85
|
+
continue;
|
|
86
|
+
const siblings = stepsByPhase.get(phase) ?? [];
|
|
87
|
+
const hasCompensationSibling = siblings.some((s) => COMPENSATION_SIBLING_KINDS.has(s.step.kind));
|
|
88
|
+
if (hasCompensationSibling)
|
|
89
|
+
continue;
|
|
90
|
+
diagnostics.push({
|
|
91
|
+
checkId: "COMP003",
|
|
92
|
+
severity: "error",
|
|
93
|
+
component: name,
|
|
94
|
+
file: filePath,
|
|
95
|
+
message: `Component "${name}": step "${step.kind}" (phase "${phaseName}") is a mutating capability with no ` +
|
|
96
|
+
`known native rollback and no explicit opt-out. Add a "noRollback: \\"<reason>\\"" property to the step, ` +
|
|
97
|
+
`a component-level "rollback" phase, or a sibling "rollback-previous"/"snapshot-before" step in the same phase.`,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return diagnostics;
|
|
102
|
+
},
|
|
103
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP004: gate-needs-durable-runtime (the file is renamed in #2116; the
|
|
3
|
+
* behaviour changed in #2119)
|
|
4
|
+
*
|
|
5
|
+
* The file name and the exported symbol keep the old wording on purpose
|
|
6
|
+
* (#2195): the id is what an author writes in a `chant-disable` comment and
|
|
7
|
+
* what every import names, and churning both buys nothing. `description`
|
|
8
|
+
* below is the accurate sentence, and it is what the docs page uses as its
|
|
9
|
+
* heading — since #2119 the rule has nothing to do with which runtime hosts
|
|
10
|
+
* the run.
|
|
11
|
+
*
|
|
12
|
+
* Flags a `gate` step anywhere in a component's composition — the point where
|
|
13
|
+
* a run stops and waits for a person. Since #2119 that is not a refusal: the
|
|
14
|
+
* driver decides the gate against the gate ledger (`../../../op/gate.ts`), and
|
|
15
|
+
* one nobody has approved ends the run pending `chant approve <component>
|
|
16
|
+
* <gate>`, to be re-decided next run.
|
|
17
|
+
*
|
|
18
|
+
* The rule survives the change because what it flags survives it. The
|
|
19
|
+
* component contract has no per-component runtime field (the runtime is chosen
|
|
20
|
+
* per *run*, via `chant run --on`, intentionally not part of the declaration),
|
|
21
|
+
* so lint cannot tell from the declaration alone that a `gate` is deliberate;
|
|
22
|
+
* every one is a standing "this component stops for a human" fact worth
|
|
23
|
+
* surfacing, not a mistake to silently allow. Acknowledge it explicitly with a
|
|
24
|
+
* **file-level**
|
|
25
|
+
* disable directive once the human wait is genuinely intended (see
|
|
26
|
+
* lint-rules/disable-directives.mdx) — a COMP* diagnostic carries no real
|
|
27
|
+
* line/column (it is reported for the whole component; see
|
|
28
|
+
* ../../component-checks.ts), so only the file-level `chant-disable` form is
|
|
29
|
+
* honored for these rules — `-line`/`-next-line` do not suppress a COMP*
|
|
30
|
+
* diagnostic (see ../../../cli/commands/lint.ts's
|
|
31
|
+
* `runComponentCheckDiagnostics`):
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* // chant-disable COMP004 -- the rollout waits on a release manager's approval
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* Triggers on: any `gate` step in `deploy`/`rollback` with no matching
|
|
38
|
+
* file-level disable directive.
|
|
39
|
+
* OK: a component with no `gate` steps at all, or a `gate` whose file-level
|
|
40
|
+
* disable directive says who is expected to approve it and why.
|
|
41
|
+
*/
|
|
42
|
+
import { gateName } from "../../../op/gate-name.js";
|
|
43
|
+
import { walkComponent } from "./support.js";
|
|
44
|
+
export const comp004GateNeedsDurableRuntimeRule = {
|
|
45
|
+
id: "COMP004",
|
|
46
|
+
severity: "error",
|
|
47
|
+
category: "correctness",
|
|
48
|
+
description: "A gate step ends the run pending approval — acknowledge the human wait explicitly",
|
|
49
|
+
check(ctx) {
|
|
50
|
+
const diagnostics = [];
|
|
51
|
+
for (const [name, { component, filePath }] of ctx.components) {
|
|
52
|
+
const { gates } = walkComponent(component);
|
|
53
|
+
for (const { gate, phaseName } of gates) {
|
|
54
|
+
const label = gateName(gate);
|
|
55
|
+
diagnostics.push({
|
|
56
|
+
checkId: "COMP004",
|
|
57
|
+
severity: "error",
|
|
58
|
+
component: name,
|
|
59
|
+
file: filePath,
|
|
60
|
+
message: `Component "${name}": gate "${label}" (phase "${phaseName}") ends the run pending approval — ` +
|
|
61
|
+
`a run that reaches it records the gate as a fact and stops there until someone runs ` +
|
|
62
|
+
`"chant approve ${name} ${label}", and no later phase runs. If that wait is intended, ` +
|
|
63
|
+
`suppress with a file-level "// chant-disable COMP004 -- <reason>" comment anywhere in this file to ` +
|
|
64
|
+
`document who approves it and why.`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return diagnostics;
|
|
69
|
+
},
|
|
70
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP005: capability-kind-is-noun
|
|
3
|
+
*
|
|
4
|
+
* Flags a step `kind` that names a component rather than an operation — the
|
|
5
|
+
* "capability-per-component (renamed sprawl)" failure mode from epic #551
|
|
6
|
+
* §"Failure modes ... + guardrails": "Tell: capabilities named after nouns."
|
|
7
|
+
* Every starter-set verb is a verb-phrase describing an operation
|
|
8
|
+
* (`cfn-deploy`, `publish-image`, `wait-steady-state`, ...); a capability
|
|
9
|
+
* named after *this* component (or any other discovered component) is
|
|
10
|
+
* exactly the sprawl the capability model exists to remove — see
|
|
11
|
+
* docs/components/capabilities.mdx#the-discipline ("A capability describes
|
|
12
|
+
* an operation, never a component").
|
|
13
|
+
*
|
|
14
|
+
* Detection is structural, not NLP: a step `kind` is flagged when it equals,
|
|
15
|
+
* or is built from, a discovered component's own kebab-case `name` (e.g. a
|
|
16
|
+
* `search-service` component composing a `{ kind: "deploy-search-service" }`
|
|
17
|
+
* or `{ kind: "search-service" }` step) — the concrete, checkable form of
|
|
18
|
+
* "named after a component" the issue asks for, mirroring how
|
|
19
|
+
* ../../../components/capability.ts's own docstring defines the discipline
|
|
20
|
+
* ("never named after the component that happens to use it").
|
|
21
|
+
*
|
|
22
|
+
* Every registered `kind` is excluded from this check unconditionally,
|
|
23
|
+
* regardless of whether its dash-separated segments happen to overlap a
|
|
24
|
+
* component's name. The allowlist comes from `ctx.knownKinds` — the kinds the
|
|
25
|
+
* project's capability registry actually resolves, which `chant lint` builds
|
|
26
|
+
* from the project's config (core's starter set plus the active lexicons'
|
|
27
|
+
* leaves, e.g. `cfn-deploy`/`wait-for-stack` when `lexicons: ["aws"]`). Without
|
|
28
|
+
* this exclusion, a component literally named "stack", "job", "image", or
|
|
29
|
+
* "host" would falsely flag `wait-for-stack`/`emr-start-job-run`/`publish-image`/
|
|
30
|
+
* `load-image-on-host` — a real capability's verb-ness is an established fact of
|
|
31
|
+
* the registry, not something to re-adjudicate by substring match. When no
|
|
32
|
+
* registry was resolved (a direct unit test), it falls back to core's starter
|
|
33
|
+
* set (`CORE_STARTER_KINDS`).
|
|
34
|
+
*
|
|
35
|
+
* Triggers on: `{ kind: "search-service" }` or `{ kind: "deploy-search-service" }`
|
|
36
|
+
* in any component, when "search-service" is a discovered component's name and
|
|
37
|
+
* neither form is a registered verb.
|
|
38
|
+
* OK: `{ kind: "cfn-deploy" }`, `{ kind: "ecs-update-service" }`,
|
|
39
|
+
* `{ kind: "wait-for-stack" }` — verb-named, and/or a registered verb.
|
|
40
|
+
*/
|
|
41
|
+
import { STARTER_VERB_FAMILIES } from "../../../components/starter-plugin.js";
|
|
42
|
+
import { walkComponent } from "./support.js";
|
|
43
|
+
/**
|
|
44
|
+
* Fallback allowlist when the check runs without a resolved registry (e.g. a
|
|
45
|
+
* direct unit test): core's own starter verbs. The real `chant lint` run passes
|
|
46
|
+
* `ctx.knownKinds` — every kind the project's registry actually resolves,
|
|
47
|
+
* including the active lexicons' leaves (`cfn-deploy`, `wait-for-stack`, …) —
|
|
48
|
+
* so a real project never depends on this fallback for its cloud verbs.
|
|
49
|
+
*/
|
|
50
|
+
const CORE_STARTER_KINDS = new Set(Object.values(STARTER_VERB_FAMILIES).flat());
|
|
51
|
+
/** True if `kind` is exactly a component name, or that name embedded with `-`-joined affixes (e.g. "deploy-search-service", "search-service-apply"). */
|
|
52
|
+
function kindNamesComponent(kind, componentName) {
|
|
53
|
+
if (kind === componentName)
|
|
54
|
+
return true;
|
|
55
|
+
const parts = kind.split("-");
|
|
56
|
+
const nameParts = componentName.split("-");
|
|
57
|
+
if (nameParts.length === 0)
|
|
58
|
+
return false;
|
|
59
|
+
for (let i = 0; i + nameParts.length <= parts.length; i++) {
|
|
60
|
+
if (nameParts.every((p, j) => parts[i + j] === p))
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
export const comp005CapabilityKindIsNounRule = {
|
|
66
|
+
id: "COMP005",
|
|
67
|
+
severity: "error",
|
|
68
|
+
category: "style",
|
|
69
|
+
description: "A capability kind is named after a component (a noun) rather than an operation (a verb)",
|
|
70
|
+
check(ctx) {
|
|
71
|
+
const diagnostics = [];
|
|
72
|
+
const componentNames = [...ctx.components.keys()];
|
|
73
|
+
if (componentNames.length === 0)
|
|
74
|
+
return diagnostics;
|
|
75
|
+
// Every known verb — the project's registered kinds when `chant lint`
|
|
76
|
+
// resolved a registry (includes active lexicons' leaves), else core's
|
|
77
|
+
// starter set. A known verb is never a "noun named after the component",
|
|
78
|
+
// regardless of any substring overlap with a component's name.
|
|
79
|
+
const knownKinds = ctx.knownKinds ?? CORE_STARTER_KINDS;
|
|
80
|
+
for (const [name, { component, filePath }] of ctx.components) {
|
|
81
|
+
const { steps } = walkComponent(component);
|
|
82
|
+
const reported = new Set();
|
|
83
|
+
for (const { step, phaseName } of steps) {
|
|
84
|
+
if (step.kind === "gate")
|
|
85
|
+
continue;
|
|
86
|
+
if (knownKinds.has(step.kind))
|
|
87
|
+
continue;
|
|
88
|
+
const matchedComponent = componentNames.find((cn) => kindNamesComponent(step.kind, cn));
|
|
89
|
+
if (!matchedComponent)
|
|
90
|
+
continue;
|
|
91
|
+
const dedupeKey = `${step.kind}:${phaseName}`;
|
|
92
|
+
if (reported.has(dedupeKey))
|
|
93
|
+
continue;
|
|
94
|
+
reported.add(dedupeKey);
|
|
95
|
+
diagnostics.push({
|
|
96
|
+
checkId: "COMP005",
|
|
97
|
+
severity: "error",
|
|
98
|
+
component: name,
|
|
99
|
+
file: filePath,
|
|
100
|
+
message: `Component "${name}": step kind "${step.kind}" (phase "${phaseName}") is named after component ` +
|
|
101
|
+
`"${matchedComponent}" rather than an operation. A capability kind must be a verb ("cfn-deploy", ` +
|
|
102
|
+
`"publish-image", "wait-steady-state", ...), never a noun naming the component that uses it — see ` +
|
|
103
|
+
`docs/components/capabilities.mdx#the-discipline.`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return diagnostics;
|
|
108
|
+
},
|
|
109
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP006: shell-needs-reason
|
|
3
|
+
*
|
|
4
|
+
* Flags a `shell` step with no (or empty/blank) `reason` — the escape-hatch
|
|
5
|
+
* discipline from epic #551 §7 and §"What chant adds": "raw `shell` without a
|
|
6
|
+
* declared reason" gets flagged. `shell` is the deliberate escape hatch
|
|
7
|
+
* (../../../components/verbs/shell.ts) for reaching past the capability set;
|
|
8
|
+
* `ShellInput.reason` is already a required field on the typed
|
|
9
|
+
* `createShellCapability` input, but a hand-authored/JSON-only component (the
|
|
10
|
+
* contract's whole point — see component-contract.mdx's "portable, not
|
|
11
|
+
* chant-only" framing) is not type-checked against that interface, so the raw
|
|
12
|
+
* JSON contract's `Step` (open `additionalProperties`) does not itself
|
|
13
|
+
* enforce it. This rule enforces the same discipline at the composition
|
|
14
|
+
* level, for every authoring form.
|
|
15
|
+
*
|
|
16
|
+
* Triggers on: `{ kind: "shell", cmd: "..." }` with no `reason`, or
|
|
17
|
+
* `reason: ""` / `reason: " "`.
|
|
18
|
+
* OK: `{ kind: "shell", cmd: "...", reason: "no capability covers <x> yet" }`.
|
|
19
|
+
*/
|
|
20
|
+
import { walkComponent } from "./support.js";
|
|
21
|
+
export const comp006ShellNeedsReasonRule = {
|
|
22
|
+
id: "COMP006",
|
|
23
|
+
severity: "error",
|
|
24
|
+
category: "correctness",
|
|
25
|
+
description: 'A raw "shell" escape-hatch step has no declared reason',
|
|
26
|
+
check(ctx) {
|
|
27
|
+
const diagnostics = [];
|
|
28
|
+
for (const [name, { component, filePath }] of ctx.components) {
|
|
29
|
+
const { steps } = walkComponent(component);
|
|
30
|
+
for (const { step, phaseName } of steps) {
|
|
31
|
+
if (step.kind !== "shell")
|
|
32
|
+
continue;
|
|
33
|
+
const reason = step.reason;
|
|
34
|
+
const hasReason = typeof reason === "string" && reason.trim().length > 0;
|
|
35
|
+
if (hasReason)
|
|
36
|
+
continue;
|
|
37
|
+
diagnostics.push({
|
|
38
|
+
checkId: "COMP006",
|
|
39
|
+
severity: "error",
|
|
40
|
+
component: name,
|
|
41
|
+
file: filePath,
|
|
42
|
+
message: `Component "${name}": "shell" step (phase "${phaseName}") is the escape hatch and must declare why no ` +
|
|
43
|
+
`capability covers this case — add a non-empty "reason" property (e.g. "reason: \\"no capability for X yet\\"").`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return diagnostics;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP007: composition-sprawl
|
|
3
|
+
*
|
|
4
|
+
* Flags two or more components whose `deploy` composition is structurally
|
|
5
|
+
* identical (same phases, same `parallel`/nesting shape, same step kinds in
|
|
6
|
+
* the same order) — the "composition copy-paste (declaration sprawl)"
|
|
7
|
+
* failure mode from epic #551 §"Failure modes ... + guardrails": "Guard:
|
|
8
|
+
* presets (Level 2) + a lint hint when an identical composition repeats
|
|
9
|
+
* across components." This is a *hint*, not a hard error (severity:
|
|
10
|
+
* "warning") — the epic frames it as "reach for a preset"
|
|
11
|
+
* (docs/components/capabilities.mdx#presets--reuse-without-a-closed-set),
|
|
12
|
+
* not a correctness defect.
|
|
13
|
+
*
|
|
14
|
+
* The fingerprint (../comp/support.ts's `compositionFingerprint`) compares
|
|
15
|
+
* phase names, `parallel` flags, nesting, and step *kinds* only — never
|
|
16
|
+
* `name`/`dependsOn`/literal wiring values/params, so two components that
|
|
17
|
+
* both do "build -> publish -> apply -> verify" with the same capability
|
|
18
|
+
* kinds but different templates/clusters/images still match (that is exactly
|
|
19
|
+
* the "own destiny is in the params, not the shape" case a preset should
|
|
20
|
+
* absorb).
|
|
21
|
+
*
|
|
22
|
+
* Triggers on: three components (arbitrary example) that all compose
|
|
23
|
+
* `docker-build` -> `publish-image` -> `cfn-deploy` + `ecs-update-service` ->
|
|
24
|
+
* `wait-steady-state` + `health-gate` with no meaningful structural
|
|
25
|
+
* difference.
|
|
26
|
+
* OK: components whose phase/step-kind shape differs (a different archetype,
|
|
27
|
+
* a different apply family, fan-out vs. no fan-out, etc.) — like the four
|
|
28
|
+
* real pilots, which were deliberately chosen to be structurally distinct
|
|
29
|
+
* (see ../../../components/SPRAWL-VALIDATION.md).
|
|
30
|
+
*/
|
|
31
|
+
import { compositionFingerprint } from "./support.js";
|
|
32
|
+
export const comp007CompositionSprawlRule = {
|
|
33
|
+
id: "COMP007",
|
|
34
|
+
severity: "warning",
|
|
35
|
+
category: "style",
|
|
36
|
+
description: "An identical composition shape is repeated across components — a declaration-sprawl hint to reach for a preset",
|
|
37
|
+
check(ctx) {
|
|
38
|
+
const diagnostics = [];
|
|
39
|
+
const byFingerprint = new Map();
|
|
40
|
+
for (const [name, { component }] of ctx.components) {
|
|
41
|
+
const fp = compositionFingerprint(component);
|
|
42
|
+
byFingerprint.set(fp, [...(byFingerprint.get(fp) ?? []), name]);
|
|
43
|
+
}
|
|
44
|
+
for (const names of byFingerprint.values()) {
|
|
45
|
+
if (names.length < 2)
|
|
46
|
+
continue;
|
|
47
|
+
const sorted = [...names].sort();
|
|
48
|
+
for (const name of sorted) {
|
|
49
|
+
const others = sorted.filter((n) => n !== name);
|
|
50
|
+
const { filePath } = ctx.components.get(name);
|
|
51
|
+
diagnostics.push({
|
|
52
|
+
checkId: "COMP007",
|
|
53
|
+
severity: "warning",
|
|
54
|
+
component: name,
|
|
55
|
+
file: filePath,
|
|
56
|
+
message: `Component "${name}" composes an identical phase/step shape to ${others.map((n) => `"${n}"`).join(", ")} ` +
|
|
57
|
+
`— consider extracting a shared preset (docs/components/capabilities.mdx#presets) instead of repeating ` +
|
|
58
|
+
`the composition per component.`,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return diagnostics;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMP* composition lint rules (#562, epic #551) — the long-term entropy
|
|
3
|
+
* guards over the discovered `Component` graph. See ../../component-checks.ts
|
|
4
|
+
* for why these are `ComponentCheck`s (whole-project, post-discovery) rather
|
|
5
|
+
* than `LintRule`s (single-file AST), and docs/lint-rules/composition.mdx for
|
|
6
|
+
* the user-facing reference.
|
|
7
|
+
*/
|
|
8
|
+
import { comp001PublishesNeverAppliesRule } from "./comp001-publishes-never-applies.js";
|
|
9
|
+
import { comp002DanglingWiringRefRule } from "./comp002-dangling-wiring-ref.js";
|
|
10
|
+
import { comp003MutatingNoRollbackRule } from "./comp003-mutating-no-rollback.js";
|
|
11
|
+
import { comp004GateNeedsDurableRuntimeRule } from "./comp004-gate-needs-durable-runtime.js";
|
|
12
|
+
import { comp005CapabilityKindIsNounRule } from "./comp005-capability-kind-is-noun.js";
|
|
13
|
+
import { comp006ShellNeedsReasonRule } from "./comp006-shell-needs-reason.js";
|
|
14
|
+
import { comp007CompositionSprawlRule } from "./comp007-composition-sprawl.js";
|
|
15
|
+
export { comp001PublishesNeverAppliesRule } from "./comp001-publishes-never-applies.js";
|
|
16
|
+
export { comp002DanglingWiringRefRule } from "./comp002-dangling-wiring-ref.js";
|
|
17
|
+
export { comp003MutatingNoRollbackRule } from "./comp003-mutating-no-rollback.js";
|
|
18
|
+
export { comp004GateNeedsDurableRuntimeRule } from "./comp004-gate-needs-durable-runtime.js";
|
|
19
|
+
export { comp005CapabilityKindIsNounRule } from "./comp005-capability-kind-is-noun.js";
|
|
20
|
+
export { comp006ShellNeedsReasonRule } from "./comp006-shell-needs-reason.js";
|
|
21
|
+
export { comp007CompositionSprawlRule } from "./comp007-composition-sprawl.js";
|
|
22
|
+
/** All seven COMP* checks, sorted by id. */
|
|
23
|
+
export function loadComponentChecks() {
|
|
24
|
+
return [
|
|
25
|
+
comp001PublishesNeverAppliesRule,
|
|
26
|
+
comp002DanglingWiringRefRule,
|
|
27
|
+
comp003MutatingNoRollbackRule,
|
|
28
|
+
comp004GateNeedsDurableRuntimeRule,
|
|
29
|
+
comp005CapabilityKindIsNounRule,
|
|
30
|
+
comp006ShellNeedsReasonRule,
|
|
31
|
+
comp007CompositionSprawlRule,
|
|
32
|
+
];
|
|
33
|
+
}
|