@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,184 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
/** Graphviz's default node box, in layout units — the fallback for a node the
|
|
3
|
+
* painter didn't measure, so a size-less call still lays out as it always did. */
|
|
4
|
+
export const DEFAULT_NODE_SIZE = { w: 54, h: 36 };
|
|
5
|
+
/** Spacing between adjacent nodes / ranks for the JS engine, in layout units. */
|
|
6
|
+
const NODE_SEP = 28;
|
|
7
|
+
const RANK_SEP = 44;
|
|
8
|
+
/** Build engine input from an IR and a painter-measured size map (id → {w,h}).
|
|
9
|
+
* Nodes absent from the map fall back to {@link DEFAULT_NODE_SIZE}. Pure. */
|
|
10
|
+
export function toLayoutInput(ir, sizes = {}) {
|
|
11
|
+
return {
|
|
12
|
+
nodes: ir.nodes.map((n) => ({ id: n.id, ...(sizes[n.id] ?? DEFAULT_NODE_SIZE) })),
|
|
13
|
+
edges: ir.edges.map((e) => ({ from: e.from, to: e.to })),
|
|
14
|
+
groups: ir.groups?.byLexicon,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Drop duplicate / self edges — layout cares about structure, not multiplicity. */
|
|
18
|
+
function layoutEdges(input) {
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
const out = [];
|
|
21
|
+
for (const e of input.edges) {
|
|
22
|
+
if (e.from === e.to)
|
|
23
|
+
continue;
|
|
24
|
+
const key = `${e.from}\u0000${e.to}`;
|
|
25
|
+
if (seen.has(key))
|
|
26
|
+
continue;
|
|
27
|
+
seen.add(key);
|
|
28
|
+
out.push(e);
|
|
29
|
+
}
|
|
30
|
+
out.sort((a, b) => a.from.localeCompare(b.from) || a.to.localeCompare(b.to));
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Layout via dagre — pure JS, size-aware, no native dependency. The default.
|
|
35
|
+
* Fed nodes/edges in id order so the result is deterministic. dagre's space is
|
|
36
|
+
* y-down; we flip to y-up so the {@link Layout} contract matches Graphviz.
|
|
37
|
+
*/
|
|
38
|
+
export class DagreLayout {
|
|
39
|
+
constructor() {
|
|
40
|
+
this.name = "dagre";
|
|
41
|
+
}
|
|
42
|
+
async layout(input) {
|
|
43
|
+
const dagre = (await import("@dagrejs/dagre")).default;
|
|
44
|
+
const g = new dagre.graphlib.Graph();
|
|
45
|
+
g.setGraph({ rankdir: "TB", nodesep: NODE_SEP, ranksep: RANK_SEP });
|
|
46
|
+
g.setDefaultEdgeLabel(() => ({}));
|
|
47
|
+
const nodes = [...input.nodes].sort((a, b) => a.id.localeCompare(b.id));
|
|
48
|
+
for (const n of nodes)
|
|
49
|
+
g.setNode(n.id, { width: n.w, height: n.h });
|
|
50
|
+
for (const e of layoutEdges(input)) {
|
|
51
|
+
if (g.hasNode(e.from) && g.hasNode(e.to))
|
|
52
|
+
g.setEdge(e.from, e.to);
|
|
53
|
+
}
|
|
54
|
+
dagre.layout(g);
|
|
55
|
+
const gg = g.graph();
|
|
56
|
+
const width = gg.width ?? 0;
|
|
57
|
+
const height = gg.height ?? 0;
|
|
58
|
+
if (width === 0 || height === 0)
|
|
59
|
+
throw new Error("zero graph bounds");
|
|
60
|
+
const out = g.nodes().map((id) => {
|
|
61
|
+
const n = g.node(id);
|
|
62
|
+
return { id, x: n.x, y: height - n.y, w: n.width, h: n.height };
|
|
63
|
+
});
|
|
64
|
+
out.sort((a, b) => a.id.localeCompare(b.id));
|
|
65
|
+
return { width, height, nodes: out };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Layout via `dot -Tjson`. Opt-in; requires Graphviz (`brew install graphviz`).
|
|
69
|
+
* Lays out with real node sizes (`fixedsize`) and honours `groups` as clusters. */
|
|
70
|
+
export class GraphvizLayout {
|
|
71
|
+
constructor() {
|
|
72
|
+
this.name = "graphviz";
|
|
73
|
+
}
|
|
74
|
+
async layout(input) {
|
|
75
|
+
return parseDotJson(await runDot(inputToDot(input)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Resolve a layout engine by name. Defaults to dagre (no native dependency). */
|
|
79
|
+
export function getLayoutEngine(name) {
|
|
80
|
+
if (name === "graphviz")
|
|
81
|
+
return new GraphvizLayout();
|
|
82
|
+
if (name && name !== "dagre") {
|
|
83
|
+
throw new Error(`unknown layout engine "${name}". Available: dagre (default), graphviz.`);
|
|
84
|
+
}
|
|
85
|
+
return new DagreLayout();
|
|
86
|
+
}
|
|
87
|
+
/** Build the DOT for a layout pass: real node footprints via `fixedsize`, so
|
|
88
|
+
* `dot` spaces for the painted size rather than its tiny default box. */
|
|
89
|
+
function inputToDot(input) {
|
|
90
|
+
const lines = ["digraph chant {", " rankdir=TB;", " node [shape=box, fixedsize=true];"];
|
|
91
|
+
const byId = new Map(input.nodes.map((n) => [n.id, n]));
|
|
92
|
+
const grouped = new Set();
|
|
93
|
+
if (input.groups) {
|
|
94
|
+
for (const [group, members] of Object.entries(input.groups)) {
|
|
95
|
+
lines.push(` subgraph ${q(`cluster_${group}`)} {`);
|
|
96
|
+
for (const id of members) {
|
|
97
|
+
const n = byId.get(id);
|
|
98
|
+
if (!n)
|
|
99
|
+
continue;
|
|
100
|
+
grouped.add(id);
|
|
101
|
+
lines.push(` ${dotNode(n)}`);
|
|
102
|
+
}
|
|
103
|
+
lines.push(" }");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const n of input.nodes) {
|
|
107
|
+
if (!grouped.has(n.id))
|
|
108
|
+
lines.push(` ${dotNode(n)}`);
|
|
109
|
+
}
|
|
110
|
+
for (const e of layoutEdges(input))
|
|
111
|
+
lines.push(` ${q(e.from)} -> ${q(e.to)};`);
|
|
112
|
+
lines.push("}");
|
|
113
|
+
return lines.join("\n") + "\n";
|
|
114
|
+
}
|
|
115
|
+
/** A DOT node line. `dot` sizes are inches; layout units are points (72/inch). */
|
|
116
|
+
function dotNode(n) {
|
|
117
|
+
return `${q(n.id)} [width=${(n.w / 72).toFixed(4)}, height=${(n.h / 72).toFixed(4)}];`;
|
|
118
|
+
}
|
|
119
|
+
function q(s) {
|
|
120
|
+
return `"${s.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
121
|
+
}
|
|
122
|
+
function runDot(dot) {
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
let proc;
|
|
125
|
+
try {
|
|
126
|
+
proc = spawn("dot", ["-Tjson"], { stdio: ["pipe", "pipe", "pipe"] });
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
reject(installHint(err));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
let out = "";
|
|
133
|
+
let errOut = "";
|
|
134
|
+
proc.stdout.on("data", (d) => (out += d));
|
|
135
|
+
proc.stderr.on("data", (d) => (errOut += d));
|
|
136
|
+
proc.on("error", (err) => reject(installHint(err)));
|
|
137
|
+
proc.on("close", (code) => {
|
|
138
|
+
if (code !== 0)
|
|
139
|
+
reject(new Error(`dot exited ${code}: ${errOut.trim()}`));
|
|
140
|
+
else
|
|
141
|
+
resolve(out);
|
|
142
|
+
});
|
|
143
|
+
proc.stdin.write(dot);
|
|
144
|
+
proc.stdin.end();
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function installHint(err) {
|
|
148
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
149
|
+
return new Error(`could not run 'dot' (${msg}). Graphviz is required for --layout-engine graphviz — ` +
|
|
150
|
+
`install it with 'brew install graphviz', or drop the flag to use the default dagre engine ` +
|
|
151
|
+
`(no native dependency).`);
|
|
152
|
+
}
|
|
153
|
+
/** Parse `dot -Tjson` output into a {@link Layout}. Pure; exported for testing. */
|
|
154
|
+
export function parseDotJson(json) {
|
|
155
|
+
const parsed = JSON.parse(json);
|
|
156
|
+
const bb = (parsed.bb ?? "").split(",");
|
|
157
|
+
if (bb.length !== 4)
|
|
158
|
+
throw new Error(`bad bounding box ${parsed.bb}`);
|
|
159
|
+
const width = num(bb[2]);
|
|
160
|
+
const height = num(bb[3]);
|
|
161
|
+
if (width === 0 || height === 0)
|
|
162
|
+
throw new Error("zero graph bounds");
|
|
163
|
+
const nodes = [];
|
|
164
|
+
for (const o of parsed.objects ?? []) {
|
|
165
|
+
if (!o.name || !o.pos)
|
|
166
|
+
continue;
|
|
167
|
+
const p = o.pos.split(",");
|
|
168
|
+
if (p.length !== 2)
|
|
169
|
+
continue;
|
|
170
|
+
const node = { id: o.name, x: num(p[0]), y: num(p[1]) };
|
|
171
|
+
// dot reports width/height in inches; echo as layout units (points).
|
|
172
|
+
if (o.width)
|
|
173
|
+
node.w = num(o.width) * 72;
|
|
174
|
+
if (o.height)
|
|
175
|
+
node.h = num(o.height) * 72;
|
|
176
|
+
nodes.push(node);
|
|
177
|
+
}
|
|
178
|
+
nodes.sort((a, b) => a.id.localeCompare(b.id));
|
|
179
|
+
return { width, height, nodes };
|
|
180
|
+
}
|
|
181
|
+
function num(s) {
|
|
182
|
+
const f = Number.parseFloat(s.trim());
|
|
183
|
+
return Number.isFinite(f) ? f : 0;
|
|
184
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const KINDS = new Set(["lexicon", "stack", "blast"]);
|
|
2
|
+
/** Parse a `--lens` spec. Throws a descriptive Error on a malformed spec. */
|
|
3
|
+
export function parseLens(spec, opts = {}) {
|
|
4
|
+
const colon = spec.indexOf(":");
|
|
5
|
+
if (colon <= 0 || colon === spec.length - 1) {
|
|
6
|
+
throw new Error(`Invalid --lens "${spec}". Expected <kind>:<target>, e.g. lexicon:gcp or blast:vpc.`);
|
|
7
|
+
}
|
|
8
|
+
const kind = spec.slice(0, colon);
|
|
9
|
+
const target = spec.slice(colon + 1);
|
|
10
|
+
if (!KINDS.has(kind)) {
|
|
11
|
+
throw new Error(`Unknown lens "${kind}". Expected one of: ${[...KINDS].join(", ")}.`);
|
|
12
|
+
}
|
|
13
|
+
// For blast, default to both directions when neither flag is given.
|
|
14
|
+
const both = !opts.up && !opts.down;
|
|
15
|
+
return {
|
|
16
|
+
kind: kind,
|
|
17
|
+
target,
|
|
18
|
+
up: opts.up ?? both,
|
|
19
|
+
down: opts.down ?? both,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** Apply a lens to the IR. Throws a descriptive Error when the target matches nothing. */
|
|
23
|
+
export function applyLens(ir, lens) {
|
|
24
|
+
const keep = lens.kind === "blast" ? blastSet(ir, lens) : partitionSet(ir, lens);
|
|
25
|
+
return subgraph(ir, keep);
|
|
26
|
+
}
|
|
27
|
+
/** Node ids for a lexicon/stack lens. */
|
|
28
|
+
function partitionSet(ir, lens) {
|
|
29
|
+
if (lens.kind === "stack") {
|
|
30
|
+
const members = ir.groups.byStack?.[lens.target] ?? ir.groups.byLexicon?.[lens.target];
|
|
31
|
+
if (members && members.length)
|
|
32
|
+
return new Set(members);
|
|
33
|
+
// Fall through to a direct scan if groups are absent.
|
|
34
|
+
}
|
|
35
|
+
const keep = new Set();
|
|
36
|
+
for (const n of ir.nodes)
|
|
37
|
+
if (n.lexicon === lens.target)
|
|
38
|
+
keep.add(n.id);
|
|
39
|
+
if (keep.size === 0) {
|
|
40
|
+
throw new Error(`No nodes match lens ${lens.kind}:${lens.target}.`);
|
|
41
|
+
}
|
|
42
|
+
return keep;
|
|
43
|
+
}
|
|
44
|
+
/** Node ids in the transitive neighbourhood of a node. */
|
|
45
|
+
function blastSet(ir, lens) {
|
|
46
|
+
if (!ir.nodes.some((n) => n.id === lens.target)) {
|
|
47
|
+
throw new Error(`No node "${lens.target}" for lens blast:${lens.target}.`);
|
|
48
|
+
}
|
|
49
|
+
const out = new Map(); // from -> [to] (depends-on)
|
|
50
|
+
const inc = new Map(); // to -> [from] (depended-on-by)
|
|
51
|
+
const push = (m, k, v) => {
|
|
52
|
+
const arr = m.get(k);
|
|
53
|
+
if (arr)
|
|
54
|
+
arr.push(v);
|
|
55
|
+
else
|
|
56
|
+
m.set(k, [v]);
|
|
57
|
+
};
|
|
58
|
+
for (const e of ir.edges) {
|
|
59
|
+
push(out, e.from, e.to);
|
|
60
|
+
push(inc, e.to, e.from);
|
|
61
|
+
}
|
|
62
|
+
const keep = new Set([lens.target]);
|
|
63
|
+
if (lens.up)
|
|
64
|
+
walk(lens.target, out, keep);
|
|
65
|
+
if (lens.down)
|
|
66
|
+
walk(lens.target, inc, keep);
|
|
67
|
+
return keep;
|
|
68
|
+
}
|
|
69
|
+
function walk(start, adj, keep) {
|
|
70
|
+
const stack = [start];
|
|
71
|
+
while (stack.length) {
|
|
72
|
+
const cur = stack.pop();
|
|
73
|
+
for (const next of adj.get(cur) ?? []) {
|
|
74
|
+
if (!keep.has(next)) {
|
|
75
|
+
keep.add(next);
|
|
76
|
+
stack.push(next);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Restrict the IR to a node set: keep internal edges, rebuild groups. */
|
|
82
|
+
function subgraph(ir, keep) {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
const nodes = ir.nodes.filter((n) => keep.has(n.id));
|
|
85
|
+
const edges = ir.edges.filter((e) => keep.has(e.from) && keep.has(e.to));
|
|
86
|
+
const byLexicon = {};
|
|
87
|
+
const byComposite = {};
|
|
88
|
+
for (const n of nodes) {
|
|
89
|
+
(byLexicon[_a = n.lexicon] ?? (byLexicon[_a] = [])).push(n.id);
|
|
90
|
+
if (n.compositeInstance)
|
|
91
|
+
(byComposite[_b = n.compositeInstance] ?? (byComposite[_b] = [])).push(n.id);
|
|
92
|
+
}
|
|
93
|
+
const groups = {};
|
|
94
|
+
if (Object.keys(byLexicon).length)
|
|
95
|
+
groups.byLexicon = sortGroups(byLexicon);
|
|
96
|
+
if (Object.keys(byComposite).length)
|
|
97
|
+
groups.byComposite = sortGroups(byComposite);
|
|
98
|
+
return { nodes, edges, groups };
|
|
99
|
+
}
|
|
100
|
+
function sortGroups(rec) {
|
|
101
|
+
const out = {};
|
|
102
|
+
for (const k of Object.keys(rec).sort())
|
|
103
|
+
out[k] = rec[k].sort();
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render the graph IR as a Mermaid `flowchart`. Mermaid is the zero-install
|
|
3
|
+
* default — it renders in GitHub, docs, and browsers with no native dependency,
|
|
4
|
+
* so `chant graph --format mermaid` gives a diagram out of the box without the
|
|
5
|
+
* standalone painter. Lower fidelity than a custom painter, but portable.
|
|
6
|
+
*
|
|
7
|
+
* Consumes whatever IR it is given, so it honours `--detail` and `--lens` for
|
|
8
|
+
* free (those are IR → IR transforms). See issue #496 / epic #492.
|
|
9
|
+
*
|
|
10
|
+
* Known limits: Mermaid owns layout, so there is little control over node
|
|
11
|
+
* placement, and very large graphs get hard to read — that is the trade-off for
|
|
12
|
+
* zero-install portability. Reach for the graphviz/custom-painter path (#497,
|
|
13
|
+
* pinhole) when fidelity matters.
|
|
14
|
+
*/
|
|
15
|
+
export function toMermaid(ir) {
|
|
16
|
+
const ids = new Map(); // logical name -> mermaid-safe id
|
|
17
|
+
for (const n of ir.nodes)
|
|
18
|
+
safeId(n.id, ids);
|
|
19
|
+
const lines = ["flowchart TD"];
|
|
20
|
+
// Cluster by wave (component graph) when present, else by lexicon (entity
|
|
21
|
+
// graph); nodes outside any group fall through to the top level. Both are
|
|
22
|
+
// sorted, so output is deterministic.
|
|
23
|
+
const clusters = ir.groups.byWave ?? ir.groups.byLexicon;
|
|
24
|
+
const clusterPrefix = ir.groups.byWave ? "wave" : "lex";
|
|
25
|
+
const grouped = new Set();
|
|
26
|
+
if (clusters) {
|
|
27
|
+
for (const [name, members] of Object.entries(clusters)) {
|
|
28
|
+
lines.push(` subgraph ${safeId(`${clusterPrefix}_${name}`, ids)}[${quote(name)}]`);
|
|
29
|
+
for (const id of members) {
|
|
30
|
+
const node = ir.nodes.find((n) => n.id === id);
|
|
31
|
+
if (!node)
|
|
32
|
+
continue;
|
|
33
|
+
grouped.add(id);
|
|
34
|
+
lines.push(` ${nodeLine(node, ids)}`);
|
|
35
|
+
}
|
|
36
|
+
lines.push(" end");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const node of ir.nodes) {
|
|
40
|
+
if (grouped.has(node.id))
|
|
41
|
+
continue;
|
|
42
|
+
lines.push(` ${nodeLine(node, ids)}`);
|
|
43
|
+
}
|
|
44
|
+
for (const e of ir.edges) {
|
|
45
|
+
lines.push(` ${edgeLine(e, ids)}`);
|
|
46
|
+
}
|
|
47
|
+
return lines.join("\n") + "\n";
|
|
48
|
+
}
|
|
49
|
+
function nodeLine(node, ids) {
|
|
50
|
+
const id = safeId(node.id, ids);
|
|
51
|
+
const parts = [node.id];
|
|
52
|
+
if (node.kind && node.kind !== node.id)
|
|
53
|
+
parts.push(node.kind);
|
|
54
|
+
return `${id}[${quote(parts.join("\n"))}]`;
|
|
55
|
+
}
|
|
56
|
+
function edgeLine(e, ids) {
|
|
57
|
+
const from = safeId(e.from, ids);
|
|
58
|
+
const to = safeId(e.to, ids);
|
|
59
|
+
const label = [e.viaAttr, e.toAttr].filter(Boolean).join(" → ");
|
|
60
|
+
return label ? `${from} -->|${quote(label)}| ${to}` : `${from} --> ${to}`;
|
|
61
|
+
}
|
|
62
|
+
/** Map an arbitrary logical name to a stable, unique Mermaid-safe node id. */
|
|
63
|
+
function safeId(raw, ids) {
|
|
64
|
+
const existing = ids.get(raw);
|
|
65
|
+
if (existing)
|
|
66
|
+
return existing;
|
|
67
|
+
let base = raw.replace(/[^A-Za-z0-9_]/g, "_");
|
|
68
|
+
if (base === "" || /^[0-9]/.test(base))
|
|
69
|
+
base = `n_${base}`;
|
|
70
|
+
const taken = new Set(ids.values());
|
|
71
|
+
let candidate = base;
|
|
72
|
+
let i = 1;
|
|
73
|
+
while (taken.has(candidate))
|
|
74
|
+
candidate = `${base}_${i++}`;
|
|
75
|
+
ids.set(raw, candidate);
|
|
76
|
+
return candidate;
|
|
77
|
+
}
|
|
78
|
+
/** Quote a Mermaid label, escaping markup and turning newlines into <br/>. */
|
|
79
|
+
function quote(text) {
|
|
80
|
+
const esc = (s) => s.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
81
|
+
const body = text.split("\n").map(esc).join("<br/>");
|
|
82
|
+
return `"${body}"`;
|
|
83
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { basename, resolve } from "node:path";
|
|
2
|
+
import { discoverOps } from "./op/discover.js";
|
|
3
|
+
import { Op } from "./op/builders.js";
|
|
4
|
+
import { setProvenance } from "./provenance.js";
|
|
5
|
+
/**
|
|
6
|
+
* #1675 — the graph IR is built from `discover(sourceDir)`, but the Op
|
|
7
|
+
* convention keeps `*.op.ts` files OUTSIDE `sourceDir` (`ops/` or the project
|
|
8
|
+
* root beside `sourceDir: "src"`), and `chant op` / `chant graph` find them via
|
|
9
|
+
* {@link discoverOps}, which scans from the git root. Join the two scopes: every
|
|
10
|
+
* Op `discoverOps` finds that discovery did not already load becomes a
|
|
11
|
+
* `Chant::Op` entity in the map, keyed the way discovery keys a default
|
|
12
|
+
* export (the file's basename sans `.op.ts`), so the IR carries the declared
|
|
13
|
+
* DAG whatever the layout. Ops discovery already loaded (same file) are left
|
|
14
|
+
* alone. Returns the op-discovery errors for the caller to surface.
|
|
15
|
+
*/
|
|
16
|
+
export async function mergeProjectOps(entities, sourceFiles, projectPath) {
|
|
17
|
+
const added = [];
|
|
18
|
+
let found;
|
|
19
|
+
try {
|
|
20
|
+
found = await discoverOps({ cwd: projectPath });
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
// Not a git checkout — nothing beyond sourceDir to join.
|
|
24
|
+
return { added, errors: [err instanceof Error ? err.message : String(err)] };
|
|
25
|
+
}
|
|
26
|
+
const loaded = new Set(sourceFiles.map((f) => resolve(f)));
|
|
27
|
+
for (const { config, filePath } of found.ops.values()) {
|
|
28
|
+
if (loaded.has(resolve(filePath)))
|
|
29
|
+
continue;
|
|
30
|
+
const key = basename(filePath).replace(/\.ts$/, "").replace(/\.op$/, "");
|
|
31
|
+
if (entities.has(key))
|
|
32
|
+
continue;
|
|
33
|
+
const entity = Op(config);
|
|
34
|
+
setProvenance(entity, { sourceFile: resolve(filePath) });
|
|
35
|
+
entities.set(key, entity);
|
|
36
|
+
added.push(key);
|
|
37
|
+
}
|
|
38
|
+
return { added, errors: found.errors };
|
|
39
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
function toStr(v) {
|
|
2
|
+
if (typeof v === "string")
|
|
3
|
+
return v;
|
|
4
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
5
|
+
return String(v);
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Read all scalar values at an attr path. Supports nested keys (`a.b`) and array
|
|
10
|
+
* fan-out (`arr[]`, `arr[].id`). Returns every scalar found — a path through an
|
|
11
|
+
* array yields one value per element.
|
|
12
|
+
*/
|
|
13
|
+
export function readPath(obj, path) {
|
|
14
|
+
let cur = [obj];
|
|
15
|
+
for (const part of path.split(".")) {
|
|
16
|
+
const isArr = part.endsWith("[]");
|
|
17
|
+
const key = isArr ? part.slice(0, -2) : part;
|
|
18
|
+
const next = [];
|
|
19
|
+
for (const c of cur) {
|
|
20
|
+
if (c == null || typeof c !== "object")
|
|
21
|
+
continue;
|
|
22
|
+
const val = c[key];
|
|
23
|
+
if (isArr) {
|
|
24
|
+
if (Array.isArray(val))
|
|
25
|
+
next.push(...val);
|
|
26
|
+
}
|
|
27
|
+
else if (val !== undefined) {
|
|
28
|
+
next.push(val);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
cur = next;
|
|
32
|
+
}
|
|
33
|
+
const out = [];
|
|
34
|
+
for (const c of cur) {
|
|
35
|
+
const s = toStr(c);
|
|
36
|
+
if (s !== undefined)
|
|
37
|
+
out.push(s);
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
/** Merge several lexicons' catalogs into one (concatenate identities + refs). */
|
|
42
|
+
export function mergeCatalogs(catalogs) {
|
|
43
|
+
return {
|
|
44
|
+
identities: catalogs.flatMap((c) => c.identities),
|
|
45
|
+
refs: catalogs.flatMap((c) => c.refs),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reconstruct edges + containment from live nodes and a catalog. Pure and
|
|
50
|
+
* deterministic. Matching is exact on identifier value; identifier collisions
|
|
51
|
+
* across kinds are disambiguated by `targetKind`. Self-references are dropped.
|
|
52
|
+
*/
|
|
53
|
+
export function reconstructEdges(nodes, catalog) {
|
|
54
|
+
// Identity index: identifier value → the node(s) that own it.
|
|
55
|
+
const index = new Map();
|
|
56
|
+
const add = (value, id, kind) => {
|
|
57
|
+
(index.get(value) ?? index.set(value, []).get(value)).push({ id, kind });
|
|
58
|
+
};
|
|
59
|
+
for (const node of nodes) {
|
|
60
|
+
// Every node is identified by its own logical id — so references resolved to
|
|
61
|
+
// a logical id (e.g. a CloudFormation `{Ref: LogicalId}` from exportResources,
|
|
62
|
+
// #784) match directly — plus its physical id and any catalog identity attrs.
|
|
63
|
+
add(node.id, node.id, node.kind);
|
|
64
|
+
if (node.physicalId)
|
|
65
|
+
add(node.physicalId, node.id, node.kind);
|
|
66
|
+
for (const rule of catalog.identities) {
|
|
67
|
+
if (rule.kind !== node.kind)
|
|
68
|
+
continue;
|
|
69
|
+
for (const p of rule.ids)
|
|
70
|
+
for (const v of readPath(node.attrs, p))
|
|
71
|
+
add(v, node.id, node.kind);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const edges = [];
|
|
75
|
+
const containment = [];
|
|
76
|
+
const containmentEdges = [];
|
|
77
|
+
const seenContEdge = new Set();
|
|
78
|
+
const dangling = [];
|
|
79
|
+
const seenEdge = new Set();
|
|
80
|
+
const seenCont = new Set();
|
|
81
|
+
for (const node of nodes) {
|
|
82
|
+
for (const rule of catalog.refs) {
|
|
83
|
+
if (rule.from !== node.kind)
|
|
84
|
+
continue;
|
|
85
|
+
for (const value of readPath(node.attrs, rule.path)) {
|
|
86
|
+
const candidates = index.get(value) ?? [];
|
|
87
|
+
const match = rule.targetKind ? candidates.find((c) => c.kind === rule.targetKind) : candidates[0];
|
|
88
|
+
if (!match) {
|
|
89
|
+
dangling.push({ from: node.id, path: rule.path, value, ...(rule.targetKind ? { targetKind: rule.targetKind } : {}) });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (match.id === node.id)
|
|
93
|
+
continue; // self-reference (e.g. an SG rule to its own group)
|
|
94
|
+
const pushEdge = (via) => {
|
|
95
|
+
const k = `${node.id}|${match.id}|${via}`;
|
|
96
|
+
if (seenEdge.has(k))
|
|
97
|
+
return;
|
|
98
|
+
seenEdge.add(k);
|
|
99
|
+
edges.push({ from: node.id, to: match.id, kind: "ref", viaAttr: via });
|
|
100
|
+
};
|
|
101
|
+
if (rule.relation === "containment") {
|
|
102
|
+
const k = `${node.id}|${match.id}`;
|
|
103
|
+
if (!seenCont.has(k)) {
|
|
104
|
+
seenCont.add(k);
|
|
105
|
+
containment.push({ child: node.id, parent: match.id, ...(rule.label ? { label: rule.label } : {}) });
|
|
106
|
+
}
|
|
107
|
+
// Traversable by construction. The attribute the containment was read
|
|
108
|
+
// through is its traversal name, so `<-attr:` can still discriminate
|
|
109
|
+
// between two ways of being inside something.
|
|
110
|
+
const via = rule.viaAttr ?? rule.path;
|
|
111
|
+
const ke = `${node.id}|${match.id}|${via}`;
|
|
112
|
+
if (!seenContEdge.has(ke)) {
|
|
113
|
+
seenContEdge.add(ke);
|
|
114
|
+
containmentEdges.push({ from: node.id, to: match.id, kind: "ref", viaAttr: via });
|
|
115
|
+
}
|
|
116
|
+
// A containment relation is a boundary hint, not an edge — unless the
|
|
117
|
+
// rule declares a traversal name (#1275). A fold's first hop is
|
|
118
|
+
// sometimes exactly a containment ("an instance is in a subnet"), and
|
|
119
|
+
// it must be traversable without duplicating the rule as a reference
|
|
120
|
+
// and drawing the line twice.
|
|
121
|
+
if (rule.viaAttr)
|
|
122
|
+
pushEdge(rule.viaAttr);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Traversal name wins over the rendering label: the labels are
|
|
126
|
+
// human-facing ("sg", "via"), and a fold matches provider attribute
|
|
127
|
+
// names (#1275).
|
|
128
|
+
pushEdge(rule.viaAttr ?? rule.label ?? rule.path);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
edges.sort((a, b) => `${a.from}|${a.to}|${a.viaAttr}`.localeCompare(`${b.from}|${b.to}|${b.viaAttr}`));
|
|
134
|
+
containmentEdges.sort((a, b) => `${a.from}|${a.to}|${a.viaAttr}`.localeCompare(`${b.from}|${b.to}|${b.viaAttr}`));
|
|
135
|
+
containment.sort((a, b) => `${a.child}|${a.parent}`.localeCompare(`${b.child}|${b.parent}`));
|
|
136
|
+
dangling.sort((a, b) => `${a.from}|${a.path}|${a.value}`.localeCompare(`${b.from}|${b.path}|${b.value}`));
|
|
137
|
+
return { edges, containment, containmentEdges, dangling };
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Invert containment pairs into grouping metadata (#779): container node id → the
|
|
141
|
+
* node ids directly inside it. The result is the `IRGroups.byContainer` shape a
|
|
142
|
+
* renderer draws as boundary boxes. It represents the full nesting *flatly* — a
|
|
143
|
+
* subnet is both a member of its VPC's entry and a key with its own members —
|
|
144
|
+
* so a boundary-box renderer recurses it (VPC ⊃ subnet ⊃ resources). Sorted for
|
|
145
|
+
* determinism.
|
|
146
|
+
*/
|
|
147
|
+
export function containmentGroups(pairs) {
|
|
148
|
+
const byParent = new Map();
|
|
149
|
+
for (const { child, parent } of pairs) {
|
|
150
|
+
(byParent.get(parent) ?? byParent.set(parent, new Set()).get(parent)).add(child);
|
|
151
|
+
}
|
|
152
|
+
const out = {};
|
|
153
|
+
for (const parent of [...byParent.keys()].sort())
|
|
154
|
+
out[parent] = [...byParent.get(parent)].sort();
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `heldElsewhere` — a typed, per-property declaration that a field belongs to
|
|
3
|
+
* something else once the first apply happens (chant #2162).
|
|
4
|
+
*
|
|
5
|
+
* An autoscaler owns a Deployment's `replicas` after the first apply. A
|
|
6
|
+
* controller writes an annotation on every sync. An operator was granted one
|
|
7
|
+
* knob deliberately. None of these are drift, and reconciling them back to
|
|
8
|
+
* whatever chant last declared would fight the thing that is actually
|
|
9
|
+
* supposed to own the field.
|
|
10
|
+
*
|
|
11
|
+
* Terraform's answer is `lifecycle { ignore_changes = [...] }`: a list of
|
|
12
|
+
* strings, carrying no reason, invisible once written. This is the typed
|
|
13
|
+
* alternative — a marker written where the property's value would go, so a
|
|
14
|
+
* lexicon's generated types check it the same way they check any other value,
|
|
15
|
+
* and it cannot be attached to a property that does not exist.
|
|
16
|
+
*
|
|
17
|
+
* This is not a suppression comment. `chant-ignore` (#2111) hides a *lint*
|
|
18
|
+
* finding about source; a `heldElsewhere` marker is a fact about who operates
|
|
19
|
+
* a field at *runtime*, so it lives in the typed declaration, where
|
|
20
|
+
* `chant lifecycle plan` and `chant lifecycle diff --live` can render it,
|
|
21
|
+
* rather than in a comment only a linter reads.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Runtime-only marker, symbol-keyed so it never collides with a real
|
|
25
|
+
* property actually named `by` or `reason` and never serializes by accident
|
|
26
|
+
* through `JSON.stringify` or `Object.entries` (which do not visit symbol
|
|
27
|
+
* keys) — the two places a stray plain-object marker would otherwise leak
|
|
28
|
+
* into a snapshot or a wire payload unnoticed.
|
|
29
|
+
*/
|
|
30
|
+
export const HELD_ELSEWHERE_MARKER = Symbol.for("chant.heldElsewhere");
|
|
31
|
+
/**
|
|
32
|
+
* Declare a property held by something else after the first apply.
|
|
33
|
+
*
|
|
34
|
+
* Typed `T` — the property's own declared type — rather than
|
|
35
|
+
* `HeldElsewhereMarker`, so it type-checks in exactly the position the
|
|
36
|
+
* property's real value would go: `replicas: heldElsewhere({ by: "hpa",
|
|
37
|
+
* reason: "the autoscaler owns replicas after the first apply" })` against a
|
|
38
|
+
* generated `replicas?: number` typechecks the same way `replicas: 3` does,
|
|
39
|
+
* and writing it against a property that does not exist on the resource's
|
|
40
|
+
* props is an excess-property error like any other.
|
|
41
|
+
*
|
|
42
|
+
* The runtime value is the marker object, not a `T` — this function tells
|
|
43
|
+
* TypeScript otherwise on purpose. Every consumer that must tell the two
|
|
44
|
+
* apart checks {@link isHeldElsewhere} before trusting a declared value's
|
|
45
|
+
* real shape: the synth-time serializer (`serializer-walker.ts`, which omits
|
|
46
|
+
* the field from the applied payload so the property is never sent — the
|
|
47
|
+
* provider defaults it once at creation, and the holder owns it from there)
|
|
48
|
+
* and the deep-diff declared side (`deep-observation.ts`/`deep-diff.ts`,
|
|
49
|
+
* which reports a live difference as held rather than as drift).
|
|
50
|
+
*/
|
|
51
|
+
export function heldElsewhere(opts) {
|
|
52
|
+
const marker = {
|
|
53
|
+
[HELD_ELSEWHERE_MARKER]: true,
|
|
54
|
+
by: opts.by,
|
|
55
|
+
reason: opts.reason,
|
|
56
|
+
};
|
|
57
|
+
return marker;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* True when `value` is a {@link HeldElsewhereMarker} — the runtime shape a
|
|
61
|
+
* `heldElsewhere()` call produces, wherever it ends up (a resource's own
|
|
62
|
+
* prop, nested inside a property-kind Declarable's props).
|
|
63
|
+
*/
|
|
64
|
+
export function isHeldElsewhere(value) {
|
|
65
|
+
return (typeof value === "object" &&
|
|
66
|
+
value !== null &&
|
|
67
|
+
value[HELD_ELSEWHERE_MARKER] === true);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* JSON-safe tag a held marker normalizes to (see `deep-observation.ts`) so
|
|
71
|
+
* its identity survives normalization, `flattenDeepProperties`, and a
|
|
72
|
+
* `--json` round-trip. The symbol marker above does not serialize and
|
|
73
|
+
* `Object.entries` does not enumerate it, so without a JSON-safe stand-in the
|
|
74
|
+
* normalization pass would flatten `{ by, reason }` into two ordinary leaf
|
|
75
|
+
* paths instead of keeping the marker recognizable as one value.
|
|
76
|
+
*/
|
|
77
|
+
export const HELD_ELSEWHERE_TAG = "chant:heldElsewhere";
|
|
78
|
+
/** Normalize a runtime marker to its JSON-safe tagged form. */
|
|
79
|
+
export function normalizeHeldElsewhere(marker) {
|
|
80
|
+
return { heldElsewhere: HELD_ELSEWHERE_TAG, by: marker.by, reason: marker.reason };
|
|
81
|
+
}
|
|
82
|
+
/** True when `value` is the normalized, JSON-safe tagged form of a held marker. */
|
|
83
|
+
export function isNormalizedHeldElsewhere(value) {
|
|
84
|
+
return (typeof value === "object" &&
|
|
85
|
+
value !== null &&
|
|
86
|
+
value.heldElsewhere === HELD_ELSEWHERE_TAG);
|
|
87
|
+
}
|