@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,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic JSON Schema resolution utilities for lexicon code generation.
|
|
3
|
+
*
|
|
4
|
+
* These functions handle the common subset of JSON Schema used by
|
|
5
|
+
* infrastructure-as-code formats (CloudFormation, Terraform, Azure ARM, etc.).
|
|
6
|
+
* Lexicon-specific entry points call these with a `resolveDefName` callback
|
|
7
|
+
* to produce their own naming conventions.
|
|
8
|
+
*/
|
|
9
|
+
// --- Functions ---
|
|
10
|
+
/** Shared empty cycle guard, so the common call allocates nothing. */
|
|
11
|
+
const EMPTY_SEEN = new Set();
|
|
12
|
+
/**
|
|
13
|
+
* Get the primary type from a type field that can be string or string[].
|
|
14
|
+
* Returns first non-"null" type, or "any" if empty.
|
|
15
|
+
*/
|
|
16
|
+
export function primaryType(type) {
|
|
17
|
+
if (!type)
|
|
18
|
+
return "any";
|
|
19
|
+
if (typeof type === "string")
|
|
20
|
+
return type;
|
|
21
|
+
for (const t of type) {
|
|
22
|
+
if (t !== "null")
|
|
23
|
+
return t;
|
|
24
|
+
}
|
|
25
|
+
return type.length > 0 ? type[0] : "any";
|
|
26
|
+
}
|
|
27
|
+
/** The branch list a property carries under `oneOf` or `anyOf`, or undefined. */
|
|
28
|
+
function branchesOf(prop) {
|
|
29
|
+
if (prop.oneOf && prop.oneOf.length > 0)
|
|
30
|
+
return prop.oneOf;
|
|
31
|
+
if (prop.anyOf && prop.anyOf.length > 0)
|
|
32
|
+
return prop.anyOf;
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
/** A union of string literals, sorted, from a list of enum values. */
|
|
36
|
+
function enumUnion(values) {
|
|
37
|
+
return [...values].sort().map((v) => JSON.stringify(v)).join(" | ");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* `T[]`, parenthesized when `T` is a union.
|
|
41
|
+
*
|
|
42
|
+
* `[]` binds tighter than `|`, so an unparenthesized `"a" | "b"[]` reads as
|
|
43
|
+
* `"a" | ("b"[])`: it accepts the bare string `"a"` and rejects `["a"]`.
|
|
44
|
+
*/
|
|
45
|
+
function arrayOf(itemType) {
|
|
46
|
+
return itemType.includes(" | ") ? `(${itemType})[]` : `${itemType}[]`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The branch of a `oneOf`/`anyOf` that narrows a string property to an enum.
|
|
50
|
+
*
|
|
51
|
+
* CloudFormation writes several string properties as a `type: "string"` beside
|
|
52
|
+
* a branch list whose first branch is the real enum and whose other branches
|
|
53
|
+
* are case-insensitive `pattern`s for the same values (`AWS::AmazonMQ::Broker`'s
|
|
54
|
+
* `EngineType`). The branch list relaxes the enum rather than summing shapes, so
|
|
55
|
+
* the enum is the useful type. Only strings qualify: anything else is a real sum.
|
|
56
|
+
*/
|
|
57
|
+
function relaxedEnumBranch(prop, branches) {
|
|
58
|
+
if (prop.type !== undefined && primaryType(prop.type) !== "string")
|
|
59
|
+
return undefined;
|
|
60
|
+
for (const b of branches) {
|
|
61
|
+
if (!b.enum || b.enum.length === 0)
|
|
62
|
+
continue;
|
|
63
|
+
if (b.type !== undefined && primaryType(b.type) !== "string")
|
|
64
|
+
return undefined;
|
|
65
|
+
if (!b.enum.every((v) => typeof v === "string"))
|
|
66
|
+
return undefined;
|
|
67
|
+
return b.enum;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The single content-bearing branch of an `allOf`, when that is the whole shape.
|
|
73
|
+
*
|
|
74
|
+
* Every `allOf` in the CloudFormation Registry is one `$ref` beside an
|
|
75
|
+
* annotation object (`{ "default": "MCP" }`), which types exactly as the `$ref`
|
|
76
|
+
* alone. An `allOf` that intersects two real shapes has no single answer and is
|
|
77
|
+
* left to the caller.
|
|
78
|
+
*/
|
|
79
|
+
function soleTypedBranch(branches) {
|
|
80
|
+
const typed = branches.filter((b) => b.$ref || b.type || b.properties || b.items || (b.enum && b.enum.length > 0) || branchesOf(b));
|
|
81
|
+
return typed.length === 1 ? typed[0] : undefined;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Resolve a schema property to its TypeScript type string.
|
|
85
|
+
*
|
|
86
|
+
* @param prop - The property to resolve
|
|
87
|
+
* @param schema - The containing schema document (for $ref resolution)
|
|
88
|
+
* @param resolveDefName - Callback to produce a TypeScript name from a definition.
|
|
89
|
+
* Receives (defName: string) and should return the TS type name for that definition.
|
|
90
|
+
* When null, $ref to object definitions resolves to "any".
|
|
91
|
+
* @param seen - Definition names already on the current resolution path, so a
|
|
92
|
+
* list definition that reaches itself terminates instead of recursing forever.
|
|
93
|
+
*/
|
|
94
|
+
export function resolvePropertyType(prop, schema, resolveDefName, seen = EMPTY_SEEN) {
|
|
95
|
+
if (!prop)
|
|
96
|
+
return "any";
|
|
97
|
+
// `allOf` of one real branch and some annotations types as that branch.
|
|
98
|
+
if (prop.allOf && prop.allOf.length > 0 && !prop.$ref && !prop.type && !prop.enum) {
|
|
99
|
+
const sole = soleTypedBranch(prop.allOf);
|
|
100
|
+
if (sole)
|
|
101
|
+
return resolvePropertyType(sole, schema, resolveDefName, seen);
|
|
102
|
+
}
|
|
103
|
+
const branches = branchesOf(prop);
|
|
104
|
+
if (branches) {
|
|
105
|
+
// A branch list beside a `type` relaxes that type; the enum branch, when
|
|
106
|
+
// there is one, is the narrowest reading of it.
|
|
107
|
+
const relaxed = relaxedEnumBranch(prop, branches);
|
|
108
|
+
if (relaxed)
|
|
109
|
+
return enumUnion(relaxed);
|
|
110
|
+
// With nothing beside it the branch list is a sum of shapes, which this
|
|
111
|
+
// emitter does not express yet (chant #2278).
|
|
112
|
+
if (!prop.$ref && !prop.type && !(prop.enum && prop.enum.length > 0))
|
|
113
|
+
return "any";
|
|
114
|
+
// Otherwise fall through and read the sibling keywords.
|
|
115
|
+
}
|
|
116
|
+
// Handle $ref
|
|
117
|
+
if (prop.$ref) {
|
|
118
|
+
return resolveRef(prop.$ref, schema, resolveDefName, seen);
|
|
119
|
+
}
|
|
120
|
+
// Inline enum → union of string literals
|
|
121
|
+
if (prop.enum && prop.enum.length > 0) {
|
|
122
|
+
return enumUnion(prop.enum);
|
|
123
|
+
}
|
|
124
|
+
const pt = primaryType(prop.type);
|
|
125
|
+
switch (pt) {
|
|
126
|
+
case "string":
|
|
127
|
+
return "string";
|
|
128
|
+
case "integer":
|
|
129
|
+
case "number":
|
|
130
|
+
return "number";
|
|
131
|
+
case "boolean":
|
|
132
|
+
return "boolean";
|
|
133
|
+
case "array":
|
|
134
|
+
if (prop.items) {
|
|
135
|
+
return arrayOf(resolvePropertyType(prop.items, schema, resolveDefName, seen));
|
|
136
|
+
}
|
|
137
|
+
return "any[]";
|
|
138
|
+
case "object":
|
|
139
|
+
return "Record<string, any>";
|
|
140
|
+
default:
|
|
141
|
+
return "any";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Resolve a $ref pointer to a TypeScript type name.
|
|
146
|
+
*
|
|
147
|
+
* @param ref - The $ref string (e.g. "#/definitions/Foo")
|
|
148
|
+
* @param schema - The containing schema document
|
|
149
|
+
* @param resolveDefName - Callback to produce a TS name for object definitions.
|
|
150
|
+
* Receives (defName: string). When null, object defs resolve to "any".
|
|
151
|
+
*/
|
|
152
|
+
export function resolveRef(ref, schema, resolveDefName, seen = EMPTY_SEEN) {
|
|
153
|
+
const prefix = "#/definitions/";
|
|
154
|
+
if (!ref.startsWith(prefix))
|
|
155
|
+
return "any";
|
|
156
|
+
const defName = ref.slice(prefix.length);
|
|
157
|
+
const def = schema.definitions?.[defName];
|
|
158
|
+
if (!def)
|
|
159
|
+
return "any";
|
|
160
|
+
// A list definition whose items reach it again would recurse without end.
|
|
161
|
+
if (seen.has(defName))
|
|
162
|
+
return "any";
|
|
163
|
+
// String enum → named type (via resolveDefName) or string
|
|
164
|
+
if (isEnumDefinition(def)) {
|
|
165
|
+
return resolveDefName ? resolveDefName(defName) : "string";
|
|
166
|
+
}
|
|
167
|
+
// Object with properties → named type
|
|
168
|
+
if (def.properties) {
|
|
169
|
+
return resolveDefName ? resolveDefName(defName) : "any";
|
|
170
|
+
}
|
|
171
|
+
// Primitive type
|
|
172
|
+
if (def.type) {
|
|
173
|
+
const pt = primaryType(def.type);
|
|
174
|
+
switch (pt) {
|
|
175
|
+
case "string": return "string";
|
|
176
|
+
case "integer":
|
|
177
|
+
case "number": return "number";
|
|
178
|
+
case "boolean": return "boolean";
|
|
179
|
+
case "object": return "Record<string, any>";
|
|
180
|
+
// CloudFormation names its list shapes: `Tags` is a `$ref` to a `TagList`
|
|
181
|
+
// definition whose items are the `Tag` definition one hop away. Resolve
|
|
182
|
+
// through `items` the way the inline `array` case does. (chant #2205)
|
|
183
|
+
case "array": {
|
|
184
|
+
if (!def.items)
|
|
185
|
+
return "any[]";
|
|
186
|
+
const nested = new Set(seen);
|
|
187
|
+
nested.add(defName);
|
|
188
|
+
return arrayOf(resolvePropertyType(def.items, schema, resolveDefName, nested));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// An `allOf`/`oneOf`/`anyOf` definition types as its property form would.
|
|
193
|
+
if (def.allOf || def.oneOf || def.anyOf) {
|
|
194
|
+
const nested = new Set(seen);
|
|
195
|
+
nested.add(defName);
|
|
196
|
+
const viaBranches = resolvePropertyType(def, schema, resolveDefName, nested);
|
|
197
|
+
if (viaBranches !== "any")
|
|
198
|
+
return viaBranches;
|
|
199
|
+
}
|
|
200
|
+
return "any";
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Extract property constraints from a schema property.
|
|
204
|
+
*/
|
|
205
|
+
export function extractConstraints(prop) {
|
|
206
|
+
const c = {};
|
|
207
|
+
if (prop.pattern)
|
|
208
|
+
c.pattern = prop.pattern;
|
|
209
|
+
if (prop.minLength !== undefined)
|
|
210
|
+
c.minLength = prop.minLength;
|
|
211
|
+
if (prop.maxLength !== undefined)
|
|
212
|
+
c.maxLength = prop.maxLength;
|
|
213
|
+
if (prop.minimum !== undefined)
|
|
214
|
+
c.minimum = prop.minimum;
|
|
215
|
+
if (prop.maximum !== undefined)
|
|
216
|
+
c.maximum = prop.maximum;
|
|
217
|
+
if (prop.format)
|
|
218
|
+
c.format = prop.format;
|
|
219
|
+
if (prop.const !== undefined)
|
|
220
|
+
c.const = prop.const;
|
|
221
|
+
if (prop.default !== undefined)
|
|
222
|
+
c.default = prop.default;
|
|
223
|
+
if (prop.enum && prop.enum.length > 0)
|
|
224
|
+
c.enum = prop.enum;
|
|
225
|
+
return c;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Check whether a PropertyConstraints object is empty (all fields undefined/absent).
|
|
229
|
+
*/
|
|
230
|
+
export function constraintsIsEmpty(c) {
|
|
231
|
+
return (!c.pattern &&
|
|
232
|
+
c.minLength === undefined &&
|
|
233
|
+
c.maxLength === undefined &&
|
|
234
|
+
c.minimum === undefined &&
|
|
235
|
+
c.maximum === undefined &&
|
|
236
|
+
!c.format &&
|
|
237
|
+
c.const === undefined &&
|
|
238
|
+
c.default === undefined &&
|
|
239
|
+
(!c.enum || c.enum.length === 0));
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check whether a schema definition is a pure string enum (no properties).
|
|
243
|
+
*/
|
|
244
|
+
export function isEnumDefinition(def) {
|
|
245
|
+
return (def.enum != null && def.enum.length > 0) && !def.properties;
|
|
246
|
+
}
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexicon regen-validate pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Given a lexicon root directory, this module:
|
|
5
|
+
* 1. Runs the prepack chain (generate -> bundle -> validate -> build)
|
|
6
|
+
* by invoking `npm run <script>` in the lexicon directory.
|
|
7
|
+
* 2. Runs `chant lint` on any examples found under `examples/`.
|
|
8
|
+
* 3. Extracts the generated public API surface.
|
|
9
|
+
* 4. Diffs the fresh surface against the committed per-lexicon baseline
|
|
10
|
+
* (`surface.snapshot.json` at the lexicon root).
|
|
11
|
+
* 5. Returns { ok, changed, severity, delta, failures } — never throws.
|
|
12
|
+
*
|
|
13
|
+
* Supply-chain guarantee:
|
|
14
|
+
* All spec fetching happens through the lexicon's own `generate` script,
|
|
15
|
+
* which is pinned to the lexicon's existing fetch layer (cached, TTL-based).
|
|
16
|
+
* When `force` is true, the cache is bypassed and the spec is re-downloaded.
|
|
17
|
+
* This module never executes spec-provided content — it only reads the
|
|
18
|
+
* artifacts that the generate script produced.
|
|
19
|
+
*
|
|
20
|
+
* Never auto-fix:
|
|
21
|
+
* Any failure is captured into `failures` and returned. This module never
|
|
22
|
+
* rewrites examples, skips checks, or masks errors.
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync, writeFileSync, readdirSync } from "fs";
|
|
25
|
+
import { join } from "path";
|
|
26
|
+
import { execSync } from "child_process";
|
|
27
|
+
import { SNAPSHOT_UPDATE_ENV } from "./validate.js";
|
|
28
|
+
import { extractSurface, diffSurface, serializeSnapshot, parseSnapshot, formatDelta, } from "./surface-snapshot.js";
|
|
29
|
+
// ── Pipeline ──────────────────────────────────────────────────────────
|
|
30
|
+
export const SNAPSHOT_FILENAME = "surface.snapshot.json";
|
|
31
|
+
/**
|
|
32
|
+
* Run the full regen-validate pipeline for a lexicon and return the result.
|
|
33
|
+
*/
|
|
34
|
+
export async function regenLexicon(opts) {
|
|
35
|
+
const { lexiconDir, force = false, verbose = false, skipBundle = false, skipBuild = false, skipLint = false, skipExamples = true, updatingSnapshot = false, } = opts;
|
|
36
|
+
const failures = [];
|
|
37
|
+
// Verify lexicon directory
|
|
38
|
+
if (!existsSync(join(lexiconDir, "package.json"))) {
|
|
39
|
+
failures.push({
|
|
40
|
+
step: "setup",
|
|
41
|
+
output: `No package.json found at ${lexiconDir}`,
|
|
42
|
+
});
|
|
43
|
+
return makeResult(false, failures, null, null);
|
|
44
|
+
}
|
|
45
|
+
// Step 1: Verify pinned digest (supply-chain gate, runs before fetch)
|
|
46
|
+
if (opts.pinnedDigestPath) {
|
|
47
|
+
const digestFailure = await verifyPinnedDigest(lexiconDir, opts.pinnedDigestPath);
|
|
48
|
+
if (digestFailure) {
|
|
49
|
+
failures.push(digestFailure);
|
|
50
|
+
return makeResult(false, failures, null, null);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Step 2: generate
|
|
54
|
+
// Pass CHANT_FORCE_FETCH=1 so lexicons that check this env var will bypass cache.
|
|
55
|
+
const genEnv = force
|
|
56
|
+
? { ...process.env, CHANT_FORCE_FETCH: "1" }
|
|
57
|
+
: { ...process.env };
|
|
58
|
+
const genFail = runScript(lexiconDir, "generate", genEnv, verbose);
|
|
59
|
+
if (genFail) {
|
|
60
|
+
failures.push(genFail);
|
|
61
|
+
// Cannot proceed without generated artifacts
|
|
62
|
+
return makeResult(false, failures, null, null);
|
|
63
|
+
}
|
|
64
|
+
// Step 3: bundle (optional)
|
|
65
|
+
if (!skipBundle) {
|
|
66
|
+
const bundleFail = runScript(lexiconDir, "bundle", process.env, verbose);
|
|
67
|
+
if (bundleFail) {
|
|
68
|
+
failures.push(bundleFail);
|
|
69
|
+
// Continue to extract surface even if bundle fails
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Step 4: validate
|
|
73
|
+
// A re-baseline run is exempt from the surface-matches-snapshot check only
|
|
74
|
+
// (#1825) — see RegenOptions.updatingSnapshot.
|
|
75
|
+
const validateEnv = updatingSnapshot
|
|
76
|
+
? { ...process.env, [SNAPSHOT_UPDATE_ENV]: "1" }
|
|
77
|
+
: process.env;
|
|
78
|
+
const validateFail = runScript(lexiconDir, "validate", validateEnv, verbose);
|
|
79
|
+
if (validateFail) {
|
|
80
|
+
failures.push(validateFail);
|
|
81
|
+
}
|
|
82
|
+
// Step 5: build (tsc)
|
|
83
|
+
if (!skipBuild) {
|
|
84
|
+
const buildFail = runScript(lexiconDir, "build", process.env, verbose);
|
|
85
|
+
if (buildFail) {
|
|
86
|
+
failures.push(buildFail);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Step 6: lint examples
|
|
90
|
+
if (!skipLint) {
|
|
91
|
+
const lintFail = runLintOnExamples(lexiconDir, verbose);
|
|
92
|
+
if (lintFail) {
|
|
93
|
+
failures.push(lintFail);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Step 7: example harness (opt-in only; requires cloud credentials)
|
|
97
|
+
if (!skipExamples) {
|
|
98
|
+
const exFail = runExampleHarness(lexiconDir, verbose);
|
|
99
|
+
if (exFail) {
|
|
100
|
+
failures.push(exFail);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Step 8: extract surface from generated artifacts
|
|
104
|
+
const freshSnapshot = extractFreshSurface(lexiconDir);
|
|
105
|
+
if (!freshSnapshot) {
|
|
106
|
+
failures.push({
|
|
107
|
+
step: "surface-extract",
|
|
108
|
+
output: `Could not read generated artifacts in ${join(lexiconDir, "src", "generated")}. The generate step should have produced them.`,
|
|
109
|
+
});
|
|
110
|
+
return makeResult(false, failures, null, null);
|
|
111
|
+
}
|
|
112
|
+
// Step 9: diff against baseline
|
|
113
|
+
const baselinePath = join(lexiconDir, SNAPSHOT_FILENAME);
|
|
114
|
+
let delta;
|
|
115
|
+
if (existsSync(baselinePath)) {
|
|
116
|
+
try {
|
|
117
|
+
const baselineJSON = readFileSync(baselinePath, "utf-8");
|
|
118
|
+
const baseline = parseSnapshot(baselineJSON);
|
|
119
|
+
delta = diffSurface(baseline, freshSnapshot);
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
failures.push({
|
|
123
|
+
step: "surface-diff",
|
|
124
|
+
output: `Failed to read or parse baseline snapshot at ${baselinePath}: ${String(err)}`,
|
|
125
|
+
});
|
|
126
|
+
return makeResult(false, failures, freshSnapshot, null);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// No baseline — treat entire current surface as "added"
|
|
131
|
+
const emptyBaseline = {
|
|
132
|
+
schemaVersion: 1,
|
|
133
|
+
generatedAt: new Date(0).toISOString(),
|
|
134
|
+
entries: {},
|
|
135
|
+
};
|
|
136
|
+
delta = diffSurface(emptyBaseline, freshSnapshot);
|
|
137
|
+
}
|
|
138
|
+
const ok = failures.length === 0;
|
|
139
|
+
return makeResult(ok, failures, freshSnapshot, delta);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Write the fresh surface snapshot to the lexicon's committed baseline file.
|
|
143
|
+
* Call this after a successful regen when the snapshot should be updated.
|
|
144
|
+
*/
|
|
145
|
+
export function writeSurfaceSnapshot(lexiconDir, snapshot) {
|
|
146
|
+
const path = join(lexiconDir, SNAPSHOT_FILENAME);
|
|
147
|
+
writeFileSync(path, serializeSnapshot(snapshot), "utf-8");
|
|
148
|
+
}
|
|
149
|
+
// ── Subprocess helpers ────────────────────────────────────────────────
|
|
150
|
+
/**
|
|
151
|
+
* Run one npm script in the lexicon directory.
|
|
152
|
+
* Returns a RegenFailure on non-zero exit; null on success.
|
|
153
|
+
*/
|
|
154
|
+
function runScript(cwd, script, env, verbose) {
|
|
155
|
+
try {
|
|
156
|
+
const out = execSync(`npm run --silent ${script}`, {
|
|
157
|
+
cwd,
|
|
158
|
+
env,
|
|
159
|
+
stdio: verbose ? "inherit" : "pipe",
|
|
160
|
+
encoding: "utf-8",
|
|
161
|
+
timeout: 10 * 60 * 1000, // 10 minutes
|
|
162
|
+
});
|
|
163
|
+
if (verbose && typeof out === "string" && out)
|
|
164
|
+
process.stderr.write(out);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
const e = err;
|
|
169
|
+
const captured = [e.stdout ?? "", e.stderr ?? ""].filter(Boolean).join("\n");
|
|
170
|
+
return {
|
|
171
|
+
step: script,
|
|
172
|
+
exitCode: e.status ?? 1,
|
|
173
|
+
output: captured || e.message || String(err),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Run `chant lint` on each example subdirectory.
|
|
179
|
+
*/
|
|
180
|
+
function runLintOnExamples(lexiconDir, verbose) {
|
|
181
|
+
const examplesDir = join(lexiconDir, "examples");
|
|
182
|
+
if (!existsSync(examplesDir))
|
|
183
|
+
return null;
|
|
184
|
+
let entries;
|
|
185
|
+
try {
|
|
186
|
+
entries = readdirSync(examplesDir, { withFileTypes: true, encoding: "utf-8" });
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
const exampleDirs = entries
|
|
192
|
+
.filter((e) => e.isDirectory())
|
|
193
|
+
.map((e) => join(examplesDir, e.name))
|
|
194
|
+
.filter((d) => existsSync(join(d, "chant.config.ts")) || existsSync(join(d, "src")));
|
|
195
|
+
if (exampleDirs.length === 0)
|
|
196
|
+
return null;
|
|
197
|
+
const chantBin = resolveChantBin(lexiconDir);
|
|
198
|
+
const outputs = [];
|
|
199
|
+
let failed = false;
|
|
200
|
+
for (const exDir of exampleDirs) {
|
|
201
|
+
try {
|
|
202
|
+
const out = execSync(`${chantBin} lint ${exDir}`, {
|
|
203
|
+
stdio: verbose ? "inherit" : "pipe",
|
|
204
|
+
encoding: "utf-8",
|
|
205
|
+
timeout: 60 * 1000,
|
|
206
|
+
});
|
|
207
|
+
if (verbose && typeof out === "string" && out)
|
|
208
|
+
process.stderr.write(out);
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
const e = err;
|
|
212
|
+
const captured = [e.stdout ?? "", e.stderr ?? ""].filter(Boolean).join(" ").trim();
|
|
213
|
+
outputs.push(`[${exDir}] exit ${e.status ?? 1}: ${captured}`);
|
|
214
|
+
failed = true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (failed) {
|
|
218
|
+
return { step: "lint", output: outputs.join("\n") };
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Run `npm run build --if-present` in each example directory.
|
|
224
|
+
* Opt-in only — requires cloud credentials in most cases.
|
|
225
|
+
*/
|
|
226
|
+
function runExampleHarness(lexiconDir, verbose) {
|
|
227
|
+
const examplesDir = join(lexiconDir, "examples");
|
|
228
|
+
if (!existsSync(examplesDir))
|
|
229
|
+
return null;
|
|
230
|
+
let entries;
|
|
231
|
+
try {
|
|
232
|
+
entries = readdirSync(examplesDir, { withFileTypes: true, encoding: "utf-8" });
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
const exampleDirs = entries
|
|
238
|
+
.filter((e) => e.isDirectory())
|
|
239
|
+
.map((e) => join(examplesDir, e.name))
|
|
240
|
+
.filter((d) => existsSync(join(d, "package.json")));
|
|
241
|
+
const outputs = [];
|
|
242
|
+
let failed = false;
|
|
243
|
+
for (const exDir of exampleDirs) {
|
|
244
|
+
try {
|
|
245
|
+
const out = execSync("npm run build --if-present", {
|
|
246
|
+
cwd: exDir,
|
|
247
|
+
stdio: verbose ? "inherit" : "pipe",
|
|
248
|
+
encoding: "utf-8",
|
|
249
|
+
timeout: 5 * 60 * 1000,
|
|
250
|
+
});
|
|
251
|
+
if (verbose && typeof out === "string" && out)
|
|
252
|
+
process.stderr.write(out);
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
const e = err;
|
|
256
|
+
const captured = [e.stdout ?? "", e.stderr ?? ""].filter(Boolean).join(" ").trim();
|
|
257
|
+
outputs.push(`[${exDir}] exit ${e.status ?? 1}: ${captured}`);
|
|
258
|
+
failed = true;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (failed) {
|
|
262
|
+
return { step: "examples", output: outputs.join("\n") };
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Extract the fresh surface from the generated artifacts in the lexicon directory.
|
|
268
|
+
*/
|
|
269
|
+
function extractFreshSurface(lexiconDir) {
|
|
270
|
+
const generatedDir = join(lexiconDir, "src", "generated");
|
|
271
|
+
if (!existsSync(generatedDir))
|
|
272
|
+
return null;
|
|
273
|
+
let files;
|
|
274
|
+
try {
|
|
275
|
+
files = readdirSync(generatedDir, { encoding: "utf-8" });
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
const lexiconFile = files.find((f) => f.startsWith("lexicon-") && f.endsWith(".json"));
|
|
281
|
+
if (!lexiconFile)
|
|
282
|
+
return null;
|
|
283
|
+
let lexiconJSON;
|
|
284
|
+
try {
|
|
285
|
+
lexiconJSON = readFileSync(join(generatedDir, lexiconFile), "utf-8");
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
let typesDTS = "";
|
|
291
|
+
const dtsPath = join(generatedDir, "index.d.ts");
|
|
292
|
+
if (existsSync(dtsPath)) {
|
|
293
|
+
try {
|
|
294
|
+
typesDTS = readFileSync(dtsPath, "utf-8");
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Proceed without .d.ts — props won't be extracted
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
return extractSurface(lexiconJSON, typesDTS);
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Verify the spec cache file against a pinned SHA-256 digest.
|
|
309
|
+
*
|
|
310
|
+
* Digest file format (shasum -a 256 style):
|
|
311
|
+
* sha256:<64-hex-chars> <relative-path-to-spec-file>
|
|
312
|
+
*/
|
|
313
|
+
async function verifyPinnedDigest(lexiconDir, digestPath) {
|
|
314
|
+
if (!existsSync(digestPath)) {
|
|
315
|
+
return {
|
|
316
|
+
step: "digest-verify",
|
|
317
|
+
output: `Pinned digest file not found: ${digestPath}`,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
let digestContent;
|
|
321
|
+
try {
|
|
322
|
+
digestContent = readFileSync(digestPath, "utf-8").trim();
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
return {
|
|
326
|
+
step: "digest-verify",
|
|
327
|
+
output: `Cannot read digest file ${digestPath}: ${String(err)}`,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
const digestMatch = /^sha256:([a-f0-9]{64})\s+(.+)$/.exec(digestContent);
|
|
331
|
+
if (!digestMatch) {
|
|
332
|
+
return {
|
|
333
|
+
step: "digest-verify",
|
|
334
|
+
output: `Malformed digest file (expected "sha256:<hex> <filename>"): ${digestPath}`,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
const [, expectedHex, relFilename] = digestMatch;
|
|
338
|
+
const specPath = join(lexiconDir, relFilename);
|
|
339
|
+
if (!existsSync(specPath)) {
|
|
340
|
+
return {
|
|
341
|
+
step: "digest-verify",
|
|
342
|
+
output: `Spec file referenced in digest not found: ${specPath}. Run generate first or check the digest file path.`,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
try {
|
|
346
|
+
const { createHash } = await import("crypto");
|
|
347
|
+
const data = readFileSync(specPath);
|
|
348
|
+
const actualHex = createHash("sha256").update(data).digest("hex");
|
|
349
|
+
if (actualHex !== expectedHex) {
|
|
350
|
+
return {
|
|
351
|
+
step: "digest-verify",
|
|
352
|
+
output: [
|
|
353
|
+
`Spec digest mismatch for ${relFilename}:`,
|
|
354
|
+
` expected: ${expectedHex}`,
|
|
355
|
+
` actual: ${actualHex}`,
|
|
356
|
+
"",
|
|
357
|
+
"The cached spec does not match the pinned digest.",
|
|
358
|
+
"Re-fetch with --force to update the cache, then update the digest file.",
|
|
359
|
+
].join("\n"),
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
return {
|
|
366
|
+
step: "digest-verify",
|
|
367
|
+
output: `Digest computation failed: ${String(err)}`,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Resolve the chant binary path from the lexicon's workspace node_modules.
|
|
373
|
+
*/
|
|
374
|
+
function resolveChantBin(lexiconDir) {
|
|
375
|
+
// Try workspace root node_modules (two levels up from lexicons/<name>)
|
|
376
|
+
const rootBin = join(lexiconDir, "..", "..", "node_modules", ".bin", "chant");
|
|
377
|
+
if (existsSync(rootBin))
|
|
378
|
+
return rootBin;
|
|
379
|
+
// Try lexicon-local node_modules
|
|
380
|
+
const localBin = join(lexiconDir, "node_modules", ".bin", "chant");
|
|
381
|
+
if (existsSync(localBin))
|
|
382
|
+
return localBin;
|
|
383
|
+
// Fall back to npx
|
|
384
|
+
return "npx chant";
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Build the final RegenResult.
|
|
388
|
+
*/
|
|
389
|
+
function makeResult(ok, failures, freshSnapshot, delta) {
|
|
390
|
+
const emptyDelta = {
|
|
391
|
+
added: [],
|
|
392
|
+
changed: [],
|
|
393
|
+
removed: [],
|
|
394
|
+
renamed: [],
|
|
395
|
+
severity: "none",
|
|
396
|
+
};
|
|
397
|
+
const effectiveDelta = delta ?? emptyDelta;
|
|
398
|
+
const changed = effectiveDelta.added.length > 0 ||
|
|
399
|
+
effectiveDelta.changed.length > 0 ||
|
|
400
|
+
effectiveDelta.removed.length > 0 ||
|
|
401
|
+
effectiveDelta.renamed.length > 0;
|
|
402
|
+
const deltaText = changed ? formatDelta(effectiveDelta) : "";
|
|
403
|
+
return {
|
|
404
|
+
ok,
|
|
405
|
+
changed,
|
|
406
|
+
severity: effectiveDelta.severity,
|
|
407
|
+
delta: effectiveDelta,
|
|
408
|
+
deltaText,
|
|
409
|
+
failures,
|
|
410
|
+
freshSnapshot,
|
|
411
|
+
};
|
|
412
|
+
}
|