@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
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
import { getInterpolationFields, getProvenance, setPathProvenance, setProvenance } from "../provenance";
|
|
61
61
|
import { foldProvenanceOfEntities, type FoldProvenance } from "../fold-provenance";
|
|
62
62
|
import { collectEntities } from "./collect";
|
|
63
|
+
import { hostCompositeName, markHostCompositeInstance } from "./host-composite";
|
|
63
64
|
import { intrinsicCallFoldsEagerly, intrinsicTagFolds, type IntrinsicDef } from "../lexicon";
|
|
64
65
|
import type { BuildParamValue } from "../build-params";
|
|
65
66
|
|
|
@@ -3056,53 +3057,6 @@ async function interpretCompositeFactory(
|
|
|
3056
3057
|
}
|
|
3057
3058
|
}
|
|
3058
3059
|
|
|
3059
|
-
/**
|
|
3060
|
-
* chant#3598 — a host composite instance's own marker. Non-enumerable and
|
|
3061
|
-
* symbol-keyed, like provenance, so nothing that serializes or compares the
|
|
3062
|
-
* exports sees it. It carries the composite's name, which the members object
|
|
3063
|
-
* otherwise has no record of once it is returned.
|
|
3064
|
-
*/
|
|
3065
|
-
const HOST_COMPOSITE_INSTANCE = Symbol.for("chant.fold.hostCompositeInstance");
|
|
3066
|
-
|
|
3067
|
-
/**
|
|
3068
|
-
* Mark `members` as the instance a host's composite produced, and return it
|
|
3069
|
-
* unchanged.
|
|
3070
|
-
*
|
|
3071
|
-
* chant#3608 — every declarable member, and every member of a nested host
|
|
3072
|
-
* instance, is also stamped with the composite, the way `expandComposite`
|
|
3073
|
-
* stamps a chant instance's members. A destructured member is never expanded,
|
|
3074
|
-
* so this is the only record it has that a composite wrote it, and without
|
|
3075
|
-
* it a path the fold did not attribute reads as authored and so `direct`.
|
|
3076
|
-
* `setProvenance` keeps the first writer, and a nested instance was marked
|
|
3077
|
-
* when its own call returned, so a member keeps its innermost composite.
|
|
3078
|
-
*/
|
|
3079
|
-
function markHostCompositeInstance(members: Record<string, unknown>, compositeName: string): Record<string, unknown> {
|
|
3080
|
-
if (Object.isExtensible(members) && !Object.prototype.hasOwnProperty.call(members, HOST_COMPOSITE_INSTANCE)) {
|
|
3081
|
-
Object.defineProperty(members, HOST_COMPOSITE_INSTANCE, {
|
|
3082
|
-
value: compositeName,
|
|
3083
|
-
enumerable: false,
|
|
3084
|
-
configurable: true,
|
|
3085
|
-
});
|
|
3086
|
-
}
|
|
3087
|
-
stampHostCompositeMembers(members, compositeName);
|
|
3088
|
-
return members;
|
|
3089
|
-
}
|
|
3090
|
-
|
|
3091
|
-
/** Stamp `composite` on each declarable member of a host instance, descending into nested host instances. */
|
|
3092
|
-
function stampHostCompositeMembers(members: Record<string, unknown>, compositeName: string): void {
|
|
3093
|
-
for (const member of Object.values(members)) {
|
|
3094
|
-
if (isDeclarable(member)) setProvenance(member, { composite: compositeName });
|
|
3095
|
-
else if (hostCompositeName(member) !== undefined) stampHostCompositeMembers(member as Record<string, unknown>, compositeName);
|
|
3096
|
-
}
|
|
3097
|
-
}
|
|
3098
|
-
|
|
3099
|
-
/** The composite name a host composite instance was marked with, or `undefined` for any other value. */
|
|
3100
|
-
function hostCompositeName(value: unknown): string | undefined {
|
|
3101
|
-
if (!isIndexableObject(value)) return undefined;
|
|
3102
|
-
const name = (value as Record<symbol, unknown>)[HOST_COMPOSITE_INSTANCE];
|
|
3103
|
-
return typeof name === "string" ? name : undefined;
|
|
3104
|
-
}
|
|
3105
|
-
|
|
3106
3060
|
/** Evaluate an admissible factory body's statements in order, binding each `const`, and return the `return` expression's value. */
|
|
3107
3061
|
async function interpretFactoryBody(
|
|
3108
3062
|
fn: ts.ArrowFunction | ts.FunctionExpression,
|
|
@@ -3620,8 +3574,7 @@ function isChantOwnedHelperBinding(binding: ImportBinding, ctx: ResolveCtx): boo
|
|
|
3620
3574
|
} catch {
|
|
3621
3575
|
return false;
|
|
3622
3576
|
}
|
|
3623
|
-
|
|
3624
|
-
return targetPath === root || targetPath.startsWith(root + sep);
|
|
3577
|
+
return isChantCorePath(targetPath);
|
|
3625
3578
|
}
|
|
3626
3579
|
|
|
3627
3580
|
/**
|
|
@@ -3643,7 +3596,7 @@ function isChantOwnedHelperBinding(binding: ImportBinding, ctx: ResolveCtx): boo
|
|
|
3643
3596
|
* modules by subpath instead of through the barrel names code the process
|
|
3644
3597
|
* already trusts, not code the project controls.
|
|
3645
3598
|
* 2. **chant-core's own executing tree** — the specifier is RESOLVED and the
|
|
3646
|
-
* resulting path checked against {@link
|
|
3599
|
+
* resulting path checked against {@link chantCoreRoots}. A text match is
|
|
3647
3600
|
* not enough here: `@intentius/chant` and `@intentius/chant-lexicon-evil`
|
|
3648
3601
|
* are both strings an untrusted repo can write into its own source and
|
|
3649
3602
|
* back with its own `node_modules` directory, and
|
|
@@ -3700,8 +3653,7 @@ function isTrustedExecutableBinding(binding: ImportBinding, ctx: ResolveCtx): bo
|
|
|
3700
3653
|
// chant#2590 — the subpath case of the same arm: another file of a
|
|
3701
3654
|
// multi-file path lexicon, under its trusted directory.
|
|
3702
3655
|
if (inPathLexiconRoot(targetPath, ctx.lexiconRoots)) return true;
|
|
3703
|
-
|
|
3704
|
-
return targetPath === root || targetPath.startsWith(root + sep);
|
|
3656
|
+
return isChantCorePath(targetPath);
|
|
3705
3657
|
}
|
|
3706
3658
|
|
|
3707
3659
|
/**
|
|
@@ -3737,17 +3689,29 @@ function sandboxedExecutionRefusal(
|
|
|
3737
3689
|
}
|
|
3738
3690
|
|
|
3739
3691
|
/**
|
|
3740
|
-
* chant-core's own module
|
|
3741
|
-
*
|
|
3692
|
+
* chant-core's own module roots, derived from THIS module's location:
|
|
3693
|
+
* `packages/core/src` in this repo, and in a published install both
|
|
3694
|
+
* `<pkg>/src` (where `@intentius/chant/*` specifiers resolve, through the
|
|
3695
|
+
* package exports) and `<pkg>/dist` (where the compiled CLI runs from, #3878).
|
|
3742
3696
|
* Pure string arithmetic on `import.meta.url`, no filesystem access at all, so
|
|
3743
3697
|
* it is safe in the #1045 sandbox child (which locks reads to an allowlist);
|
|
3744
3698
|
* lazy and memoized purely to avoid doing it per call.
|
|
3745
3699
|
*/
|
|
3746
|
-
let
|
|
3747
|
-
function
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3700
|
+
let chantCoreRootsMemo: readonly string[] | undefined;
|
|
3701
|
+
function chantCoreRoots(): readonly string[] {
|
|
3702
|
+
if (!chantCoreRootsMemo) {
|
|
3703
|
+
// .../<root>/discovery/fold-import.{ts,js} -> .../<root>
|
|
3704
|
+
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
3705
|
+
const name = basename(root);
|
|
3706
|
+
const sibling = name === "dist" ? join(dirname(root), "src") : name === "src" ? join(dirname(root), "dist") : undefined;
|
|
3707
|
+
chantCoreRootsMemo = sibling ? [root, sibling] : [root];
|
|
3708
|
+
}
|
|
3709
|
+
return chantCoreRootsMemo;
|
|
3710
|
+
}
|
|
3711
|
+
|
|
3712
|
+
/** Whether `path` is one of chant-core's own modules (see {@link chantCoreRoots}). */
|
|
3713
|
+
function isChantCorePath(path: string): boolean {
|
|
3714
|
+
return chantCoreRoots().some((root) => path === root || path.startsWith(root + sep));
|
|
3751
3715
|
}
|
|
3752
3716
|
|
|
3753
3717
|
/** Revive every value in a folded props/attributes object (see {@link reviveFoldedValue}). */
|
|
@@ -4467,8 +4431,7 @@ async function tryFoldFileCore(file: string, session: FoldSession): Promise<Fold
|
|
|
4467
4431
|
// exclusion has to be explicit, or a fixture/in-repo import by path would
|
|
4468
4432
|
// walk fold into chant's own tree and fold `params` to an empty object.
|
|
4469
4433
|
{
|
|
4470
|
-
|
|
4471
|
-
if (file === root || file.startsWith(root + sep)) {
|
|
4434
|
+
if (isChantCorePath(file)) {
|
|
4472
4435
|
return { ok: false, reason: "chant's own module is not project source" };
|
|
4473
4436
|
}
|
|
4474
4437
|
}
|
|
@@ -5072,7 +5035,7 @@ export async function foldProject(
|
|
|
5072
5035
|
const attempt = attempts.get(file);
|
|
5073
5036
|
return {
|
|
5074
5037
|
file,
|
|
5075
|
-
exports: attempt?.ok === true ?
|
|
5038
|
+
exports: attempt?.ok === true ? Object.fromEntries(attempt.exportedValues) : {},
|
|
5076
5039
|
};
|
|
5077
5040
|
}),
|
|
5078
5041
|
);
|
|
@@ -5144,71 +5107,6 @@ function foldProvenanceByFile(
|
|
|
5144
5107
|
return out;
|
|
5145
5108
|
}
|
|
5146
5109
|
|
|
5147
|
-
/**
|
|
5148
|
-
* chant#3598 — a file's exports with every host composite instance replaced by
|
|
5149
|
-
* its members, for {@link foldProvenanceByFile} only.
|
|
5150
|
-
*
|
|
5151
|
-
* A host's registration form (chant#2442) returns the members object the
|
|
5152
|
-
* factory built, not a chant `CompositeInstance`, because wrapping it would run
|
|
5153
|
-
* chant's member validation against the host's own entities. `collectEntities`
|
|
5154
|
-
* expands only chant's instances, so an instance exported whole
|
|
5155
|
-
* (`export const store = Store({...})`) contributed no entity and therefore no
|
|
5156
|
-
* record, while a destructured member, a plain declarable export, did.
|
|
5157
|
-
*
|
|
5158
|
-
* The members are named and stamped the way `expandComposite` names and stamps
|
|
5159
|
-
* a chant instance: `${exportName}${Member}`, with a whole-entity `composite`
|
|
5160
|
-
* origin under the paths the fold already attributed. That origin is written
|
|
5161
|
-
* before `collectEntities` adds its `authored` one, and the first writer wins,
|
|
5162
|
-
* so a path the fold did not attribute is `unknown` rather than `direct`.
|
|
5163
|
-
*
|
|
5164
|
-
* Only a top-level export is expanded. A host instance nested in another
|
|
5165
|
-
* composite's body or placed in an array does not fold today, so its file is
|
|
5166
|
-
* `run` and has no record to give.
|
|
5167
|
-
*
|
|
5168
|
-
* The exports a caller receives in the verdict are the originals.
|
|
5169
|
-
*/
|
|
5170
|
-
function expandHostCompositeExports(exports: Record<string, unknown>): Record<string, unknown> {
|
|
5171
|
-
const out: Record<string, unknown> = {};
|
|
5172
|
-
for (const [name, value] of Object.entries(exports)) {
|
|
5173
|
-
if (hostCompositeName(value) === undefined) {
|
|
5174
|
-
out[name] = value;
|
|
5175
|
-
continue;
|
|
5176
|
-
}
|
|
5177
|
-
expandHostCompositeInstance(name, value as Record<string, unknown>, name, out);
|
|
5178
|
-
}
|
|
5179
|
-
return out;
|
|
5180
|
-
}
|
|
5181
|
-
|
|
5182
|
-
/**
|
|
5183
|
-
* chant#3608 — one host instance's members into `out`, a nested host instance
|
|
5184
|
-
* expanded in place under its member's name (`siteMainBucket`), as
|
|
5185
|
-
* `expandComposite` expands a nested chant instance. Every member belongs to
|
|
5186
|
-
* the top-level `instance`; its composite is the innermost one, which
|
|
5187
|
-
* {@link markHostCompositeInstance} already stamped, so the whole-entity
|
|
5188
|
-
* origin names that composite too.
|
|
5189
|
-
*/
|
|
5190
|
-
function expandHostCompositeInstance(
|
|
5191
|
-
prefix: string,
|
|
5192
|
-
members: Record<string, unknown>,
|
|
5193
|
-
instance: string,
|
|
5194
|
-
out: Record<string, unknown>,
|
|
5195
|
-
): void {
|
|
5196
|
-
const compositeName = hostCompositeName(members) as string;
|
|
5197
|
-
for (const [memberName, member] of Object.entries(members)) {
|
|
5198
|
-
if (memberName.length === 0) continue;
|
|
5199
|
-
const fullName = `${prefix}${memberName[0].toUpperCase()}${memberName.slice(1)}`;
|
|
5200
|
-
if (hostCompositeName(member) !== undefined) {
|
|
5201
|
-
expandHostCompositeInstance(fullName, member as Record<string, unknown>, instance, out);
|
|
5202
|
-
continue;
|
|
5203
|
-
}
|
|
5204
|
-
if (!isDeclarable(member)) continue;
|
|
5205
|
-
setProvenance(member, { composite: compositeName, compositeInstance: instance });
|
|
5206
|
-
const composite = getProvenance(member)?.composite ?? compositeName;
|
|
5207
|
-
setPathProvenance(member, "", { kind: "composite", composite, instance });
|
|
5208
|
-
out[fullName] = member;
|
|
5209
|
-
}
|
|
5210
|
-
}
|
|
5211
|
-
|
|
5212
5110
|
/** The deepest directory every one of `files` sits under. */
|
|
5213
5111
|
function commonDirectory(files: readonly string[]): string {
|
|
5214
5112
|
const split = files.map((file) => dirname(resolvePath(file)).split(sep));
|
|
@@ -394,11 +394,15 @@ describe("foldProject provenance for host composites (chant#3608)", () => {
|
|
|
394
394
|
expect(provenance.bucket.composite).toBe("Archive");
|
|
395
395
|
expect(provenance.bucket.fields).toEqual({ name: unknown, versioned: unknown });
|
|
396
396
|
|
|
397
|
-
// build()
|
|
398
|
-
|
|
399
|
-
|
|
397
|
+
// chant#3612 — build() expands the whole instance too, and agrees on every record.
|
|
398
|
+
const built = await build(join(root, "archive"), [namesSerializer], undefined, {
|
|
399
|
+
fold: true,
|
|
400
|
+
lexiconPackages: ["@tsad/shapes-3608"],
|
|
401
|
+
sandbox: true,
|
|
402
|
+
});
|
|
400
403
|
expect(built.errors).toEqual([]);
|
|
401
|
-
expect(built.
|
|
404
|
+
expect([...built.entities.keys()].sort()).toEqual(["archiveBucket", "bucket"]);
|
|
405
|
+
expect(built.foldProvenance).toEqual(provenance);
|
|
402
406
|
});
|
|
403
407
|
|
|
404
408
|
test("a whole instance's nested composite members have records, and the innermost composite wins", async () => {
|
|
@@ -458,6 +462,19 @@ describe("foldProject provenance for host composites (chant#3608)", () => {
|
|
|
458
462
|
expect(provenance.mainBucket.fields).toMatchObject({ name: innerName("main"), tier: innerTier("main") });
|
|
459
463
|
expect(provenance.fixedBucket.fields).toMatchObject({ name: innerName("fixed"), tier: innerTier("fixed") });
|
|
460
464
|
expect(provenance.side.fields.name).toMatchObject({ kind: "composite-parameter", composite: "Outer", parameters: ["name"] });
|
|
465
|
+
|
|
466
|
+
// chant#3612 — build() given the same host package reports the same
|
|
467
|
+
// entities and the same records. Before, it emitted nothing for `site`
|
|
468
|
+
// and, with the host off the allowlist, ran the file and read `side` as direct.
|
|
469
|
+
const built = await build(join(root, "site"), [namesSerializer], undefined, {
|
|
470
|
+
fold: true,
|
|
471
|
+
lexiconPackages: ["@tsad/shapes-3608"],
|
|
472
|
+
sandbox: true,
|
|
473
|
+
});
|
|
474
|
+
expect(built.errors).toEqual([]);
|
|
475
|
+
expect(built.foldDecisions.map((d) => d.mode)).toEqual(["fold"]);
|
|
476
|
+
expect([...built.entities.keys()].sort()).toEqual(Object.keys(provenance).sort());
|
|
477
|
+
expect(built.foldProvenance).toEqual(provenance);
|
|
461
478
|
});
|
|
462
479
|
});
|
|
463
480
|
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { isDeclarable, type Declarable } from "../declarable";
|
|
2
|
+
import { getProvenance, setPathProvenance, setProvenance } from "../provenance";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* chant#3598 — a host composite instance's own marker. Non-enumerable and
|
|
6
|
+
* symbol-keyed, like provenance, so nothing that serializes or compares the
|
|
7
|
+
* exports sees it. It carries the composite's name, which the members object
|
|
8
|
+
* otherwise has no record of once it is returned.
|
|
9
|
+
*
|
|
10
|
+
* Only the fold path sets it: a host's registration form (chant#2442) returns
|
|
11
|
+
* the members object the factory built, not a chant `CompositeInstance`, and
|
|
12
|
+
* chant knows the object came from a composite only because the fold resolved
|
|
13
|
+
* the call. A file that runs instead has no such knowledge.
|
|
14
|
+
*/
|
|
15
|
+
const HOST_COMPOSITE_INSTANCE = Symbol.for("chant.fold.hostCompositeInstance");
|
|
16
|
+
|
|
17
|
+
function isPlainIndexable(value: unknown): value is Record<string, unknown> {
|
|
18
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Mark `members` as the instance a host's composite produced, and return it
|
|
23
|
+
* unchanged.
|
|
24
|
+
*
|
|
25
|
+
* chant#3608 — every declarable member, and every member of a nested host
|
|
26
|
+
* instance, is also stamped with the composite, the way `expandComposite`
|
|
27
|
+
* stamps a chant instance's members. A destructured member is never expanded,
|
|
28
|
+
* so this is the only record it has that a composite wrote it, and without
|
|
29
|
+
* it a path the fold did not attribute reads as authored and so `direct`.
|
|
30
|
+
* `setProvenance` keeps the first writer, and a nested instance was marked
|
|
31
|
+
* when its own call returned, so a member keeps its innermost composite.
|
|
32
|
+
*/
|
|
33
|
+
export function markHostCompositeInstance(
|
|
34
|
+
members: Record<string, unknown>,
|
|
35
|
+
compositeName: string,
|
|
36
|
+
): Record<string, unknown> {
|
|
37
|
+
if (Object.isExtensible(members) && !Object.prototype.hasOwnProperty.call(members, HOST_COMPOSITE_INSTANCE)) {
|
|
38
|
+
Object.defineProperty(members, HOST_COMPOSITE_INSTANCE, {
|
|
39
|
+
value: compositeName,
|
|
40
|
+
enumerable: false,
|
|
41
|
+
configurable: true,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
stampHostCompositeMembers(members, compositeName);
|
|
45
|
+
return members;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Stamp `composite` on each declarable member of a host instance, descending into nested host instances. */
|
|
49
|
+
function stampHostCompositeMembers(members: Record<string, unknown>, compositeName: string): void {
|
|
50
|
+
for (const member of Object.values(members)) {
|
|
51
|
+
if (isDeclarable(member)) setProvenance(member, { composite: compositeName });
|
|
52
|
+
else if (hostCompositeName(member) !== undefined) stampHostCompositeMembers(member as Record<string, unknown>, compositeName);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** The composite name a host composite instance was marked with, or `undefined` for any other value. */
|
|
57
|
+
export function hostCompositeName(value: unknown): string | undefined {
|
|
58
|
+
if (!isPlainIndexable(value)) return undefined;
|
|
59
|
+
const name = (value as Record<symbol, unknown>)[HOST_COMPOSITE_INSTANCE];
|
|
60
|
+
return typeof name === "string" ? name : undefined;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* chant#3598, chant#3612 — a host composite instance's members as entities,
|
|
65
|
+
* for `collectEntities`.
|
|
66
|
+
*
|
|
67
|
+
* `collectEntities` is the one place `build()` and `foldProject` turn exports
|
|
68
|
+
* into entities, so expanding here is what makes the two report the same set:
|
|
69
|
+
* `export const archive = Archive({...})` gives `archiveBucket` to both.
|
|
70
|
+
*
|
|
71
|
+
* The members are named and stamped the way `expandComposite` names and stamps
|
|
72
|
+
* a chant instance: `${exportName}${Member}`, a nested host instance expanded
|
|
73
|
+
* in place under its member's name (`siteMainBucket`), with a whole-entity
|
|
74
|
+
* `composite` origin under the paths the fold already attributed. That origin
|
|
75
|
+
* is written before `collectEntities` adds its own record, and the first
|
|
76
|
+
* writer wins, so a path the fold did not attribute is `unknown` rather than
|
|
77
|
+
* `direct`. Every member belongs to the top-level `instance`; its composite is
|
|
78
|
+
* the innermost one, which {@link markHostCompositeInstance} already stamped.
|
|
79
|
+
*/
|
|
80
|
+
export function expandHostComposite(
|
|
81
|
+
prefix: string,
|
|
82
|
+
members: Record<string, unknown>,
|
|
83
|
+
instance: string = prefix,
|
|
84
|
+
): Array<[string, Declarable]> {
|
|
85
|
+
const out: Array<[string, Declarable]> = [];
|
|
86
|
+
const compositeName = hostCompositeName(members) as string;
|
|
87
|
+
for (const [memberName, member] of Object.entries(members)) {
|
|
88
|
+
if (memberName.length === 0) continue;
|
|
89
|
+
const fullName = `${prefix}${memberName[0].toUpperCase()}${memberName.slice(1)}`;
|
|
90
|
+
if (hostCompositeName(member) !== undefined) {
|
|
91
|
+
out.push(...expandHostComposite(fullName, member as Record<string, unknown>, instance));
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (!isDeclarable(member)) continue;
|
|
95
|
+
setProvenance(member, { composite: compositeName, compositeInstance: instance });
|
|
96
|
+
const composite = getProvenance(member)?.composite ?? compositeName;
|
|
97
|
+
setPathProvenance(member, "", { kind: "composite", composite, instance });
|
|
98
|
+
out.push([fullName, member]);
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
package/src/discovery/import.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DiscoveryError } from "../errors";
|
|
2
|
+
import { ensureTypeScriptLoader } from "../ts-loader";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Modules whose evaluation threw, and the error each threw with (#2368).
|
|
@@ -57,6 +58,7 @@ export async function importModule(
|
|
|
57
58
|
if (failed) throw failed;
|
|
58
59
|
|
|
59
60
|
try {
|
|
61
|
+
ensureTypeScriptLoader();
|
|
60
62
|
return await import(path);
|
|
61
63
|
} catch (error) {
|
|
62
64
|
const message =
|
package/src/discovery/index.ts
CHANGED
|
@@ -143,6 +143,16 @@ export interface DiscoveryOptions {
|
|
|
143
143
|
*/
|
|
144
144
|
lexicons?: readonly string[];
|
|
145
145
|
|
|
146
|
+
/**
|
|
147
|
+
* chant#3612 — package specifiers to follow a bare import into, verbatim,
|
|
148
|
+
* alongside whatever {@link lexicons} names. The same allowlist
|
|
149
|
+
* `FoldProjectOptions.lexiconPackages` gives `foldProject` (chant#2438), so
|
|
150
|
+
* a build over a host of its own folds the files `foldProject` folds. A
|
|
151
|
+
* chant project never needs it: its packages are `lexicons`. Only
|
|
152
|
+
* meaningful when {@link fold} is set. Default: none.
|
|
153
|
+
*/
|
|
154
|
+
lexiconPackages?: readonly string[];
|
|
155
|
+
|
|
146
156
|
/**
|
|
147
157
|
* chant #1045 Phase 2 — opt-in: whatever would otherwise reach the
|
|
148
158
|
* in-process `importModule` step (every file, when {@link fold} isn't set;
|
|
@@ -289,7 +299,7 @@ export async function discover(path: string, options?: DiscoveryOptions): Promis
|
|
|
289
299
|
buildParamValuesMap,
|
|
290
300
|
options.lexicons,
|
|
291
301
|
options.sandbox === true,
|
|
292
|
-
[],
|
|
302
|
+
options.lexiconPackages ?? [],
|
|
293
303
|
options.executing === true,
|
|
294
304
|
files,
|
|
295
305
|
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { dirname, join } from "node:path";
|
|
2
2
|
import { params as currentBuildParams } from "../../params";
|
|
3
|
+
import { chantSourceDir } from "../../ts-loader";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* chant #1045 Phase 2 — generates the source of the "driver" module that runs
|
|
@@ -30,7 +31,8 @@ import { params as currentBuildParams } from "../../params";
|
|
|
30
31
|
* boundary at all.
|
|
31
32
|
*/
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
// #3878: the TypeScript source, also when this module runs compiled from dist/.
|
|
35
|
+
const HERE = chantSourceDir(import.meta.url);
|
|
34
36
|
const DISCOVERY_DIR = join(HERE, "..");
|
|
35
37
|
|
|
36
38
|
/** Absolute paths to chant's OWN trusted modules the generated driver imports — always resolved relative to THIS file's own location on disk, so this works whether chant is running from the monorepo or from a consumer's `node_modules` (both route runtime resolution at `src/*.ts` — see `packages/core/package.json`'s `development`/`default` export conditions). */
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* rule because `@intentius/chant/op/gate` pulls in zod and the git ledger
|
|
7
7
|
* code. `@intentius/chant/gate-decision` holds the decision for a plan digest
|
|
8
8
|
* under `ledger`, `pr-review` and `sealed`, the seal check over
|
|
9
|
-
* node:crypto, and the `identity.gates` rule with its class check (#3862). This bundles it the way terragucci would and reads esbuild's
|
|
9
|
+
* node:crypto, and the `identity.gates` rule with its class check (#3862), reading the classes pinned packages supply as data, without ajv (#3888). This bundles it the way terragucci would and reads esbuild's
|
|
10
10
|
* own list of what went in.
|
|
11
11
|
*/
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ import { build } from "esbuild";
|
|
|
15
15
|
import { describe, expect, test } from "vitest";
|
|
16
16
|
import { REPO } from "./workspace/__fixtures__/contract-repo";
|
|
17
17
|
|
|
18
|
-
const FORBIDDEN = [/node_modules\//, /\/src\/fold\//, /\/src\/lint\//, /\/src\/codegen\//, /\/src\/lifecycle\/git\.ts$/, /\/src\/lifecycle\/gate-ledger\.ts$/];
|
|
18
|
+
const FORBIDDEN = [/node_modules\//, /\/src\/workspace\/(kinds|principal-classes|pin-integrity)\.ts$/, /\/src\/fold\//, /\/src\/lint\//, /\/src\/codegen\//, /\/src\/lifecycle\/git\.ts$/, /\/src\/lifecycle\/gate-ledger\.ts$/];
|
|
19
19
|
|
|
20
20
|
describe("the gate-decision bundle", () => {
|
|
21
21
|
test("holds the decision, the seal check and the plan digest, and no package or git code", async () => {
|
|
@@ -46,13 +46,14 @@ describe("the gate-decision bundle", () => {
|
|
|
46
46
|
"packages/core/src/notify.ts",
|
|
47
47
|
"packages/core/src/op/gate-point.ts",
|
|
48
48
|
"packages/core/src/op/op-waves.ts",
|
|
49
|
+
"packages/core/src/workspace/class-data.ts",
|
|
49
50
|
"packages/core/src/workspace/identity-gate-rule.ts",
|
|
50
51
|
"packages/core/src/workspace/jsonc.ts",
|
|
51
52
|
"packages/core/src/workspace/trust/gate-seal.ts",
|
|
52
53
|
"packages/core/src/workspace/trust/trust-files.ts",
|
|
53
54
|
]);
|
|
54
|
-
// About
|
|
55
|
+
// About 43 KB unminified today, 7 KB of it the pinned classes read as data (#3888).
|
|
55
56
|
const bytes = result.outputFiles.reduce((n, f) => n + f.contents.byteLength, 0);
|
|
56
|
-
expect(bytes).toBeLessThan(
|
|
57
|
+
expect(bytes).toBeLessThan(48 * 1024);
|
|
57
58
|
});
|
|
58
59
|
});
|
|
@@ -139,18 +139,71 @@ describe.skipIf(!hasSshKeygen)("identity.gates read at base, as chant reads it",
|
|
|
139
139
|
expect(judgeBoth(invalid.r, invalid.base, invalid.approvals).ship![1]).toMatch(/no signers file/);
|
|
140
140
|
});
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
/** A plugin publishing `classes` at ./workspace-principals, as files under `dir`. */
|
|
143
|
+
const plugin = (dir: string, classes: unknown[], version = "1.0.0"): Record<string, string> => ({
|
|
144
|
+
[`${dir}/package.json`]: JSON.stringify({ name: "@acme/ops-classes", version, exports: { "./workspace-principals": "./principals.json" } }),
|
|
145
|
+
[`${dir}/principals.json`]: JSON.stringify({ schema: 1, classes }),
|
|
146
|
+
});
|
|
147
|
+
const OPERATOR = { name: "operator", description: "people who apply infrastructure", role: "operator" };
|
|
148
|
+
const operatorPolicy = (k: Record<string, Key>) => ({
|
|
149
|
+
".chant/allowed_signers": `alice ${k.alice.pub}\nbob ${k.bob.pub}\n`,
|
|
150
|
+
".chant/trust.json": JSON.stringify({ schema: 1, roles: { operator: ["alice"], runner: ["bob"] } }),
|
|
151
|
+
});
|
|
152
|
+
const install = (r: TestRepo, files: Record<string, string>) => {
|
|
153
|
+
for (const [path, text] of Object.entries(files)) r.write(path, text);
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
test("a class only a pinned package supplies, read from the installed package as chant reads it (#3888)", () => {
|
|
157
|
+
const { r, base, approvals } = setup(operatorPolicy, { pins: [{ package: "@acme/ops-classes", version: "1.0.0" }] });
|
|
158
|
+
install(r, plugin("node_modules/@acme/ops-classes", [OPERATOR]));
|
|
159
|
+
const ours = judgeBoth(r, base, approvals);
|
|
160
|
+
// alice holds the operator role at base, so she is an operator and no longer human.
|
|
161
|
+
expect(ours.ops![1]).toBeNull();
|
|
162
|
+
expect(ours.ops![2]).toBe("BOB is not in the class operator that gate ops needs: no role grant at base puts them there");
|
|
163
|
+
expect(ours.deploy![1]).toMatch(/^alice is not in the class human that gate deploy needs/);
|
|
164
|
+
|
|
165
|
+
// A bare clone holds no node_modules; the caller names where the packages are installed.
|
|
166
|
+
const bare = `${r.dir}.git`;
|
|
167
|
+
r.git(["clone", "-q", "--bare", r.dir, bare]);
|
|
168
|
+
const fromBare = identityGateAdmissionAt(bare, base, "ops", { packages: r.dir })!;
|
|
169
|
+
expect(approvals("ops").map((a) => fromBare.refuses(a))).toEqual(ours.ops);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test("a path pin's class is read at base, so the change being applied can't remap it", () => {
|
|
173
|
+
const { r, base, approvals } = setup((k) => ({ ...operatorPolicy(k), ...plugin("plugins/ops", [OPERATOR]) }), { pins: [{ path: "plugins/ops" }] });
|
|
174
|
+
// After base the plugin moves the operator class to bob's role; base still says operator.
|
|
175
|
+
install(r, plugin("plugins/ops", [{ ...OPERATOR, role: "runner-ops" }]));
|
|
176
|
+
r.commit("remaps operator");
|
|
177
|
+
const ours = judgeBoth(r, base, approvals);
|
|
178
|
+
expect(ours.ops![1]).toBeNull();
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test("a pin it cannot read refuses a gate whose class the pin could change, and says why", () => {
|
|
182
|
+
const { r, base, approvals } = setup(operatorPolicy, { pins: [{ package: "@acme/ops-classes", version: "1.0.0" }] });
|
|
183
|
+
const missing = identityGateAdmissionAt(r.dir, base, "ops")!;
|
|
184
|
+
expect(missing.refuses(approvals("ops")[1])).toBe(
|
|
185
|
+
`identity.gates.ops names the class operator, and the pins in chant.workspace.json at base could not all be read, so no approval can show it is in that class: @acme/ops-classes is not installed under ${r.dir}`,
|
|
146
186
|
);
|
|
147
|
-
|
|
148
|
-
expect(
|
|
187
|
+
// human is everyone in no other class, so an unread pin leaves it unknown too; runner and no class are not affected.
|
|
188
|
+
expect(identityGateAdmissionAt(r.dir, base, "deploy")!.refuses(approvals("deploy")[1])).toMatch(/names the class human, and the pins .* could not all be read/);
|
|
189
|
+
expect(identityGateAdmissionAt(r.dir, base, "release")!.refuses(approvals("release")[2])).toBeNull();
|
|
190
|
+
expect(identityGateAdmissionAt(r.dir, base, "ship")!.refuses(approvals("ship")[1])).toBeNull();
|
|
191
|
+
|
|
192
|
+
install(r, plugin("node_modules/@acme/ops-classes", [OPERATOR], "2.0.0"));
|
|
193
|
+
expect(identityGateAdmissionAt(r.dir, base, "ops")!.refuses(approvals("ops")[1])).toMatch(/: @acme\/ops-classes is pinned at 1\.0\.0, and 2\.0\.0 is installed under /);
|
|
194
|
+
|
|
195
|
+
// A class the caller read stands for the pins, as before.
|
|
149
196
|
const read = identityGateAdmissionAt(r.dir, base, "ops", { classes: [{ name: "operator", role: "operator" }] })!;
|
|
150
197
|
expect(read.refuses(approvals("ops")[1])).toBeNull();
|
|
151
198
|
expect(read.refuses(approvals("ops")[0])).toMatch(/not signed/);
|
|
152
199
|
});
|
|
153
200
|
|
|
201
|
+
test("an installed package that supplies no such class refuses as chant does", () => {
|
|
202
|
+
const { r, base, approvals } = setup(operatorPolicy, { pins: [{ package: "@acme/ops-classes", version: "1.0.0" }] });
|
|
203
|
+
install(r, plugin("node_modules/@acme/ops-classes", [{ ...OPERATOR, name: "deployer" }]));
|
|
204
|
+
expect(judgeBoth(r, base, approvals).ops![1]).toMatch(/names the class operator, which no pinned package supplies, .*known classes: human, agent, runner, service, deployer/);
|
|
205
|
+
});
|
|
206
|
+
|
|
154
207
|
test("passed to decideGateApproval as refuses, it counts what chant's wave gate counts", async () => {
|
|
155
208
|
const { r, base, approvals } = setup((k) => ({
|
|
156
209
|
".chant/allowed_signers": `alice ${k.alice.pub}\nbob ${k.bob.pub}\n`,
|