@intentius/chant 0.124.12 → 0.124.14
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.js +668 -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.js +312 -0
- package/dist/child-project.js +21 -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.js +134 -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.js +305 -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.js +208 -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 +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- 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 +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -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.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -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.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.js +64 -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.js +997 -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.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.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- 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 +460 -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.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -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.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- 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.js +587 -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 +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -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/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- 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/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- 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/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
const TRACKED_FIELDS = [
|
|
2
|
+
"status",
|
|
3
|
+
"physicalId",
|
|
4
|
+
"lastUpdated",
|
|
5
|
+
];
|
|
6
|
+
function compareMetadata(oldMeta, newMeta) {
|
|
7
|
+
const changes = [];
|
|
8
|
+
for (const field of TRACKED_FIELDS) {
|
|
9
|
+
if (oldMeta[field] !== newMeta[field]) {
|
|
10
|
+
changes.push({ path: field, oldValue: oldMeta[field], newValue: newMeta[field] });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const oldAttrs = oldMeta.attributes ?? {};
|
|
14
|
+
const newAttrs = newMeta.attributes ?? {};
|
|
15
|
+
const allAttrKeys = new Set([...Object.keys(oldAttrs), ...Object.keys(newAttrs)]);
|
|
16
|
+
for (const key of allAttrKeys) {
|
|
17
|
+
const oldValue = oldAttrs[key];
|
|
18
|
+
const newValue = newAttrs[key];
|
|
19
|
+
if (!shallowEqual(oldValue, newValue)) {
|
|
20
|
+
changes.push({ path: `attributes.${key}`, oldValue, newValue });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return changes;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Value equality that does not care what order a provider listed the keys in.
|
|
27
|
+
*
|
|
28
|
+
* This compared with `JSON.stringify`, which is key-order sensitive. That held
|
|
29
|
+
* while observed attributes were flat strings, and broke the moment they carried
|
|
30
|
+
* nested objects (#1279): a provider returning `{AvailabilityZone, Tenancy}` on
|
|
31
|
+
* one read and `{Tenancy, AvailabilityZone}` on the next made an unchanged
|
|
32
|
+
* instance drift on every single run. Order is not a fact about the resource,
|
|
33
|
+
* and reporting it as drift is exactly the noise this module exists to remove.
|
|
34
|
+
*
|
|
35
|
+
* Arrays stay order-sensitive — for a list, order is part of the value.
|
|
36
|
+
*/
|
|
37
|
+
function shallowEqual(a, b) {
|
|
38
|
+
if (a === b)
|
|
39
|
+
return true;
|
|
40
|
+
if (a == null || b == null)
|
|
41
|
+
return false;
|
|
42
|
+
if (typeof a !== "object" || typeof b !== "object")
|
|
43
|
+
return false;
|
|
44
|
+
return canonical(a) === canonical(b);
|
|
45
|
+
}
|
|
46
|
+
/** JSON with object keys sorted at every depth, so equal values stringify equally. */
|
|
47
|
+
function canonical(value) {
|
|
48
|
+
if (value === null || typeof value !== "object")
|
|
49
|
+
return JSON.stringify(value) ?? "null";
|
|
50
|
+
if (Array.isArray(value))
|
|
51
|
+
return `[${value.map(canonical).join(",")}]`;
|
|
52
|
+
const entries = Object.entries(value).sort(([x], [y]) => (x < y ? -1 : x > y ? 1 : 0));
|
|
53
|
+
return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonical(v)}`).join(",")}}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Diff two **observed** snapshots (#822) — `prev` vs `next`, each a resources map
|
|
57
|
+
* read from the orphan branch. A two-way diff (no "declared" axis), so it answers
|
|
58
|
+
* "what changed in the cloud between two points" independent of source. Pure and
|
|
59
|
+
* deterministic (results sorted). Feeds the deployment-lanes frame-pair diff.
|
|
60
|
+
*/
|
|
61
|
+
export function diffSnapshots(prev, next) {
|
|
62
|
+
const added = [];
|
|
63
|
+
const removed = [];
|
|
64
|
+
const changed = [];
|
|
65
|
+
const unchanged = [];
|
|
66
|
+
for (const name of [...new Set([...Object.keys(prev), ...Object.keys(next)])].sort()) {
|
|
67
|
+
const a = prev[name];
|
|
68
|
+
const b = next[name];
|
|
69
|
+
if (!a && b)
|
|
70
|
+
added.push(name);
|
|
71
|
+
else if (a && !b)
|
|
72
|
+
removed.push(name);
|
|
73
|
+
else if (a && b) {
|
|
74
|
+
const changes = compareMetadata(a, b);
|
|
75
|
+
if (changes.length > 0)
|
|
76
|
+
changed.push({ name, type: b.type ?? a.type, changes });
|
|
77
|
+
else
|
|
78
|
+
unchanged.push(name);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { added, removed, changed, unchanged };
|
|
82
|
+
}
|
|
83
|
+
export function diffLive(input) {
|
|
84
|
+
const { declared, observedNow, observedThen } = input;
|
|
85
|
+
const observedThenMap = observedThen ?? {};
|
|
86
|
+
const observedNowNames = new Set(Object.keys(observedNow));
|
|
87
|
+
const observedThenNames = new Set(Object.keys(observedThenMap));
|
|
88
|
+
// A resource the lexicon returned is observed, whatever it also said about
|
|
89
|
+
// it — present beats not-observed.
|
|
90
|
+
const unobservedMap = input.unobserved ?? {};
|
|
91
|
+
const unobservedNames = new Set(Object.keys(unobservedMap).filter((n) => !observedNowNames.has(n)));
|
|
92
|
+
const missing = [];
|
|
93
|
+
const orphan = [];
|
|
94
|
+
const runtimeChildren = [];
|
|
95
|
+
const disappeared = [];
|
|
96
|
+
const newlyObserved = [];
|
|
97
|
+
const driftedSinceSnapshot = [];
|
|
98
|
+
const unchanged = [];
|
|
99
|
+
const unobserved = [];
|
|
100
|
+
for (const name of unobservedNames) {
|
|
101
|
+
const entry = unobservedMap[name];
|
|
102
|
+
const queriedAddress = entry.queried ?? input.queried?.[name];
|
|
103
|
+
unobserved.push({
|
|
104
|
+
name,
|
|
105
|
+
...(entry.type ? { type: entry.type } : {}),
|
|
106
|
+
reason: entry.reason,
|
|
107
|
+
...(entry.detail ? { detail: entry.detail } : {}),
|
|
108
|
+
...(queriedAddress ? { queried: queriedAddress } : {}),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// Declared, looked at, and the provider said it isn't there → missing.
|
|
112
|
+
// Declared but never looked at is `unobserved`, not missing — the whole point
|
|
113
|
+
// of #1089: "we didn't check" must not read as "it isn't there".
|
|
114
|
+
for (const name of declared) {
|
|
115
|
+
if (!observedNowNames.has(name) && !unobservedNames.has(name)) {
|
|
116
|
+
missing.push(name);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// In cloud right now but not declared → orphan, unless its owner-reference
|
|
120
|
+
// chain reaches a declared entity (#1077), in which case it is expected
|
|
121
|
+
// runtime rather than drift. An `unknown` chain (unreadable hop, cycle, or
|
|
122
|
+
// depth bound) is deliberately NOT escalated to runtime — it stays orphan,
|
|
123
|
+
// same as `unowned`/`foreign` — composing with #1168's tri-state precedent:
|
|
124
|
+
// an incomplete read never earns the more confident classification.
|
|
125
|
+
const runtimeChildNames = new Set();
|
|
126
|
+
const dependencyNames = new Set();
|
|
127
|
+
for (const name of observedNowNames) {
|
|
128
|
+
if (declared.has(name))
|
|
129
|
+
continue;
|
|
130
|
+
// A referenced dependency (#1273) is observed only because something
|
|
131
|
+
// declared points at it — an account's default VPC route table, a shared
|
|
132
|
+
// subnet. Offering it as a delete/adopt candidate is wrong: it is not
|
|
133
|
+
// yours, and it changes on its own, so counting it as drift is noise.
|
|
134
|
+
// Same treatment as a runtime child, for the same reason, arrived at from
|
|
135
|
+
// the other direction — a child is something declared created, a
|
|
136
|
+
// dependency is something declared relies on.
|
|
137
|
+
if ((observedNow[name]?.referencedBy?.length ?? 0) > 0) {
|
|
138
|
+
dependencyNames.add(name);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// Ambient (#1278): observed because it exists, not because anything points
|
|
142
|
+
// at it. Reported so a caller can ask about it — "which of these are
|
|
143
|
+
// unused" is the whole point — but never counted as drift, since chant
|
|
144
|
+
// neither created it nor tracks its changes.
|
|
145
|
+
if (observedNow[name]?.ambient) {
|
|
146
|
+
dependencyNames.add(name);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const chain = observedNow[name]?.ownerChain;
|
|
150
|
+
if (chain?.root === "declared") {
|
|
151
|
+
runtimeChildNames.add(name);
|
|
152
|
+
runtimeChildren.push({ name, type: observedNow[name].type, owner: chain.entity });
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
orphan.push(name);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// In previous snapshot but not observed now → disappeared. An entity nobody
|
|
159
|
+
// could look at has not disappeared; it is unobserved. A resource the
|
|
160
|
+
// *previous* snapshot recorded as a runtime child (#1077) rolling to a new
|
|
161
|
+
// name (a Pod replaced by its controller) is not disappearance either — it
|
|
162
|
+
// is the same expected churn `runtimeChildren` excludes above, and counting
|
|
163
|
+
// it here would recreate the drift noise this module exists to remove.
|
|
164
|
+
for (const name of observedThenNames) {
|
|
165
|
+
if (observedNowNames.has(name) || unobservedNames.has(name))
|
|
166
|
+
continue;
|
|
167
|
+
if (!declared.has(name) && observedThenMap[name]?.ownerChain?.root === "declared")
|
|
168
|
+
continue;
|
|
169
|
+
disappeared.push(name);
|
|
170
|
+
}
|
|
171
|
+
// Observed now: classify drift relative to previous snapshot. Runtime
|
|
172
|
+
// children (#1077) are excluded entirely — a controller-owned object's
|
|
173
|
+
// transient status is not drift chant should surface, and a snapshot that
|
|
174
|
+
// happened to record the same name (e.g. a StatefulSet's stable pod
|
|
175
|
+
// identity) must not turn its ordinary churn into `driftedSinceSnapshot`.
|
|
176
|
+
for (const name of observedNowNames) {
|
|
177
|
+
// Referenced dependencies (#1273) are excluded for the same reason runtime
|
|
178
|
+
// children are: they are observed to complete the picture, not to be
|
|
179
|
+
// governed, and their ordinary churn is somebody else's.
|
|
180
|
+
if (runtimeChildNames.has(name) || dependencyNames.has(name))
|
|
181
|
+
continue;
|
|
182
|
+
const now = observedNow[name];
|
|
183
|
+
const then = observedThenMap[name];
|
|
184
|
+
if (!then) {
|
|
185
|
+
if (declared.has(name)) {
|
|
186
|
+
newlyObserved.push(name);
|
|
187
|
+
}
|
|
188
|
+
// else: orphan, already classified above
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const changes = compareMetadata(then, now);
|
|
192
|
+
if (changes.length === 0) {
|
|
193
|
+
unchanged.push(name);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
driftedSinceSnapshot.push({
|
|
197
|
+
name,
|
|
198
|
+
type: now.type,
|
|
199
|
+
changes,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
missing: missing.sort(),
|
|
205
|
+
orphan: orphan.sort(),
|
|
206
|
+
runtimeChildren: runtimeChildren.sort((a, b) => a.name.localeCompare(b.name)),
|
|
207
|
+
disappeared: disappeared.sort(),
|
|
208
|
+
newlyObserved: newlyObserved.sort(),
|
|
209
|
+
driftedSinceSnapshot: driftedSinceSnapshot.sort((a, b) => a.name.localeCompare(b.name)),
|
|
210
|
+
unchanged: unchanged.sort(),
|
|
211
|
+
unobserved: unobserved.sort((a, b) => a.name.localeCompare(b.name)),
|
|
212
|
+
...(input.queried && Object.keys(input.queried).length > 0 ? { queried: input.queried } : {}),
|
|
213
|
+
...missingDefinitions(missing, input.definitions),
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* One row of a live diff's MISSING section, as `chant lifecycle diff --live`
|
|
218
|
+
* prints it. The address the read went to (#1620) is the line between "not
|
|
219
|
+
* there" and "looked in the wrong place". The definition's fingerprint
|
|
220
|
+
* (#3652) is what the create would create: `ApplyOp` digests these rows, and
|
|
221
|
+
* a row naming the entity alone left an approval standing after the
|
|
222
|
+
* declaration changed.
|
|
223
|
+
*/
|
|
224
|
+
export function missingRow(diff, name) {
|
|
225
|
+
const queried = diff.queried?.[name];
|
|
226
|
+
const definition = diff.definitions?.[name];
|
|
227
|
+
return ` - ${name}${queried ? ` [queried ${queried}]` : ""}${definition ? ` [definition ${definition}]` : ""}`;
|
|
228
|
+
}
|
|
229
|
+
/** `{ definitions }` for the missing entities that have one, or nothing at all. */
|
|
230
|
+
function missingDefinitions(missing, definitions) {
|
|
231
|
+
if (!definitions)
|
|
232
|
+
return {};
|
|
233
|
+
const out = {};
|
|
234
|
+
for (const name of [...missing].sort()) {
|
|
235
|
+
const d = definitions[name];
|
|
236
|
+
if (d !== undefined)
|
|
237
|
+
out[name] = d;
|
|
238
|
+
}
|
|
239
|
+
return Object.keys(out).length > 0 ? { definitions: out } : {};
|
|
240
|
+
}
|
|
241
|
+
export function diffLiveArtifacts(input) {
|
|
242
|
+
const observedThenMap = input.observedThen ?? {};
|
|
243
|
+
const nowNames = new Set(Object.keys(input.observedNow));
|
|
244
|
+
const thenNames = new Set(Object.keys(observedThenMap));
|
|
245
|
+
const added = [];
|
|
246
|
+
const removed = [];
|
|
247
|
+
const changed = [];
|
|
248
|
+
const unchanged = [];
|
|
249
|
+
for (const name of nowNames) {
|
|
250
|
+
if (!thenNames.has(name)) {
|
|
251
|
+
added.push(name);
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
const now = input.observedNow[name];
|
|
255
|
+
const then = observedThenMap[name];
|
|
256
|
+
const diffs = compareMetadata(then, now);
|
|
257
|
+
if (diffs.length === 0) {
|
|
258
|
+
unchanged.push(name);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
changed.push({ name, type: now.type, changes: diffs });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
for (const name of thenNames) {
|
|
265
|
+
if (!nowNames.has(name))
|
|
266
|
+
removed.push(name);
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
added: added.sort(),
|
|
270
|
+
removed: removed.sort(),
|
|
271
|
+
changed: changed.sort((a, b) => a.name.localeCompare(b.name)),
|
|
272
|
+
unchanged: unchanged.sort(),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a ledger write shows when the checkout has no remote (#3677), kept
|
|
3
|
+
* apart from `./git.ts` so the run renderers can name it without loading git.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The line a write shows when this checkout has no remote for the ledger.
|
|
7
|
+
* Nothing went wrong: the record is in the local branch, and with no remote
|
|
8
|
+
* the person who will approve or read it is the one at this machine. A
|
|
9
|
+
* renderer prints it as a note, never as a warning ({@link isLifecycleLocalNote}).
|
|
10
|
+
*/
|
|
11
|
+
export const LIFECYCLE_LOCAL_NOTE = "recorded locally (no remote for chant/lifecycle)";
|
|
12
|
+
/** Whether a push warning is {@link LIFECYCLE_LOCAL_NOTE}: no remote, rather than a push that failed. */
|
|
13
|
+
export function isLifecycleLocalNote(warning) {
|
|
14
|
+
return warning === LIFECYCLE_LOCAL_NOTE;
|
|
15
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a project's lifecycle ledger lives on the `chant/lifecycle` branch
|
|
3
|
+
* (#2538, #2524 D7, ws-036).
|
|
4
|
+
*
|
|
5
|
+
* A workspace member writes every lifecycle store under
|
|
6
|
+
* `_members/<member>/` on the one existing branch: releases, snapshots, runs,
|
|
7
|
+
* converge records and observation baselines under `<env>/`, gates under
|
|
8
|
+
* `_gates/`, build records under `_builds/`, release plans under `_plans/`
|
|
9
|
+
* (ws-055, #2733). Its operator leases move the same way, to
|
|
10
|
+
* `refs/chant/lease/_members/<member>/<op>`. Push, fetch, lease and
|
|
11
|
+
* staleness code are untouched: they still see one branch and plain refs.
|
|
12
|
+
*
|
|
13
|
+
* Everything else keeps today's flat layout, byte for byte:
|
|
14
|
+
*
|
|
15
|
+
* - a project with no `chant.workspace.json` between it and the git root
|
|
16
|
+
* (level 0);
|
|
17
|
+
* - the root member `.`;
|
|
18
|
+
* - a directory no member owns;
|
|
19
|
+
* - an example group's match, since a group has no ledger of its own (ws-051).
|
|
20
|
+
*
|
|
21
|
+
* A member of kind `workspace` holds a nested declaration. The nested
|
|
22
|
+
* workspace's ledgers sit inside the outer member's, so its member `api` in
|
|
23
|
+
* the outer member `platform` writes under `_members/platform/_members/api/`,
|
|
24
|
+
* and the nested root member `.` writes under `_members/platform/`.
|
|
25
|
+
*
|
|
26
|
+
* Level 0 pays one upward `existsSync` walk here and nothing more. The
|
|
27
|
+
* declaration reader under `../workspace/` is imported only once a
|
|
28
|
+
* declaration has been found, so a project without one never loads workspace
|
|
29
|
+
* code (#2525 rule 5, pinned by #2526's goldens).
|
|
30
|
+
*/
|
|
31
|
+
import { existsSync } from "node:fs";
|
|
32
|
+
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
33
|
+
import { findWorkspaceRoot } from "../project-root.js";
|
|
34
|
+
/** The directory on `chant/lifecycle` that holds every member's ledger. */
|
|
35
|
+
export const MEMBERS_DIR = "_members";
|
|
36
|
+
/**
|
|
37
|
+
* The first chant that writes member ledgers. A member whose own toolchain
|
|
38
|
+
* resolves an older chant still writes the flat layout; `chant workspace
|
|
39
|
+
* check` fails when two flat writers share an environment name (#2524 D7).
|
|
40
|
+
*/
|
|
41
|
+
export const MEMBER_LEDGER_FLOOR = "0.81.0";
|
|
42
|
+
const FLAT = { members: [], prefix: "" };
|
|
43
|
+
/** The branch prefix for a path of member names. */
|
|
44
|
+
export function memberLedgerPrefix(members) {
|
|
45
|
+
return members.map((m) => `${MEMBERS_DIR}/${m}/`).join("");
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Thrown when a project sits in a workspace whose declaration cannot be read.
|
|
49
|
+
* Writing the flat layout then could land in another member's ledger, so no
|
|
50
|
+
* lifecycle store guesses.
|
|
51
|
+
*/
|
|
52
|
+
export class MemberLedgerError extends Error {
|
|
53
|
+
constructor(message) {
|
|
54
|
+
super(message);
|
|
55
|
+
this.name = "MemberLedgerError";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const cache = new Map();
|
|
59
|
+
/**
|
|
60
|
+
* The ledger of the project at `projectDir` (any directory inside it will do;
|
|
61
|
+
* ownership goes to the deepest member directory holding it). Results are
|
|
62
|
+
* cached per directory for the life of the process.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveMemberLedger(projectDir) {
|
|
65
|
+
const dir = resolve(projectDir);
|
|
66
|
+
let hit = cache.get(dir);
|
|
67
|
+
if (!hit) {
|
|
68
|
+
hit = resolveUncached(dir);
|
|
69
|
+
cache.set(dir, hit);
|
|
70
|
+
// A failure is not remembered: the next call reads the declaration again.
|
|
71
|
+
hit.catch(() => cache.delete(dir));
|
|
72
|
+
}
|
|
73
|
+
return hit;
|
|
74
|
+
}
|
|
75
|
+
/** Forget cached resolutions, for tests that write a declaration mid-run. */
|
|
76
|
+
export function clearMemberLedgerCache() {
|
|
77
|
+
cache.clear();
|
|
78
|
+
}
|
|
79
|
+
function treePath(root, dir) {
|
|
80
|
+
const rel = relative(root, dir);
|
|
81
|
+
return rel === "" ? "" : rel.split(sep).join("/");
|
|
82
|
+
}
|
|
83
|
+
async function resolveUncached(dir) {
|
|
84
|
+
const found = findWorkspaceRoot(dir);
|
|
85
|
+
if (!found)
|
|
86
|
+
return FLAT;
|
|
87
|
+
return ledgerIn(found.dir, dir);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The ledger of `dir` in the workspace whose declaration sits in `root`. When
|
|
91
|
+
* that workspace is nested, its whole ledger sits inside the ledger of the
|
|
92
|
+
* outer member holding `root`. The git root ends the walk outwards, as it
|
|
93
|
+
* ends {@link findWorkspaceRoot}'s.
|
|
94
|
+
*/
|
|
95
|
+
async function ledgerIn(root, dir) {
|
|
96
|
+
// Only now does workspace code load.
|
|
97
|
+
const { readDeclaration, resolveGroups, ownerOf, WorkspaceReadError } = await import("../workspace/declaration.js");
|
|
98
|
+
const { workingTree } = await import("../workspace/tree.js");
|
|
99
|
+
let own;
|
|
100
|
+
try {
|
|
101
|
+
const tree = workingTree(root);
|
|
102
|
+
const declaration = readDeclaration(tree);
|
|
103
|
+
const owner = ownerOf(declaration, resolveGroups(declaration, tree), treePath(root, dir));
|
|
104
|
+
own = owner && "member" in owner && owner.member.dir !== "." ? [owner.member.name] : [];
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
if (!(err instanceof WorkspaceReadError))
|
|
108
|
+
throw err;
|
|
109
|
+
throw new MemberLedgerError(`cannot place this project's lifecycle ledger: ${err.describe()}. ` +
|
|
110
|
+
`A project inside a workspace writes under ${MEMBERS_DIR}/<member>/ on chant/lifecycle, ` +
|
|
111
|
+
`and chant does not guess the member. Fix the declaration and retry.`);
|
|
112
|
+
}
|
|
113
|
+
let outer = FLAT;
|
|
114
|
+
const parent = dirname(root);
|
|
115
|
+
if (parent !== root && !existsSync(join(root, ".git"))) {
|
|
116
|
+
const outerFound = findWorkspaceRoot(parent);
|
|
117
|
+
if (outerFound)
|
|
118
|
+
outer = await ledgerIn(outerFound.dir, root);
|
|
119
|
+
}
|
|
120
|
+
const members = [...outer.members, ...own];
|
|
121
|
+
return { members, prefix: memberLedgerPrefix(members) };
|
|
122
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The accepted-observation baseline (#1014) — a committed record of deviations
|
|
3
|
+
* somebody looked at and accepted, so they stop re-alerting.
|
|
4
|
+
*
|
|
5
|
+
* Deep observation reports every property that differs between source and
|
|
6
|
+
* cloud, including properties nobody ever declared. Some of those are real
|
|
7
|
+
* findings. Many are permanent facts of the account — a platform team's
|
|
8
|
+
* mandatory tag, a bucket setting an org policy flips on, a role an operator
|
|
9
|
+
* attached by hand and everyone agreed to keep. Without somewhere to record
|
|
10
|
+
* "yes, we know, leave it", a deep diff is a report nobody reads twice.
|
|
11
|
+
*
|
|
12
|
+
* The model is cdk-real-drift's `.cdkrd`: a snapshot of accepted *undeclared*
|
|
13
|
+
* values that the diff subtracts. Accepting is an explicit act with a git
|
|
14
|
+
* commit behind it, and the acceptance is value-bound — accept
|
|
15
|
+
* `VersioningConfiguration.Status = Enabled` and a later change to `Suspended`
|
|
16
|
+
* is drift again, because what was accepted was that value, not that path.
|
|
17
|
+
*
|
|
18
|
+
* ## What this is not
|
|
19
|
+
*
|
|
20
|
+
* Not state. The baseline never tells a deploy what to do and is never read on
|
|
21
|
+
* the write path; deleting it costs you noise suppression and nothing else.
|
|
22
|
+
* Which is also why it is safe for it to be incomplete or stale.
|
|
23
|
+
*
|
|
24
|
+
* ## Where it lives
|
|
25
|
+
*
|
|
26
|
+
* `<environment>/observation-baseline.json` on the `chant/lifecycle` orphan
|
|
27
|
+
* branch — the epic's named candidate home, and the same storage the snapshots
|
|
28
|
+
* (`<env>/<lexicon>.json`), the release ledger (`<env>/releases.jsonl`) and the
|
|
29
|
+
* build archive (`_builds/<digest>.json`) already use, through the same
|
|
30
|
+
* `writeBlobToPath`/`readBlobFromPath` plumbing. One env-keyed namespace for
|
|
31
|
+
* everything chant records *about* an environment rather than *for* it.
|
|
32
|
+
*
|
|
33
|
+
* The parse/serialize/update half below is pure and storage-free, so the
|
|
34
|
+
* decision is one function call deep if a repo-committed file (`.chant/`) turns
|
|
35
|
+
* out to be the better review surface.
|
|
36
|
+
*/
|
|
37
|
+
import { readBlobFromPath, writeBlobToPath } from "./git.js";
|
|
38
|
+
import { sortedJsonReplacer } from "../utils.js";
|
|
39
|
+
import { EFFECT_RECEIPT_ENTITY_TYPE } from "../effect-receipt.js";
|
|
40
|
+
/** The file name under `<environment>/` on the orphan branch. */
|
|
41
|
+
export const OBSERVATION_BASELINE_FILE = "observation-baseline.json";
|
|
42
|
+
/** An environment with nothing accepted yet. */
|
|
43
|
+
export function emptyBaseline(environment) {
|
|
44
|
+
return { baseline: "v1", environment, lexicons: {} };
|
|
45
|
+
}
|
|
46
|
+
/** True when `value` is a well-formed {@link ObservationBaseline}. */
|
|
47
|
+
export function isObservationBaseline(value) {
|
|
48
|
+
return (typeof value === "object" &&
|
|
49
|
+
value !== null &&
|
|
50
|
+
value.baseline === "v1" &&
|
|
51
|
+
typeof value.lexicons === "object" &&
|
|
52
|
+
value.lexicons !== null);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parse a baseline document. Returns `null` for unparseable or unrecognized
|
|
56
|
+
* content — a corrupt baseline degrades to "nothing is accepted", which is
|
|
57
|
+
* noisy but never wrong. Silently treating garbage as a baseline would
|
|
58
|
+
* suppress real drift.
|
|
59
|
+
*/
|
|
60
|
+
export function parseBaseline(content) {
|
|
61
|
+
if (!content)
|
|
62
|
+
return null;
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = JSON.parse(content);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
if (!isObservationBaseline(parsed))
|
|
71
|
+
return null;
|
|
72
|
+
return parsed;
|
|
73
|
+
}
|
|
74
|
+
/** Deterministic on-disk form: sorted keys, trailing newline, reviewable diff. */
|
|
75
|
+
export function serializeBaseline(baseline) {
|
|
76
|
+
return `${JSON.stringify(baseline, sortedJsonReplacer, 2)}\n`;
|
|
77
|
+
}
|
|
78
|
+
/** The accepted deviations for one lexicon, or an empty map. */
|
|
79
|
+
export function baselineForLexicon(baseline, lexicon) {
|
|
80
|
+
return baseline?.lexicons?.[lexicon] ?? {};
|
|
81
|
+
}
|
|
82
|
+
/** Look up one accepted deviation by entity + path. */
|
|
83
|
+
export function acceptedDeviation(lexiconBaseline, entity, path) {
|
|
84
|
+
return lexiconBaseline[entity]?.accepted.find((a) => a.path === path);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Record deviations as accepted, returning a new baseline (the input is not
|
|
88
|
+
* mutated). An existing acceptance for the same entity+path is replaced — that
|
|
89
|
+
* is how re-accepting after a deliberate change works, and it keeps the file
|
|
90
|
+
* from growing a second entry for every value a path has ever held.
|
|
91
|
+
*
|
|
92
|
+
* REFUSES a deviation on an effect receipt (#1833, epic #1703), throwing
|
|
93
|
+
* before anything is recorded: a receipt is the declared witness that its
|
|
94
|
+
* effect ran, and the `effect()` step is its only writer — baselining a
|
|
95
|
+
* receipt's live value would accept "the effect never fired" as the new
|
|
96
|
+
* normal and silently defuse the effect. The whole acceptance aborts, not
|
|
97
|
+
* just the receipt's row, so a partial baseline never lands.
|
|
98
|
+
*/
|
|
99
|
+
export function acceptDeviations(baseline, lexicon, deviations, opts) {
|
|
100
|
+
if (deviations.length === 0)
|
|
101
|
+
return baseline;
|
|
102
|
+
for (const dev of deviations) {
|
|
103
|
+
if (dev.type === EFFECT_RECEIPT_ENTITY_TYPE || opts?.receipts?.has(dev.entity)) {
|
|
104
|
+
throw new Error(`cannot accept drift on effect receipt "${dev.entity}" (path ${dev.path}): ` +
|
|
105
|
+
`the effect() step is the receipt's only writer — accepting the live value would ` +
|
|
106
|
+
`silently defuse the effect. Re-run the effect (or change its inputs) instead of ` +
|
|
107
|
+
`baselining the receipt.`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const now = opts?.now ?? new Date().toISOString();
|
|
111
|
+
const lexicons = { ...baseline.lexicons };
|
|
112
|
+
const entities = { ...(lexicons[lexicon] ?? {}) };
|
|
113
|
+
for (const dev of deviations) {
|
|
114
|
+
const existing = entities[dev.entity];
|
|
115
|
+
const accepted = (existing?.accepted ?? []).filter((a) => a.path !== dev.path);
|
|
116
|
+
accepted.push({
|
|
117
|
+
path: dev.path,
|
|
118
|
+
value: dev.value,
|
|
119
|
+
...(dev.note ? { note: dev.note } : {}),
|
|
120
|
+
recordedAt: now,
|
|
121
|
+
});
|
|
122
|
+
accepted.sort((a, b) => a.path.localeCompare(b.path));
|
|
123
|
+
entities[dev.entity] = {
|
|
124
|
+
...(dev.type ?? existing?.type ? { type: dev.type ?? existing?.type } : {}),
|
|
125
|
+
accepted,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
lexicons[lexicon] = entities;
|
|
129
|
+
return { baseline: "v1", environment: baseline.environment, updated: now, lexicons };
|
|
130
|
+
}
|
|
131
|
+
/** Total accepted deviations across every lexicon — for the "N accepted" line. */
|
|
132
|
+
export function countAccepted(baseline) {
|
|
133
|
+
if (!baseline)
|
|
134
|
+
return 0;
|
|
135
|
+
let n = 0;
|
|
136
|
+
for (const entities of Object.values(baseline.lexicons)) {
|
|
137
|
+
for (const entity of Object.values(entities))
|
|
138
|
+
n += entity.accepted.length;
|
|
139
|
+
}
|
|
140
|
+
return n;
|
|
141
|
+
}
|
|
142
|
+
// ── Storage (chant/lifecycle orphan branch) ─────────────────────────────────
|
|
143
|
+
/**
|
|
144
|
+
* Read the accepted baseline for an environment. Returns `null` when the branch,
|
|
145
|
+
* the environment, or the file does not exist — every one of which means
|
|
146
|
+
* "nothing accepted yet", the normal state before anyone runs
|
|
147
|
+
* `--update-baseline`.
|
|
148
|
+
*/
|
|
149
|
+
export async function readObservationBaseline(environment, opts) {
|
|
150
|
+
return parseBaseline(await readBlobFromPath(environment, OBSERVATION_BASELINE_FILE, opts));
|
|
151
|
+
}
|
|
152
|
+
/** Write the accepted baseline to the orphan branch. Returns the new commit SHA. */
|
|
153
|
+
export async function writeObservationBaseline(baseline, opts) {
|
|
154
|
+
return writeBlobToPath(baseline.environment, OBSERVATION_BASELINE_FILE, serializeBaseline(baseline), "Accepted observation baseline", opts);
|
|
155
|
+
}
|