@intentius/chant 0.124.13 → 0.124.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +462 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release plan store (ws-055, #2733, part of the chud retirement epic
|
|
3
|
+
* #2715): persists a release plan — the work items and evidence a release
|
|
4
|
+
* ships — to the `chant/lifecycle` orphan branch, content-addressed by the
|
|
5
|
+
* plan's own digest.
|
|
6
|
+
*
|
|
7
|
+
* **Why this exists.** ws-055 (docs/design/decisions/ws-055-dev-model-
|
|
8
|
+
* ledgers.md) decided where a development model's plans live: "a release
|
|
9
|
+
* plan is written content-addressed to `_plans/<digest>.json` on
|
|
10
|
+
* chant/lifecycle, and the release ledger record already names that
|
|
11
|
+
* digest." A `ReleaseRecord.digest` (../lifecycle/release-ledger.ts) is
|
|
12
|
+
* ordinarily an artifact digest; for a release a runner (the studio kit
|
|
13
|
+
* today, chud before it) plans work-item by work-item, that same field
|
|
14
|
+
* *is* the plan's own digest — the release ledger needs no new field to
|
|
15
|
+
* point at it, it already names the plan. Reading a release through the
|
|
16
|
+
* read contract (../workspace/status.ts) resolves that digest to the plan
|
|
17
|
+
* exactly the way it already resolves a build archive digest to a
|
|
18
|
+
* `BuildArchiveManifest` (./build-ledger-store.ts) — this module is that
|
|
19
|
+
* store's plan-shaped sibling, same plumbing, same directory-per-kind
|
|
20
|
+
* convention on the one orphan branch.
|
|
21
|
+
*
|
|
22
|
+
* **Storage.** Reuses `writeBlobToPath`/`readBlobFromPath` (./git.ts) —
|
|
23
|
+
* the identical hash-object -> mktree -> commit-tree -> update-ref
|
|
24
|
+
* pipeline `writeSnapshot`/`persistBuildManifest` already use. Plans live
|
|
25
|
+
* under a fixed top-level `_plans/` directory, a peer of `_builds/` and the
|
|
26
|
+
* per-env directories, never nested inside one — a plan is not env-scoped,
|
|
27
|
+
* it is named by its own content. Per #2524 D7 / #2538, `writeBlobToPath`'s
|
|
28
|
+
* `ledgerDir` already folds a workspace member's own `_members/<member>/`
|
|
29
|
+
* prefix in ahead of `_plans/`, so a member's plans live at
|
|
30
|
+
* `_members/<member>/_plans/<digest>.json` the same way its build records
|
|
31
|
+
* live at `_members/<member>/_builds/` — this module does nothing itself
|
|
32
|
+
* to earn that; it falls out of reusing the shared plumbing.
|
|
33
|
+
*
|
|
34
|
+
* **Content-addressed, keyed by the plan's own `digest`.** One file per
|
|
35
|
+
* plan, `_plans/<digest-with-":"->"_">.json` (`:` is not usable in a git
|
|
36
|
+
* tree entry name the way `readBlobFromPath`'s `<ref>:<path>` spelling
|
|
37
|
+
* reads it back, the same reason `./build-ledger-store.ts` substitutes it
|
|
38
|
+
* for `_builds/`). The digest is computed by whoever plans the release —
|
|
39
|
+
* the release Op, or a runner like the studio kit — not by chant; this
|
|
40
|
+
* module only trusts and stores it, exactly as `persistBuildManifest`
|
|
41
|
+
* trusts a manifest's own `manifestDigest`.
|
|
42
|
+
*
|
|
43
|
+
* **A plan already written is never rewritten (#2733 acceptance).**
|
|
44
|
+
* Unlike `persistBuildManifest`, which writes unconditionally every call
|
|
45
|
+
* (safe only because identical content produces an identical blob and,
|
|
46
|
+
* usually, an identical tree — but still a new, redundant commit on the
|
|
47
|
+
* branch each time), `persistReleasePlan` reads the path first and returns
|
|
48
|
+
* without writing when a plan is already stored under that digest. A plan
|
|
49
|
+
* is immutable by construction (it is named by a hash of its own content),
|
|
50
|
+
* so there is never a reason to overwrite one — only ever a reason to skip
|
|
51
|
+
* the write.
|
|
52
|
+
*/
|
|
53
|
+
import { sortedJsonReplacer } from "../utils.js";
|
|
54
|
+
import { writeBlobToPath, readBlobFromPath, RefCASConflictError } from "./git.js";
|
|
55
|
+
/** Fixed top-level directory on the `chant/lifecycle` orphan branch that holds every persisted release plan — a peer of `_builds/` and the per-env directories, never nested inside one (see module doc for why). */
|
|
56
|
+
const PLANS_DIR = "_plans";
|
|
57
|
+
/** Thrown by `persistReleasePlan` when the plan carries no usable `digest` — a plan can't be content-addressed without one. */
|
|
58
|
+
export class InvalidReleasePlanError extends Error {
|
|
59
|
+
constructor(message) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = "InvalidReleasePlanError";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Turn a `sha256:...`-style digest into a filesystem/git-tree-safe filename stem. */
|
|
65
|
+
function digestToFilenameStem(digest) {
|
|
66
|
+
return digest.replace(/:/g, "_");
|
|
67
|
+
}
|
|
68
|
+
function planFilename(digest) {
|
|
69
|
+
return `${digestToFilenameStem(digest)}.json`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Persist a release plan to the orphan branch, keyed by its own `digest`.
|
|
73
|
+
* Does not push to the remote — call `pushLifecycle` (./git.ts) afterward,
|
|
74
|
+
* the same two-step (`write` then `push`) shape `appendReleaseRecord`/
|
|
75
|
+
* `persistBuildManifest` use, so a caller persisting a plan alongside the
|
|
76
|
+
* release record it names can batch both into one push.
|
|
77
|
+
*
|
|
78
|
+
* Never rewrites a plan already stored under `plan.digest` (#2733
|
|
79
|
+
* acceptance) — reads the path first, and returns `{ commit: null, written:
|
|
80
|
+
* false }` without writing when it is already there. A `RefCASConflictError`
|
|
81
|
+
* from a genuine race (another writer persisted the same digest's plan
|
|
82
|
+
* between this call's read and its write) is treated the same way: the
|
|
83
|
+
* plan is content-addressed, so whatever is already at that path under this
|
|
84
|
+
* digest is authoritative, never overwritten.
|
|
85
|
+
*/
|
|
86
|
+
export async function persistReleasePlan(plan, opts) {
|
|
87
|
+
if (typeof plan.digest !== "string" || plan.digest.length === 0) {
|
|
88
|
+
throw new InvalidReleasePlanError("release plan is missing its own \"digest\" field — a release plan is content-addressed by its own digest");
|
|
89
|
+
}
|
|
90
|
+
const filename = planFilename(plan.digest);
|
|
91
|
+
const existing = await readBlobFromPath(PLANS_DIR, filename, opts);
|
|
92
|
+
if (existing !== null)
|
|
93
|
+
return { commit: null, written: false };
|
|
94
|
+
const json = JSON.stringify(plan, sortedJsonReplacer);
|
|
95
|
+
try {
|
|
96
|
+
const commit = await writeBlobToPath(PLANS_DIR, filename, json, "Release plan", { ...opts, expectPriorPathSha: null });
|
|
97
|
+
return { commit, written: true };
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (err instanceof RefCASConflictError)
|
|
101
|
+
return { commit: null, written: false };
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Read a persisted release plan back by its own digest — the same digest a
|
|
107
|
+
* `ReleaseRecord.digest` names. Returns `null` when no plan was ever
|
|
108
|
+
* persisted under that digest (never throws — most releases carry no plan
|
|
109
|
+
* at all, and reading one for status is a normal, expected miss), and when
|
|
110
|
+
* the stored blob fails to parse as JSON.
|
|
111
|
+
*
|
|
112
|
+
* `prefix` lets a multi-member reader (../workspace/status.ts) resolve a
|
|
113
|
+
* specific member's plan directory directly, the same way
|
|
114
|
+
* `readReleaseLedgerLines` is handed an already-member-prefixed path there
|
|
115
|
+
* — `cwd` alone can't do it, since one status read walks every member from
|
|
116
|
+
* one process without changing directory per member.
|
|
117
|
+
*/
|
|
118
|
+
export async function readReleasePlan(digest, opts) {
|
|
119
|
+
const dir = `${opts?.prefix ?? ""}${PLANS_DIR}`;
|
|
120
|
+
const content = await readBlobFromPath(dir, planFilename(digest), opts);
|
|
121
|
+
if (!content)
|
|
122
|
+
return null;
|
|
123
|
+
try {
|
|
124
|
+
return JSON.parse(content);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Receipt planning (#1832, epic #1703) — the plan half of the effect-receipt
|
|
3
|
+
* contract.
|
|
4
|
+
*
|
|
5
|
+
* A receipt is declared, diffed, and observed like any resource, but it is
|
|
6
|
+
* OBSERVE-ONLY to the generic apply path: the `effect()` step (#1834) is the
|
|
7
|
+
* sole writer, on success, last (epic decision log, item 3). The plan's job is
|
|
8
|
+
* therefore not "create the receipt" — it is "say whether the effect will
|
|
9
|
+
* fire". This module compares each declared receipt's live value against its
|
|
10
|
+
* resolved expectation and classifies:
|
|
11
|
+
*
|
|
12
|
+
* - absent or differing → an `effect` entry ("effect will fire") — including
|
|
13
|
+
* the crash-between-effect-and-write case, where a stale or missing receipt
|
|
14
|
+
* re-proposes the fire on the next plan. That re-proposal is the whole
|
|
15
|
+
* at-least-once guarantee; anything that stamps the receipt on the generic
|
|
16
|
+
* path silently converts it into never.
|
|
17
|
+
* - equal → `noop` — the effect has run for these inputs; the plan is clean.
|
|
18
|
+
* - unobservable → `unobserved`, loudly. A receipt nobody could read is a
|
|
19
|
+
* hole in the plan, never a clean row.
|
|
20
|
+
* - a reference input that cannot resolve at plan time → an `effect` entry
|
|
21
|
+
* with an "unresolved input" note, never a guessed digest. The effect step
|
|
22
|
+
* resolves again at run and decides there.
|
|
23
|
+
*
|
|
24
|
+
* A receipt name is also stripped out of whatever the generic change-set
|
|
25
|
+
* classification proposed for it ({@link mergeReceiptEntries}): a receipt is
|
|
26
|
+
* never a `create`, never an `update`, and never a `delete`/`adopt` prune
|
|
27
|
+
* candidate — the entries built here are the only rows a receipt gets.
|
|
28
|
+
*
|
|
29
|
+
* Pure: no I/O. Live state arrives as {@link ReceiptReading}s the caller
|
|
30
|
+
* built from its observations; reference inputs resolve through the
|
|
31
|
+
* caller-supplied resolver ({@link observedValueResolver} builds one over the
|
|
32
|
+
* plan's merged observed values).
|
|
33
|
+
*/
|
|
34
|
+
import { AttrRef } from "../attrref.js";
|
|
35
|
+
import { EXISTENCE_EXPECTATION, resolveReceiptExpectation, } from "../effect-receipt.js";
|
|
36
|
+
/**
|
|
37
|
+
* The attribute a materialized receipt's live value is read from. A lexicon
|
|
38
|
+
* receipt row's observation (#1835) maps the stored value onto
|
|
39
|
+
* `attributes[RECEIPT_VALUE_ATTRIBUTE]`; `Value` is accepted as a fallback for
|
|
40
|
+
* observations that keep the provider's own casing (SSM's `Value`).
|
|
41
|
+
*/
|
|
42
|
+
export const RECEIPT_VALUE_ATTRIBUTE = "value";
|
|
43
|
+
/** Read a live receipt's stored value off an observation's attributes. */
|
|
44
|
+
export function readReceiptValue(attributes) {
|
|
45
|
+
if (!attributes)
|
|
46
|
+
return undefined;
|
|
47
|
+
if (RECEIPT_VALUE_ATTRIBUTE in attributes)
|
|
48
|
+
return attributes[RECEIPT_VALUE_ATTRIBUTE];
|
|
49
|
+
return attributes["Value"];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A {@link ReceiptInputResolver} over the plan's merged observed values: an
|
|
53
|
+
* attr-ref resolves to the referenced entity's observed attribute. Anything
|
|
54
|
+
* that is not among the observed values throws — which `planReceipts` renders
|
|
55
|
+
* as an effect-will-fire entry with an "unresolved input" note rather than a
|
|
56
|
+
* guessed expectation.
|
|
57
|
+
*/
|
|
58
|
+
export function observedValueResolver(resources) {
|
|
59
|
+
return (ref, path) => {
|
|
60
|
+
if (ref instanceof AttrRef) {
|
|
61
|
+
const entity = ref.getLogicalName();
|
|
62
|
+
if (!entity) {
|
|
63
|
+
throw new Error(`unresolved input at ${path}: attr-ref carries no logical name`);
|
|
64
|
+
}
|
|
65
|
+
const attrs = resources[entity]?.attributes;
|
|
66
|
+
if (!attrs || !(ref.attribute in attrs)) {
|
|
67
|
+
throw new Error(`unresolved input at ${path}: ${entity}.${ref.attribute} is not among the observed values`);
|
|
68
|
+
}
|
|
69
|
+
return attrs[ref.attribute];
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`unresolved input at ${path}: reference cannot resolve at plan time`);
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Classify every declared receipt into its change-set entry. See the module
|
|
76
|
+
* doc for the classification; entries come back sorted by name.
|
|
77
|
+
*/
|
|
78
|
+
export function planReceipts(receipts, readings, resolver) {
|
|
79
|
+
const entries = [];
|
|
80
|
+
for (const [name, receipt] of receipts) {
|
|
81
|
+
const reading = readings.get(name);
|
|
82
|
+
const base = {
|
|
83
|
+
name,
|
|
84
|
+
type: reading?.type ?? receipt.entityType,
|
|
85
|
+
...(reading?.lexicon ? { lexicon: reading.lexicon } : {}),
|
|
86
|
+
...(reading?.physicalId ? { physicalId: reading.physicalId } : {}),
|
|
87
|
+
effect: receipt.effect,
|
|
88
|
+
ownership: "unknown",
|
|
89
|
+
};
|
|
90
|
+
const evidence = {
|
|
91
|
+
declared: true,
|
|
92
|
+
inSnapshot: false,
|
|
93
|
+
live: reading?.present ?? false,
|
|
94
|
+
observed: reading?.observed ?? false,
|
|
95
|
+
};
|
|
96
|
+
if (!reading) {
|
|
97
|
+
// No loaded lexicon materializes or observes this receipt — a hole,
|
|
98
|
+
// said loudly, never a silently clean row (#1089's tri-state).
|
|
99
|
+
entries.push({
|
|
100
|
+
...base,
|
|
101
|
+
action: "unobserved",
|
|
102
|
+
evidence,
|
|
103
|
+
unobservedReason: "unsupported-kind",
|
|
104
|
+
unobservedDetail: `no loaded lexicon materializes or observes this receipt — ` +
|
|
105
|
+
`whether effect "${receipt.effect}" has run is unknown, not clean`,
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (!reading.observed) {
|
|
110
|
+
entries.push({
|
|
111
|
+
...base,
|
|
112
|
+
action: "unobserved",
|
|
113
|
+
evidence,
|
|
114
|
+
unobservedReason: reading.unobservedReason ?? "read-failed",
|
|
115
|
+
...(reading.unobservedDetail ? { unobservedDetail: reading.unobservedDetail } : {}),
|
|
116
|
+
});
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// Resolve the expectation. A reference that cannot resolve at plan time
|
|
120
|
+
// is never guessed around: the fire is proposed with the note, and the
|
|
121
|
+
// effect step resolves again at run (epic decision log, item 5).
|
|
122
|
+
let expectation;
|
|
123
|
+
let unresolved;
|
|
124
|
+
try {
|
|
125
|
+
expectation = resolveReceiptExpectation(receipt, resolver);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
unresolved = err instanceof Error ? err.message : String(err);
|
|
129
|
+
}
|
|
130
|
+
if (!reading.present) {
|
|
131
|
+
entries.push({
|
|
132
|
+
...base,
|
|
133
|
+
action: "effect",
|
|
134
|
+
evidence,
|
|
135
|
+
effectReason: "receipt-absent",
|
|
136
|
+
effectDetail: `receipt confirmed absent — no run of "${receipt.effect}" is recorded` +
|
|
137
|
+
(unresolved ? ` (${unresolved})` : ""),
|
|
138
|
+
});
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (expectation === undefined) {
|
|
142
|
+
entries.push({
|
|
143
|
+
...base,
|
|
144
|
+
action: "effect",
|
|
145
|
+
evidence,
|
|
146
|
+
effectReason: "unresolved-input",
|
|
147
|
+
effectDetail: unresolved,
|
|
148
|
+
});
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (reading.value === expectation) {
|
|
152
|
+
entries.push({ ...base, action: "noop", evidence });
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
entries.push({
|
|
156
|
+
...base,
|
|
157
|
+
action: "effect",
|
|
158
|
+
evidence,
|
|
159
|
+
effectReason: "receipt-stale",
|
|
160
|
+
effectDetail: receipt.flavor === "existence"
|
|
161
|
+
? `live value ${fmtValue(reading.value)} is not the existence marker "${EXISTENCE_EXPECTATION}"`
|
|
162
|
+
: `live value ${fmtValue(reading.value)} differs from expected ${expectation}`,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
166
|
+
return entries;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Replace whatever the generic classification proposed for the receipts with
|
|
170
|
+
* the receipt entries built by {@link planReceipts}, in place.
|
|
171
|
+
*
|
|
172
|
+
* This is the plan-side write-exclusion (#1832): the generic change set,
|
|
173
|
+
* knowing nothing about receipts, classifies a declared-but-absent receipt as
|
|
174
|
+
* `create` and an undeclared-but-live one as `delete`/`adopt` — proposals the
|
|
175
|
+
* generic apply path must never act on for a receipt, and prune candidacy a
|
|
176
|
+
* receipt must never have. Every entry named like a receipt is dropped and
|
|
177
|
+
* the receipt's own entries stand in.
|
|
178
|
+
*/
|
|
179
|
+
export function mergeReceiptEntries(cs, receipts, receiptEntries) {
|
|
180
|
+
if (receipts.size === 0)
|
|
181
|
+
return cs;
|
|
182
|
+
cs.entries = cs.entries.filter((e) => !receipts.has(e.name));
|
|
183
|
+
cs.entries.push(...receiptEntries);
|
|
184
|
+
cs.entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
185
|
+
return cs;
|
|
186
|
+
}
|
|
187
|
+
function fmtValue(v) {
|
|
188
|
+
if (v === undefined)
|
|
189
|
+
return "<unset>";
|
|
190
|
+
const s = typeof v === "string" ? v : JSON.stringify(v);
|
|
191
|
+
return s.length > 72 ? `${s.slice(0, 69)}...` : s;
|
|
192
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release ledger — the recorded half of build & deploy observability (#568,
|
|
3
|
+
* epic #551 "Build & deploy observability").
|
|
4
|
+
*
|
|
5
|
+
* chant already has the *live-truth* half: ownership markers stamp stack/env
|
|
6
|
+
* identity on live resources, `lifecycle diff --live` / `lifecycle plan`
|
|
7
|
+
* compare declared vs live, and snapshots on `chant/lifecycle` give a
|
|
8
|
+
* forensic timeline (see ./snapshot.ts, ./live-diff.ts, ./change-set.ts).
|
|
9
|
+
* What was missing is the *record* half: "what we recorded deploying",
|
|
10
|
+
* independent of whether the thing is still running.
|
|
11
|
+
*
|
|
12
|
+
* A release record is immutable and append-only: each deploy appends one line
|
|
13
|
+
* to `<env>/releases.jsonl` on the `chant/lifecycle` orphan branch (see
|
|
14
|
+
* ./git.ts's `appendReleaseRecord`/`readReleaseLedger`) — never rewritten,
|
|
15
|
+
* never replaced in place, mirroring how the snapshot branch itself is
|
|
16
|
+
* treated as observational evidence rather than a mutable state file. The
|
|
17
|
+
* append-only property is what makes "which build was in staging on
|
|
18
|
+
* Tuesday" answerable months later even after staging has moved on to a
|
|
19
|
+
* dozen newer digests.
|
|
20
|
+
*
|
|
21
|
+
* The binding key is the artifact **digest** (`sha256:...`), the same
|
|
22
|
+
* identity `BuildArchive` manifests and `publish-image`/`load-image-on-host`
|
|
23
|
+
* promote by (see ../components/verbs/build-archive.ts,
|
|
24
|
+
* ../components/verbs/publish.ts). Because publish promotes by digest never
|
|
25
|
+
* rebuilding, the same identity threads build → dev → staging → prod, so
|
|
26
|
+
* "which build is in prod, and is it the one tested in staging" is a
|
|
27
|
+
* straightforward digest comparison over this ledger — never a guess through
|
|
28
|
+
* CI logs.
|
|
29
|
+
*/
|
|
30
|
+
import { sortedJsonReplacer } from "../utils.js";
|
|
31
|
+
import { warnOnLegacyDigests, withoutReadFlags } from "./legacy-digest.js";
|
|
32
|
+
import { appendReleaseRecordLine, readReleaseLedgerLines, listLedgerEnvironments as gitListLedgerEnvironments } from "./git.js";
|
|
33
|
+
import { parseReleaseLedger, validateReleaseRecord } from "./release-read.js";
|
|
34
|
+
// The pure readers live apart, so a bundle can import them without git (#3865).
|
|
35
|
+
export { validateReleaseRecord, parseReleaseLedger, releaseLedgerLines, readReleaseRecords, listReleaseEnvironmentsOn } from "./release-read.js";
|
|
36
|
+
/** Thrown by `appendReleaseRecord` when the record is missing a required field — a release record can never be recorded partially, since it is never editable afterward. */
|
|
37
|
+
export class InvalidReleaseRecordError extends Error {
|
|
38
|
+
constructor(missing) {
|
|
39
|
+
super(`release record is missing required field(s): ${missing.join(", ")}`);
|
|
40
|
+
this.missing = missing;
|
|
41
|
+
this.name = "InvalidReleaseRecordError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resolve a run id and its origin from the same environment, in one step, so
|
|
46
|
+
* the two cannot skew (#2045). Resolution order mirrors what
|
|
47
|
+
* `chant components release` always did — explicit id, then
|
|
48
|
+
* `GITHUB_RUN_ID`, then `CI_PIPELINE_ID`, then a locally minted
|
|
49
|
+
* `local-<ms>` — but now each source also names its id space:
|
|
50
|
+
*
|
|
51
|
+
* - the GitHub path records `repo` (`GITHUB_REPOSITORY`) and builds the run
|
|
52
|
+
* `url` from `GITHUB_SERVER_URL` — which also makes a Forgejo instance's
|
|
53
|
+
* runs resolvable, since Forgejo Actions implements the same env contract;
|
|
54
|
+
* - the GitLab path records `repo` (`CI_PROJECT_PATH`) and takes
|
|
55
|
+
* `CI_PIPELINE_URL` verbatim;
|
|
56
|
+
* - the local mint says `local` in a field instead of only in the id's
|
|
57
|
+
* spelling.
|
|
58
|
+
*
|
|
59
|
+
* An explicit id still gets an origin when it matches the id the environment
|
|
60
|
+
* itself is advertising (a CI job passing `--run-id $GITHUB_RUN_ID`);
|
|
61
|
+
* otherwise the caller's id is recorded without one — guessing an origin the
|
|
62
|
+
* caller did not state would be exactly the inference this field exists to
|
|
63
|
+
* remove.
|
|
64
|
+
*/
|
|
65
|
+
export function resolveRunId(explicit, env = process.env) {
|
|
66
|
+
const githubOrigin = (id) => ({
|
|
67
|
+
forge: "github",
|
|
68
|
+
...(env.GITHUB_REPOSITORY ? { repo: env.GITHUB_REPOSITORY } : {}),
|
|
69
|
+
...(env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY
|
|
70
|
+
? { url: `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${id}` }
|
|
71
|
+
: {}),
|
|
72
|
+
});
|
|
73
|
+
const gitlabOrigin = () => ({
|
|
74
|
+
forge: "gitlab",
|
|
75
|
+
...(env.CI_PROJECT_PATH ? { repo: env.CI_PROJECT_PATH } : {}),
|
|
76
|
+
...(env.CI_PIPELINE_URL ? { url: env.CI_PIPELINE_URL } : {}),
|
|
77
|
+
});
|
|
78
|
+
if (explicit) {
|
|
79
|
+
if (env.GITHUB_RUN_ID && explicit === env.GITHUB_RUN_ID)
|
|
80
|
+
return { runId: explicit, runOrigin: githubOrigin(explicit) };
|
|
81
|
+
if (env.CI_PIPELINE_ID && explicit === env.CI_PIPELINE_ID)
|
|
82
|
+
return { runId: explicit, runOrigin: gitlabOrigin() };
|
|
83
|
+
return { runId: explicit };
|
|
84
|
+
}
|
|
85
|
+
if (env.GITHUB_RUN_ID)
|
|
86
|
+
return { runId: env.GITHUB_RUN_ID, runOrigin: githubOrigin(env.GITHUB_RUN_ID) };
|
|
87
|
+
if (env.CI_PIPELINE_ID)
|
|
88
|
+
return { runId: env.CI_PIPELINE_ID, runOrigin: gitlabOrigin() };
|
|
89
|
+
return { runId: `local-${Date.now()}`, runOrigin: { forge: "local" } };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Append one immutable release record to the `<env>` ledger on the
|
|
93
|
+
* `chant/lifecycle` orphan branch. Throws `InvalidReleaseRecordError` before
|
|
94
|
+
* any git operation runs if a required field is missing — never partially
|
|
95
|
+
* records, since nothing about a release record is editable after the fact.
|
|
96
|
+
*
|
|
97
|
+
* Does not push to the remote; call `pushLifecycle` (./git.ts) afterward, the
|
|
98
|
+
* same two-step (`write` then `push`) shape `takeSnapshot` (./snapshot.ts)
|
|
99
|
+
* uses, so a caller recording several releases in one run can batch the push.
|
|
100
|
+
*/
|
|
101
|
+
export async function appendReleaseRecord(input, opts) {
|
|
102
|
+
const missing = validateReleaseRecord(input);
|
|
103
|
+
if (missing.length > 0)
|
|
104
|
+
throw new InvalidReleaseRecordError(missing);
|
|
105
|
+
// `flags` are read-side only (#2514); a record passed back in never persists them.
|
|
106
|
+
const record = { version: 1, ...withoutReadFlags(input) };
|
|
107
|
+
const json = JSON.stringify(record, sortedJsonReplacer);
|
|
108
|
+
const commit = await appendReleaseRecordLine(record.env, json, opts);
|
|
109
|
+
return { commit, record };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Read every release record for `environment`, oldest first. Malformed lines
|
|
113
|
+
* (a hand-edited or corrupted ledger) are skipped rather than throwing, since
|
|
114
|
+
* a status query should degrade gracefully rather than fail outright on one
|
|
115
|
+
* bad line — but each skip is reported so callers/tests can surface it.
|
|
116
|
+
*/
|
|
117
|
+
export async function readReleaseLedger(environment, opts) {
|
|
118
|
+
const { records, malformed } = parseReleaseLedger(await readReleaseLedgerLines(environment, opts));
|
|
119
|
+
// chant #2514 — say once that this ledger holds values in the old form.
|
|
120
|
+
warnOnLegacyDigests(records.flatMap((r) => [r.digest, r.manifestDigest, r.inputDigest]), "release ledger", opts?.cwd);
|
|
121
|
+
return { records, malformed };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* List every environment that has release records on the orphan branch. With
|
|
125
|
+
* `member` or `ledgerPrefix` (#3865) it lists that workspace member's, from
|
|
126
|
+
* wherever `cwd` is; without either, the member `cwd` resolves to.
|
|
127
|
+
*/
|
|
128
|
+
export async function listReleaseEnvironments(opts) {
|
|
129
|
+
return gitListLedgerEnvironments(opts);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The latest release record per component in `records` — "what we recorded
|
|
133
|
+
* deploying" reduces to one row per component by taking the most recent
|
|
134
|
+
* `timestamp` (ties broken by ledger order, i.e. later append wins), since
|
|
135
|
+
* a component may have many historical records in one environment's ledger.
|
|
136
|
+
*/
|
|
137
|
+
export function latestPerComponent(records) {
|
|
138
|
+
const latest = new Map();
|
|
139
|
+
for (const record of records) {
|
|
140
|
+
const current = latest.get(record.component);
|
|
141
|
+
if (!current || record.timestamp >= current.timestamp) {
|
|
142
|
+
latest.set(record.component, record);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return latest;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Find every release record across `records` that references `digest` — the
|
|
149
|
+
* cross-environment query "is the build in prod the one tested in staging"
|
|
150
|
+
* reduces to: read both envs' ledgers, then check whether the same digest
|
|
151
|
+
* appears in each. Sorted oldest first, matching ledger order.
|
|
152
|
+
*/
|
|
153
|
+
export function recordsForDigest(records, digest) {
|
|
154
|
+
return records.filter((r) => r.digest === digest);
|
|
155
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading release records without git (#3865). The parsing and the
|
|
3
|
+
* environment listing of `release-ledger.ts`, over a {@link LedgerReadPort}
|
|
4
|
+
* instead of a checkout, so a product bundles them in one file
|
|
5
|
+
* (`release-read-bundle.test.ts` holds the import graph). Pass
|
|
6
|
+
* `gitLedgerReadPort({ member })` from `./git.ts` to read a workspace member's
|
|
7
|
+
* ledger from a checkout, or a port of your own.
|
|
8
|
+
*
|
|
9
|
+
* `release-ledger.ts` reads through these too; its `readReleaseLedger` and
|
|
10
|
+
* `listReleaseEnvironments` also take `member` or `ledgerPrefix`.
|
|
11
|
+
*/
|
|
12
|
+
import { flagLegacyDigest } from "./legacy-digest.js";
|
|
13
|
+
/** Required, non-empty-string fields every `ReleaseRecord` must carry. */
|
|
14
|
+
const REQUIRED_STRING_FIELDS = ["component", "env", "digest", "gitSha", "runId", "timestamp", "actor"];
|
|
15
|
+
/** The required fields a release record lacks as non-empty strings. */
|
|
16
|
+
export function validateReleaseRecord(record) {
|
|
17
|
+
const missing = [];
|
|
18
|
+
for (const field of REQUIRED_STRING_FIELDS) {
|
|
19
|
+
const value = record[field];
|
|
20
|
+
if (typeof value !== "string" || value.length === 0)
|
|
21
|
+
missing.push(field);
|
|
22
|
+
}
|
|
23
|
+
return missing;
|
|
24
|
+
}
|
|
25
|
+
/** The lines of a `releases.jsonl` file: trimmed, blanks dropped. */
|
|
26
|
+
export function releaseLedgerLines(text) {
|
|
27
|
+
return text ? text.split("\n").map((line) => line.trim()).filter(Boolean) : [];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse release ledger lines, oldest first. A malformed line is counted and
|
|
31
|
+
* skipped; a digest recorded by the old 32-bit hash reads back flagged
|
|
32
|
+
* (#2514), never re-keyed.
|
|
33
|
+
*/
|
|
34
|
+
export function parseReleaseLedger(lines) {
|
|
35
|
+
const records = [];
|
|
36
|
+
let malformed = 0;
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
try {
|
|
39
|
+
const parsed = JSON.parse(line);
|
|
40
|
+
if (parsed === null || typeof parsed !== "object" || validateReleaseRecord(parsed).length > 0) {
|
|
41
|
+
malformed++;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
records.push(flagLegacyDigest(parsed, [parsed.digest, parsed.manifestDigest, parsed.inputDigest]));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
malformed++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return { records, malformed };
|
|
51
|
+
}
|
|
52
|
+
/** Every release record of `environment` the port holds, oldest first. */
|
|
53
|
+
export async function readReleaseRecords(port, environment) {
|
|
54
|
+
return parseReleaseLedger(releaseLedgerLines(await port.read(environment, "releases.jsonl")));
|
|
55
|
+
}
|
|
56
|
+
/** The environments with a `releases.jsonl`, sorted: the port's root directories that hold one. */
|
|
57
|
+
export async function listReleaseEnvironmentsOn(port) {
|
|
58
|
+
const envs = [];
|
|
59
|
+
for (const name of await port.trees()) {
|
|
60
|
+
if (await port.read(name, "releases.jsonl"))
|
|
61
|
+
envs.push(name);
|
|
62
|
+
}
|
|
63
|
+
return envs.sort();
|
|
64
|
+
}
|