@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
|
@@ -271,7 +271,7 @@ export const lifecyclePlanChangeSetContract = activityContract(
|
|
|
271
271
|
|
|
272
272
|
export const readChangeSetPartContract = activityContract(
|
|
273
273
|
"readChangeSetPart",
|
|
274
|
-
z.strictObject({ member: z.string(), planner: z.enum(["chant", "warden"]), file: z.string(), lexicon: z.string().optional() }),
|
|
274
|
+
z.strictObject({ member: z.string(), planner: z.enum(["chant", "warden", "sql"]), file: z.string(), lexicon: z.string().optional() }),
|
|
275
275
|
z.object({ part: changeSetPart }),
|
|
276
276
|
);
|
|
277
277
|
|
|
@@ -25,6 +25,7 @@ import { promisify } from "node:util";
|
|
|
25
25
|
import {
|
|
26
26
|
composeChangeSet as compose,
|
|
27
27
|
lifecyclePlanPart,
|
|
28
|
+
readChangeSetPartFile,
|
|
28
29
|
reconcilePlanPart,
|
|
29
30
|
type ChangeSetDocument,
|
|
30
31
|
type ChangeSetPart,
|
|
@@ -87,8 +88,12 @@ export async function lifecyclePlanChangeSet(args: LifecyclePlanChangeSetArgs, s
|
|
|
87
88
|
|
|
88
89
|
export interface ReadChangeSetPartArgs {
|
|
89
90
|
member: string;
|
|
90
|
-
/**
|
|
91
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Which planner wrote the file: `chant` (`lifecycle plan --json`), `warden`
|
|
93
|
+
* (its reconcile change sets), or `sql` (a part the sql lexicon's
|
|
94
|
+
* `change-set` adapters produced, written as JSON).
|
|
95
|
+
*/
|
|
96
|
+
planner: "chant" | "warden" | "sql";
|
|
92
97
|
/** The plan file, relative to the current directory. */
|
|
93
98
|
file: string;
|
|
94
99
|
/** The lexicon the entries belong to, when the plan does not say. */
|
|
@@ -98,7 +103,8 @@ export interface ReadChangeSetPartArgs {
|
|
|
98
103
|
/**
|
|
99
104
|
* A plan another step or job wrote to a file, as a member's part. A warden
|
|
100
105
|
* plan is the reconcile `ChangeSet` (`@intentius/chant/reconcile`), or an
|
|
101
|
-
* array of them, one per cycle and org.
|
|
106
|
+
* array of them, one per cycle and org. A sql plan is already a part
|
|
107
|
+
* (`@intentius/chant-lexicon-sql/change-set`), renamed to `member` here.
|
|
102
108
|
*/
|
|
103
109
|
export async function readChangeSetPart(args: ReadChangeSetPartArgs): Promise<ChangeSetPartResult> {
|
|
104
110
|
const plan: unknown = JSON.parse(readFileSync(resolve(args.file), "utf-8"));
|
|
@@ -108,6 +114,8 @@ export async function readChangeSetPart(args: ReadChangeSetPartArgs): Promise<Ch
|
|
|
108
114
|
return { part: lifecyclePlanPart({ member: args.member, plan: plan as LifecycleChangeSet, ...lexicon }) };
|
|
109
115
|
case "warden":
|
|
110
116
|
return { part: reconcilePlanPart({ member: args.member, plan: plan as ReconcileChangeSet | ReconcileChangeSet[], ...lexicon }) };
|
|
117
|
+
case "sql":
|
|
118
|
+
return { part: readChangeSetPartFile(plan, "sql", args.member, args.lexicon) };
|
|
111
119
|
default:
|
|
112
120
|
throw new Error(`readChangeSetPart: no adapter for planner ${String(args.planner)}; terraform-family plans come from terraformPlan's changeSet`);
|
|
113
121
|
}
|
|
@@ -317,6 +317,8 @@ describe("lexiconUpgrade issue mode", () => {
|
|
|
317
317
|
|
|
318
318
|
vi.stubEnv("GITHUB_REPOSITORY", "acme/infra");
|
|
319
319
|
vi.stubEnv("GITHUB_API_URL", "");
|
|
320
|
+
// A Forgejo run, since CHANT_FORGEJO_TOKEN is only read there (#3807).
|
|
321
|
+
vi.stubEnv("FORGEJO_ACTIONS", "true");
|
|
320
322
|
// The cross-instance case (#2320): a Forgejo token that must outrank the
|
|
321
323
|
// job's own `github.token`, on the path that used to forward neither.
|
|
322
324
|
vi.stubEnv("CHANT_FORGEJO_TOKEN", "forgejo-cross-instance");
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
ghCredentialEnv,
|
|
22
22
|
githubShapedForgeFrom,
|
|
23
23
|
} from "./reconcile";
|
|
24
|
+
import { FORGE_TOKEN_ORDER } from "../../pr-forge";
|
|
24
25
|
|
|
25
26
|
// ── The `gh` stub (chant #2291) ──────────────────────────────────────────────
|
|
26
27
|
//
|
|
@@ -338,12 +339,46 @@ describe("commentTokenFrom (#2291)", () => {
|
|
|
338
339
|
expect(commentTokenFrom({ GITHUB_TOKEN: "ghs_y" })).toEqual({ value: "ghs_y", source: "GITHUB_TOKEN" });
|
|
339
340
|
});
|
|
340
341
|
|
|
341
|
-
test("CHANT_FORGEJO_TOKEN wins
|
|
342
|
+
test("on Forgejo CHANT_FORGEJO_TOKEN wins, then FORGEJO_TOKEN, then GH_TOKEN, then GITHUB_TOKEN", () => {
|
|
343
|
+
const base = { FORGEJO_ACTIONS: "true" };
|
|
344
|
+
const all = { CHANT_FORGEJO_TOKEN: "a", FORGEJO_TOKEN: "b", GH_TOKEN: "c", GITHUB_TOKEN: "d" };
|
|
345
|
+
expect(commentTokenFrom({ ...base, ...all })?.source).toBe("CHANT_FORGEJO_TOKEN");
|
|
346
|
+
expect(commentTokenFrom({ ...base, FORGEJO_TOKEN: "b", GH_TOKEN: "c", GITHUB_TOKEN: "d" })?.source).toBe("FORGEJO_TOKEN");
|
|
347
|
+
expect(commentTokenFrom({ ...base, GH_TOKEN: "c", GITHUB_TOKEN: "d" })?.source).toBe("GH_TOKEN");
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
test("a /api/v1 API base is Forgejo even without FORGEJO_ACTIONS", () => {
|
|
342
351
|
expect(
|
|
343
|
-
commentTokenFrom({
|
|
352
|
+
commentTokenFrom({ GITHUB_API_URL: "https://f.example/api/v1", CHANT_FORGEJO_TOKEN: "a", GH_TOKEN: "b" })?.source,
|
|
344
353
|
).toBe("CHANT_FORGEJO_TOKEN");
|
|
345
354
|
});
|
|
346
355
|
|
|
356
|
+
test("on GitHub CHANT_GITHUB_TOKEN wins, then GH_TOKEN, then GITHUB_TOKEN (#3807)", () => {
|
|
357
|
+
const base = { GITHUB_ACTIONS: "true" };
|
|
358
|
+
expect(commentTokenFrom({ ...base, CHANT_GITHUB_TOKEN: "a", GH_TOKEN: "b", GITHUB_TOKEN: "c" })?.source).toBe("CHANT_GITHUB_TOKEN");
|
|
359
|
+
expect(commentTokenFrom({ ...base, GH_TOKEN: "b", GITHUB_TOKEN: "c" })?.source).toBe("GH_TOKEN");
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
test("on GitHub CHANT_FORGEJO_TOKEN and FORGEJO_TOKEN are not read (#3807)", () => {
|
|
363
|
+
expect(
|
|
364
|
+
commentTokenFrom({ GITHUB_ACTIONS: "true", CHANT_FORGEJO_TOKEN: "a", FORGEJO_TOKEN: "b", GH_TOKEN: "c" }),
|
|
365
|
+
).toEqual({ value: "c", source: "GH_TOKEN" });
|
|
366
|
+
expect(commentTokenFrom({ GITHUB_ACTIONS: "true", CHANT_FORGEJO_TOKEN: "a" })).toBeUndefined();
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
test("agrees with FORGE_TOKEN_ORDER for each forge", () => {
|
|
370
|
+
for (const [kind, env] of [
|
|
371
|
+
["github", { GITHUB_ACTIONS: "true" }],
|
|
372
|
+
["forgejo", { FORGEJO_ACTIONS: "true" }],
|
|
373
|
+
] as const) {
|
|
374
|
+
for (const name of FORGE_TOKEN_ORDER[kind]) {
|
|
375
|
+
const rest = FORGE_TOKEN_ORDER[kind].slice(FORGE_TOKEN_ORDER[kind].indexOf(name));
|
|
376
|
+
const vars = Object.fromEntries(rest.map((n) => [n, `v-${n}`]));
|
|
377
|
+
expect(commentTokenFrom({ ...env, ...vars })?.source).toBe(name);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
|
|
347
382
|
test("no token at all is undefined rather than an empty value", () => {
|
|
348
383
|
expect(commentTokenFrom({})).toBeUndefined();
|
|
349
384
|
expect(commentTokenFrom({ GH_TOKEN: "", GITHUB_TOKEN: "" })).toBeUndefined();
|
|
@@ -469,6 +504,31 @@ describe("reconcilePr comment mode posts through the forge client (#2291, #3757)
|
|
|
469
504
|
}
|
|
470
505
|
});
|
|
471
506
|
|
|
507
|
+
test("on a GitHub run CHANT_FORGEJO_TOKEN is ignored and GH_TOKEN is sent (#3807)", async () => {
|
|
508
|
+
stubPrEnv("https://api.github.com");
|
|
509
|
+
vi.stubEnv("GITHUB_ACTIONS", "true");
|
|
510
|
+
vi.stubEnv("CHANT_FORGEJO_TOKEN", "forgejo-token-set-on-github");
|
|
511
|
+
try {
|
|
512
|
+
await reconcilePr({ env: "app", mode: "comment", body: "the plan" });
|
|
513
|
+
expect(forgeCalls.length).toBeGreaterThan(0);
|
|
514
|
+
for (const call of forgeCalls) expect(call.authorization).toBe("Bearer forgejo-actions-token");
|
|
515
|
+
} finally {
|
|
516
|
+
vi.unstubAllEnvs();
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
test("on a GitHub run CHANT_GITHUB_TOKEN outranks GH_TOKEN (#3807)", async () => {
|
|
521
|
+
stubPrEnv("https://api.github.com");
|
|
522
|
+
vi.stubEnv("GITHUB_ACTIONS", "true");
|
|
523
|
+
vi.stubEnv("CHANT_GITHUB_TOKEN", "other-github-token");
|
|
524
|
+
try {
|
|
525
|
+
await reconcilePr({ env: "app", mode: "comment", body: "the plan" });
|
|
526
|
+
for (const call of forgeCalls) expect(call.authorization).toBe("Bearer other-github-token");
|
|
527
|
+
} finally {
|
|
528
|
+
vi.unstubAllEnvs();
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
|
|
472
532
|
test("FORGEJO_ACTIONS marks a Forgejo run whatever its API base looks like", async () => {
|
|
473
533
|
stubPrEnv("https://code.example/api/forgejo");
|
|
474
534
|
vi.stubEnv("FORGEJO_ACTIONS", "true");
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { exec } from "node:child_process";
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import { promisify } from "node:util";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
detectForge,
|
|
6
|
+
FORGE_TOKEN_ORDER,
|
|
7
|
+
ForgeApiError,
|
|
8
|
+
forgejoForge,
|
|
9
|
+
githubForge,
|
|
10
|
+
type ForgeFetch,
|
|
11
|
+
type GithubShapedForge,
|
|
12
|
+
} from "../../pr-forge";
|
|
5
13
|
import { ghHostEnv } from "./gh-host";
|
|
6
14
|
import { restPullRequestForge } from "./forge-pull-request";
|
|
7
15
|
|
|
@@ -49,9 +57,11 @@ const execAsync = promisify(exec);
|
|
|
49
57
|
* of opening a second one.
|
|
50
58
|
*
|
|
51
59
|
* Both modes resolve the GitHub/Forgejo credential the same way, through
|
|
52
|
-
* {@link commentTokenFrom}
|
|
53
|
-
*
|
|
54
|
-
*
|
|
60
|
+
* {@link commentTokenFrom}, in pr-forge's `FORGE_TOKEN_ORDER` for the forge the
|
|
61
|
+
* run is on (chant #2320, #3807): `CHANT_GITHUB_TOKEN`, `GH_TOKEN`,
|
|
62
|
+
* `GITHUB_TOKEN` on GitHub; `CHANT_FORGEJO_TOKEN`, `FORGEJO_TOKEN`,
|
|
63
|
+
* `GH_TOKEN`, `GITHUB_TOKEN` on Forgejo. It refuses by name before any call
|
|
64
|
+
* when none is set ({@link noCommentTokenMessage}, {@link noIssueTokenMessage}).
|
|
55
65
|
*
|
|
56
66
|
* Until #3757 these two modes shelled to `gh api`. That reached Forgejo only
|
|
57
67
|
* after two fixes: a full URL, because `gh` resolves a relative path against
|
|
@@ -451,24 +461,38 @@ export interface CommentToken {
|
|
|
451
461
|
source: string;
|
|
452
462
|
}
|
|
453
463
|
|
|
464
|
+
/**
|
|
465
|
+
* Which GitHub-shaped forge a run is on: Forgejo when `detectForge` says so
|
|
466
|
+
* (`FORGEJO_ACTIONS`/`GITEA_ACTIONS`, or a `GITHUB_API_URL` ending in
|
|
467
|
+
* `/api/v1`), or when the API base ends in `/api/v1`, which is how a step
|
|
468
|
+
* posting to some other Forgejo instance names it. GitHub serves `/api/v3`
|
|
469
|
+
* or `api.github.com`, never `/api/v1`. Anything else is GitHub.
|
|
470
|
+
*/
|
|
471
|
+
export function githubShapedKindFrom(env: Record<string, string | undefined>): "github" | "forgejo" {
|
|
472
|
+
if (detectForge(env) === "forgejo") return "forgejo";
|
|
473
|
+
return /\/api\/v1$/.test(githubApiBaseFrom(env)) ? "forgejo" : "github";
|
|
474
|
+
}
|
|
475
|
+
|
|
454
476
|
/**
|
|
455
477
|
* Resolve the token the `comment` and `issue` modes post with on GitHub and
|
|
456
|
-
* Forgejo
|
|
457
|
-
*
|
|
458
|
-
*
|
|
459
|
-
*
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
*
|
|
478
|
+
* Forgejo (chant #2291), in pr-forge's `FORGE_TOKEN_ORDER` for the forge the
|
|
479
|
+
* run is on (#3807), so this and `forgeTargetFromEnv` cannot drift apart.
|
|
480
|
+
* GitHub reads `CHANT_GITHUB_TOKEN`, `GH_TOKEN`, `GITHUB_TOKEN`; Forgejo reads
|
|
481
|
+
* `CHANT_FORGEJO_TOKEN`, `FORGEJO_TOKEN`, `GH_TOKEN`, `GITHUB_TOKEN`. The
|
|
482
|
+
* generated workflow sets `GH_TOKEN` and `GITHUB_TOKEN` to
|
|
483
|
+
* `${{ github.token }}` for every non-`report` finding mode, on Forgejo the
|
|
484
|
+
* same way as on GitHub, so the common case needs nothing set beyond what the
|
|
485
|
+
* generator already emits.
|
|
463
486
|
*
|
|
464
|
-
*
|
|
465
|
-
* cannot cover: a run posting to
|
|
466
|
-
*
|
|
467
|
-
*
|
|
468
|
-
* of the forge's own
|
|
487
|
+
* The chant-specific variable comes first for the case that ambient token
|
|
488
|
+
* cannot cover: a run posting to an instance other than the one the job
|
|
489
|
+
* executes on, where `github.token`'s scope stops at its own instance.
|
|
490
|
+
* `CHANT_FORGEJO_TOKEN` is no longer read on a GitHub run. A run with none of
|
|
491
|
+
* the names is refused by name before any call, in place of the forge's own
|
|
492
|
+
* opaque 401.
|
|
469
493
|
*/
|
|
470
494
|
export function commentTokenFrom(env: Record<string, string | undefined>): CommentToken | undefined {
|
|
471
|
-
for (const source of [
|
|
495
|
+
for (const source of FORGE_TOKEN_ORDER[githubShapedKindFrom(env)]) {
|
|
472
496
|
const value = env[source]?.trim();
|
|
473
497
|
if (value) return { value, source };
|
|
474
498
|
}
|
|
@@ -543,8 +567,8 @@ export function noCommentTokenMessage(repo: string, number: number): string {
|
|
|
543
567
|
return (
|
|
544
568
|
`reconcilePr mode "comment" has pull request ${repo}#${number} to post its finding on and no token to ` +
|
|
545
569
|
"post it with. GH_TOKEN or GITHUB_TOKEN, set from github.token, already covers this on a GitHub Actions " +
|
|
546
|
-
"or Forgejo Actions run — set
|
|
547
|
-
"job runs on.
|
|
570
|
+
"or Forgejo Actions run — set CHANT_GITHUB_TOKEN (GitHub) or CHANT_FORGEJO_TOKEN (Forgejo) to post " +
|
|
571
|
+
"against a different instance than the one the job runs on. It is read first where the two must differ."
|
|
548
572
|
);
|
|
549
573
|
}
|
|
550
574
|
|
|
@@ -553,8 +577,8 @@ export function noIssueTokenMessage(repo: string): string {
|
|
|
553
577
|
return (
|
|
554
578
|
`reconcilePr mode "issue" has repository ${repo} to open or edit its finding in and no token to do it ` +
|
|
555
579
|
"with. GH_TOKEN or GITHUB_TOKEN, set from github.token, already covers this on a GitHub Actions or " +
|
|
556
|
-
"Forgejo Actions run — set
|
|
557
|
-
"job runs on.
|
|
580
|
+
"Forgejo Actions run — set CHANT_GITHUB_TOKEN (GitHub) or CHANT_FORGEJO_TOKEN (Forgejo) to post " +
|
|
581
|
+
"against a different instance than the one the job runs on. It is read first where the two must differ."
|
|
558
582
|
);
|
|
559
583
|
}
|
|
560
584
|
|
|
@@ -582,7 +606,7 @@ export function githubShapedForgeFrom(
|
|
|
582
606
|
signal?: AbortSignal,
|
|
583
607
|
): GithubShapedForge {
|
|
584
608
|
const apiBase = githubApiBaseFrom(env);
|
|
585
|
-
const forgejo = env
|
|
609
|
+
const forgejo = githubShapedKindFrom(env) === "forgejo";
|
|
586
610
|
// Read at call time, so a test that stubs the global sees its stub.
|
|
587
611
|
const fetchImpl: ForgeFetch = (url, init) => globalThis.fetch(url, { ...init, ...(signal ? { signal } : {}) });
|
|
588
612
|
const opts = { apiBase, repo, token: token.value, fetch: fetchImpl };
|
package/src/op/builders.ts
CHANGED
|
@@ -428,7 +428,7 @@ export const lifecyclePlanChangeSet = (args: WithStepRefs<LifecyclePlanChangeSet
|
|
|
428
428
|
return activity("lifecyclePlanChangeSet", rest, { profile: profile ?? "longInfra", ...(id ? { id } : {}) });
|
|
429
429
|
};
|
|
430
430
|
|
|
431
|
-
/** A member's change-set part from a plan file a chant or
|
|
431
|
+
/** A member's change-set part from a plan file a chant, warden or sql run wrote (#3181, #3767). Its `part` feeds {@link composeChangeSet}. */
|
|
432
432
|
export const readChangeSetPart = (args: WithStepRefs<ReadChangeSetPartArgs> & StepOpts): NamedActivityStep => {
|
|
433
433
|
const { args: rest, profile, id } = takeProfileAndId(args as Record<string, unknown>);
|
|
434
434
|
return activity("readChangeSetPart", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
package/src/op/discover.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { walkDiscovery, workspaceMemberDirs } from "../discovery/walk";
|
|
|
6
6
|
import { hasDiscoveryMarkerSync } from "../discovery/files";
|
|
7
7
|
import { resolveDiscoveryGlobs } from "../config";
|
|
8
8
|
import { isStewardDeclaration, type StewardDeclaration } from "./steward";
|
|
9
|
+
import { ensureTypeScriptLoader } from "../ts-loader";
|
|
9
10
|
|
|
10
11
|
export interface DiscoveredOp {
|
|
11
12
|
config: OpConfig;
|
|
@@ -150,6 +151,7 @@ export async function discoverOps(opts?: { cwd?: string }): Promise<OpDiscoveryR
|
|
|
150
151
|
|
|
151
152
|
for (const filePath of files) {
|
|
152
153
|
try {
|
|
154
|
+
ensureTypeScriptLoader();
|
|
153
155
|
const mod = (await import(filePath)) as Record<string, unknown>;
|
|
154
156
|
const exported = opsExportedBy(mod);
|
|
155
157
|
|
|
@@ -220,6 +222,7 @@ export async function discoverStewards(opts?: { cwd?: string }): Promise<Steward
|
|
|
220
222
|
for (const filePath of files) {
|
|
221
223
|
let mod: Record<string, unknown>;
|
|
222
224
|
try {
|
|
225
|
+
ensureTypeScriptLoader();
|
|
223
226
|
mod = (await import(filePath)) as Record<string, unknown>;
|
|
224
227
|
} catch (err) {
|
|
225
228
|
errors.push(`${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
package/src/op/op-waves-run.ts
CHANGED
|
@@ -130,7 +130,7 @@ export interface OpWavePlansFile {
|
|
|
130
130
|
/** Pending-fact keys chant writes itself, which a plans file's `pending` may not set (#3821). */
|
|
131
131
|
export const OP_WAVE_PENDING_RESERVED = [
|
|
132
132
|
"version", "kind", "op", "gate", "timestamp", "expiresAt", "planDigest", "runId", "url", "resume",
|
|
133
|
-
"environment", "origin", "neverOverMcp", "approval", "approvalMode", "answer",
|
|
133
|
+
"environment", "origin", "neverOverMcp", "approval", "approvalMode", "answer", "wave", "heldBy",
|
|
134
134
|
] as const;
|
|
135
135
|
|
|
136
136
|
/** What chant writes to `{runs}` for a wave-level command or a hook (#3762). */
|
|
@@ -835,6 +835,7 @@ interface HooksOutcome {
|
|
|
835
835
|
interface OtherGateHold {
|
|
836
836
|
label: string;
|
|
837
837
|
name: string;
|
|
838
|
+
moment: OpWaveHookMoment;
|
|
838
839
|
target?: string;
|
|
839
840
|
argv: string[];
|
|
840
841
|
env: Record<string, string>;
|
|
@@ -914,7 +915,7 @@ function runHookList(
|
|
|
914
915
|
out.outcomes.push({ ...base, outcome: "held" });
|
|
915
916
|
const request = readHoldRequest(join(cwd, holdPath), log, label);
|
|
916
917
|
if (request) {
|
|
917
|
-
out.otherGates.push({ label, name, ...(call.target ? { target: call.target } : {}), argv: call.argv, env: call.env, request });
|
|
918
|
+
out.otherGates.push({ label, name, moment, ...(call.target ? { target: call.target } : {}), argv: call.argv, env: call.env, request });
|
|
918
919
|
log(`${label} exited ${code} and holds wave ${k} (${waveName}) on gate ${request.op ?? specName} / ${request.gate}, digest ${request.digest}`);
|
|
919
920
|
continue;
|
|
920
921
|
}
|
|
@@ -1068,7 +1069,7 @@ async function settleOtherGate(ctx: WaveContext, hold: OtherGateHold): Promise<O
|
|
|
1068
1069
|
description: hold.request.description ?? `wave ${k} (${wave.name}) of ${spec.name} is held on it by ${hold.label}`,
|
|
1069
1070
|
now,
|
|
1070
1071
|
// #3839: the wave a hold belongs to, as a field, whatever the hook's own description says.
|
|
1071
|
-
fields: { ...hold.request.pending, approvalMode: rules.approval, wave: { number: k, name: wave.name, op: spec.name } },
|
|
1072
|
+
fields: { ...hold.request.pending, approvalMode: rules.approval, wave: { number: k, name: wave.name, op: spec.name }, heldBy: { hook: hold.name, moment: hold.moment, ...(hold.target ? { target: hold.target } : {}) } },
|
|
1072
1073
|
...(neverOverMcp ? { neverOverMcp: true } : {}),
|
|
1073
1074
|
});
|
|
1074
1075
|
const base = { op, gate: hold.request.gate, digest: hold.request.digest, hook: hold.label };
|
package/src/op/op-waves.test.ts
CHANGED
|
@@ -910,6 +910,8 @@ describe("gates and holds a product's wave needs (#3821)", () => {
|
|
|
910
910
|
expect(gates.appended[0]).toMatchObject({ op: "tf-migrate", gate: "split-queues", planDigest: digest("m"), members: [] });
|
|
911
911
|
// #3839: the hold names its wave as a field, even when the hook wrote the description.
|
|
912
912
|
expect(gates.appended[0]).toMatchObject({ description: "move the queues", wave: { number: 1, name: expect.any(String), op: tg.name } });
|
|
913
|
+
// #3886: and the hook that holds it, as a field.
|
|
914
|
+
expect(gates.appended[0]).toMatchObject({ heldBy: { hook: "migrate", moment: expect.any(String) } });
|
|
913
915
|
expect(h.calls.some((c) => c.startsWith("tg plan"))).toBe(false);
|
|
914
916
|
expect(h.envs.find((e) => e.CHANT_HOOK === "after-gate")).toMatchObject({ CHANT_GATE_STATUS: "waiting", CHANT_GATE_OP: "tf-migrate", CHANT_GATE: "split-queues" });
|
|
915
917
|
h.done();
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* when it ends, and a lost lease stopping the run. An Op that changes the
|
|
5
5
|
* checkout runs its leased steps in a worktree of its own.
|
|
6
6
|
*/
|
|
7
|
-
import { describe, test, expect } from "vitest";
|
|
7
|
+
import { describe, test, expect, vi } from "vitest";
|
|
8
8
|
import { withTestDir } from "@intentius/chant-test-utils";
|
|
9
9
|
import { spawnSync } from "node:child_process";
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
@@ -230,6 +230,11 @@ describe("a run under a work lease", () => {
|
|
|
230
230
|
}, 30_000);
|
|
231
231
|
|
|
232
232
|
test("a lease lost mid-step stops the step and the run, which fails lease-lost and releases nothing", async () => {
|
|
233
|
+
// The heartbeat is the only timer faked: the test fires its beat itself
|
|
234
|
+
// once the thief holds the lease, instead of waiting a wall-clock second
|
|
235
|
+
// for a renewal that a loaded machine can delay past any fixed bound.
|
|
236
|
+
vi.useFakeTimers({ toFake: ["setInterval", "clearInterval"] });
|
|
237
|
+
try {
|
|
233
238
|
await withTestDir(async (dir) => {
|
|
234
239
|
await initRepo(dir);
|
|
235
240
|
const log: string[] = [];
|
|
@@ -241,9 +246,9 @@ describe("a run under a work lease", () => {
|
|
|
241
246
|
// The lease runs out from under this run and another worker takes it.
|
|
242
247
|
await releaseWorkLease(lease.item, lease.holder, { cwd: dir, token: lease.token });
|
|
243
248
|
expect((await claimWorkLease(lease.item, "thief", { cwd: dir, ttlMs: 60_000 })).ok).toBe(true);
|
|
244
|
-
await new Promise<void>((
|
|
245
|
-
|
|
246
|
-
|
|
249
|
+
await new Promise<void>((_resolve, reject) => {
|
|
250
|
+
signal?.addEventListener("abort", () => { log.push("stopped"); reject(new Error("aborted")); }, { once: true });
|
|
251
|
+
void vi.advanceTimersByTimeAsync(1_000);
|
|
247
252
|
});
|
|
248
253
|
return {};
|
|
249
254
|
},
|
|
@@ -270,6 +275,9 @@ describe("a run under a work lease", () => {
|
|
|
270
275
|
expect((await listWorkLeases({ cwd: dir, memberPrefix: "" }))[0]).toMatchObject({ holder: "thief", state: "active" });
|
|
271
276
|
expect((await readRunLedger("local", "dispatch", { cwd: dir })).records.at(-1)?.status).toBe("fail");
|
|
272
277
|
});
|
|
278
|
+
} finally {
|
|
279
|
+
vi.useRealTimers();
|
|
280
|
+
}
|
|
273
281
|
}, 30_000);
|
|
274
282
|
|
|
275
283
|
test("a run whose lease was lost before it is recorded is never recorded as done", async () => {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { join, sep } from "node:path";
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { describe, expect, test } from "vitest";
|
|
4
|
+
import { chantSourceDir, ensureTypeScriptLoader } from "./ts-loader";
|
|
5
|
+
|
|
6
|
+
describe("ts-loader (#3878)", () => {
|
|
7
|
+
const pkg = join(sep, "x", "node_modules", "@intentius", "chant");
|
|
8
|
+
|
|
9
|
+
test("chantSourceDir maps a compiled module's directory to its source directory", () => {
|
|
10
|
+
const url = pathToFileURL(join(pkg, "dist", "discovery", "sandbox", "driver.js")).href;
|
|
11
|
+
expect(chantSourceDir(url)).toBe(join(pkg, "src", "discovery", "sandbox"));
|
|
12
|
+
expect(chantSourceDir(pathToFileURL(join(pkg, "dist", "params.js")).href)).toBe(join(pkg, "src"));
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test("chantSourceDir leaves a source module's directory alone", () => {
|
|
16
|
+
const url = pathToFileURL(join(pkg, "src", "discovery", "sandbox", "driver.ts")).href;
|
|
17
|
+
expect(chantSourceDir(url)).toBe(join(pkg, "src", "discovery", "sandbox"));
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("from source, the TypeScript loader is already there and nothing is registered", () => {
|
|
21
|
+
expect(ensureTypeScriptLoader()).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
});
|
package/src/ts-loader.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #3878 — TypeScript loading for the compiled CLI.
|
|
3
|
+
*
|
|
4
|
+
* An installed chant runs `dist/cli/main.js` with plain `node`, so chant's own
|
|
5
|
+
* modules need no loader. Everything else chant imports at run time still can
|
|
6
|
+
* be TypeScript: a project's `chant.config.ts` and source files, `*.op.ts`,
|
|
7
|
+
* policies and lint rules, and the lexicon packages, which ship `src/*.ts`.
|
|
8
|
+
* {@link ensureTypeScriptLoader} registers tsx for those, the first time one of
|
|
9
|
+
* them is about to be imported, so a command that imports none (`--version`,
|
|
10
|
+
* `run wave` on a project with no `chant.config.ts`) never loads tsx at all.
|
|
11
|
+
*
|
|
12
|
+
* {@link installCompiledCli} also points every resolution of chant's own
|
|
13
|
+
* source at the compiled file next to it. A lexicon or project file imports
|
|
14
|
+
* `@intentius/chant`, and the package exports resolve that to `src/*.ts`;
|
|
15
|
+
* without the redirect that import would load a second copy of core,
|
|
16
|
+
* transpiled, beside the one the CLI runs, with its own registries and
|
|
17
|
+
* classes.
|
|
18
|
+
*
|
|
19
|
+
* Run from source (the repository's `bin/chant` through tsx, vitest), this
|
|
20
|
+
* module is itself TypeScript, the TypeScript loader is already there, and
|
|
21
|
+
* both functions do nothing.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { existsSync } from "node:fs";
|
|
25
|
+
import * as nodeModule from "node:module";
|
|
26
|
+
import { dirname, join, sep } from "node:path";
|
|
27
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
28
|
+
|
|
29
|
+
// `module.registerHooks` (Node 22.15+, 24) is newer than the @types/node the
|
|
30
|
+
// repository pins, so its shape is declared here.
|
|
31
|
+
interface ResolveResult {
|
|
32
|
+
url: string;
|
|
33
|
+
format?: string | null;
|
|
34
|
+
shortCircuit?: boolean;
|
|
35
|
+
}
|
|
36
|
+
type NextResolve = (specifier: string, context?: unknown) => ResolveResult;
|
|
37
|
+
const { createRequire, registerHooks } = nodeModule as unknown as {
|
|
38
|
+
createRequire: typeof nodeModule.createRequire;
|
|
39
|
+
registerHooks: (hooks: { resolve: (specifier: string, context: unknown, nextResolve: NextResolve) => ResolveResult }) => unknown;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
interface CompiledCliState {
|
|
43
|
+
/** Whether tsx has been registered in this process. */
|
|
44
|
+
tsx: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const STATE = Symbol.for("chant.compiledCli");
|
|
48
|
+
|
|
49
|
+
function compiledState(): CompiledCliState | undefined {
|
|
50
|
+
return (globalThis as { [STATE]?: CompiledCliState })[STATE];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** True when this module runs as compiled JavaScript, from `<package>/dist`. */
|
|
54
|
+
function runsCompiled(): boolean {
|
|
55
|
+
return import.meta.url.endsWith(".js");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Called once by the CLI's `main()`. Compiled, it records that TypeScript
|
|
60
|
+
* loads lazily and installs the `src/*.ts` to `dist/*.js` redirect; from
|
|
61
|
+
* source it does nothing.
|
|
62
|
+
*/
|
|
63
|
+
export function installCompiledCli(): void {
|
|
64
|
+
if (!runsCompiled() || compiledState()) return;
|
|
65
|
+
(globalThis as { [STATE]?: CompiledCliState })[STATE] = { tsx: false };
|
|
66
|
+
|
|
67
|
+
const distDir = dirname(fileURLToPath(import.meta.url));
|
|
68
|
+
const srcUrl = pathToFileURL(join(dirname(distDir), "src") + sep).href;
|
|
69
|
+
const distUrl = pathToFileURL(distDir + sep).href;
|
|
70
|
+
const compiled = new Map<string, string | null>();
|
|
71
|
+
|
|
72
|
+
registerHooks({
|
|
73
|
+
resolve(specifier, context, nextResolve) {
|
|
74
|
+
const result = nextResolve(specifier, context);
|
|
75
|
+
if (!result.url.startsWith(srcUrl)) return result;
|
|
76
|
+
const path = result.url.slice(srcUrl.length).replace(/[?#].*$/, "");
|
|
77
|
+
if (!path.endsWith(".ts") || path.endsWith(".d.ts")) return result;
|
|
78
|
+
let target = compiled.get(path);
|
|
79
|
+
if (target === undefined) {
|
|
80
|
+
const js = distUrl + path.slice(0, -3) + ".js";
|
|
81
|
+
target = existsSync(fileURLToPath(js)) ? js : null;
|
|
82
|
+
compiled.set(path, target);
|
|
83
|
+
}
|
|
84
|
+
return target === null ? result : { ...result, url: target, format: "module" };
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Register tsx for the ESM and CommonJS loaders, once, before importing
|
|
91
|
+
* anything that may be TypeScript. A no-op from source, where tsx (or vitest)
|
|
92
|
+
* is already loading chant itself. Returns whether the compiled CLI's tsx
|
|
93
|
+
* registration covers this process, so a caller that registers its own
|
|
94
|
+
* CommonJS hook from source knows not to add a second one.
|
|
95
|
+
*/
|
|
96
|
+
export function ensureTypeScriptLoader(): boolean {
|
|
97
|
+
const state = compiledState();
|
|
98
|
+
if (!state) return false;
|
|
99
|
+
if (state.tsx) return true;
|
|
100
|
+
state.tsx = true;
|
|
101
|
+
const require = createRequire(import.meta.url);
|
|
102
|
+
(require("tsx/cjs/api") as { register: () => unknown }).register();
|
|
103
|
+
(require("tsx/esm/api") as { register: () => unknown }).register();
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The source directory for a module of chant's own: `dirname` of `moduleUrl`
|
|
109
|
+
* from source, and the matching directory under `<package>/src` when the
|
|
110
|
+
* module runs from `<package>/dist`. The sandbox drivers hand chant's own
|
|
111
|
+
* modules to esbuild by path, and must name the TypeScript source the
|
|
112
|
+
* project's own `@intentius/chant/*` imports resolve to. String arithmetic
|
|
113
|
+
* only: no filesystem access, so it is safe inside a sandboxed child.
|
|
114
|
+
*/
|
|
115
|
+
export function chantSourceDir(moduleUrl: string): string {
|
|
116
|
+
const dir = dirname(fileURLToPath(moduleUrl));
|
|
117
|
+
if (!moduleUrl.endsWith(".js")) return dir;
|
|
118
|
+
const marker = `${sep}dist${sep}`;
|
|
119
|
+
const at = (dir + sep).lastIndexOf(marker);
|
|
120
|
+
if (at < 0) return dir;
|
|
121
|
+
return dir.slice(0, at) + `${sep}src` + dir.slice(at + marker.length - 1);
|
|
122
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { execFileSync } from "node:child_process";
|
|
7
|
-
import { chmodSync, mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { chmodSync, cpSync, existsSync, mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { tmpdir } from "node:os";
|
|
9
9
|
import { dirname, join } from "node:path";
|
|
10
10
|
import Ajv2020 from "ajv/dist/2020";
|
|
@@ -56,6 +56,22 @@ export function repo(files: Record<string, string | { text: string; mode: number
|
|
|
56
56
|
return root;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Build a fixture repository once per test file and hand each caller a copy of
|
|
61
|
+
* it. A repo costs a dozen git processes (init, add, commit, config), and a
|
|
62
|
+
* file copy none, so a file whose tests each start from the same repo builds
|
|
63
|
+
* it once (#3880). The template is rebuilt if {@link cleanScratch} removed it.
|
|
64
|
+
*/
|
|
65
|
+
export function repoFixture(build: () => string, prefix = "chant-contract-copy-"): () => string {
|
|
66
|
+
let template: string | undefined;
|
|
67
|
+
return () => {
|
|
68
|
+
if (template === undefined || !existsSync(template)) template = build();
|
|
69
|
+
const root = scratchDir(prefix);
|
|
70
|
+
cpSync(template, root, { recursive: true });
|
|
71
|
+
return root;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
59
75
|
export function commitAll(root: string, message = "next"): string {
|
|
60
76
|
git(root, "add", "-A");
|
|
61
77
|
git(root, "commit", "-q", "-m", message);
|
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
import { cpSync, readFileSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { sessionSeal } from "../record-sessions";
|
|
10
|
-
import { commitAll, git, REPO, scratchDir } from "./contract-repo";
|
|
10
|
+
import { commitAll, git, REPO, repoFixture, scratchDir } from "./contract-repo";
|
|
11
11
|
|
|
12
12
|
export const SESSIONS_KIND = "design/sessions/session.kind.mjs";
|
|
13
13
|
export const DECISIONS_KIND = "decisions/decision.kind.mjs";
|
|
14
14
|
|
|
15
15
|
/** A git repository holding a copy of the reference workspace's decisions and design member. */
|
|
16
|
-
export
|
|
16
|
+
export const sessionsRepo = repoFixture(() => {
|
|
17
17
|
const root = scratchDir("chant-sessions-");
|
|
18
18
|
for (const d of ["decisions", "design"]) cpSync(join(REPO, "reference-workspace", d), join(root, d), { recursive: true });
|
|
19
19
|
git(root, "init", "-q");
|
|
20
20
|
commitAll(root, "reference");
|
|
21
21
|
return root;
|
|
22
|
-
}
|
|
22
|
+
}, "chant-sessions-");
|
|
23
23
|
|
|
24
24
|
/** A session file's text, sealed when it is closed. */
|
|
25
25
|
export function sessionText(s: { id: string; state: "open" | "closed"; verdicts?: { record: string; principal: string; verdict: string }[]; agenda?: string[] }): string {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://intentius.io/chant/schemas/workspace/change-set/v1/change-set.schema.json",
|
|
4
4
|
"title": "change-set document",
|
|
5
|
-
"description": "One change set across planners (#3181): what a combined run's chant, terraform, tofu, choudoufu and
|
|
5
|
+
"description": "One change set across planners (#3181): what a combined run's chant, terraform, tofu, choudoufu, warden and sql members will change, a summary, and the digest a gate binds. Written by the composeChangeSet Op activity and by composeChangeSet in @intentius/chant/change-set. Version 1 of the workspace read contract. Readers ignore fields they do not know; a field is only ever added within a version.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": [
|
|
8
8
|
"$schema",
|
|
@@ -87,7 +87,8 @@
|
|
|
87
87
|
"tofu",
|
|
88
88
|
"choudoufu",
|
|
89
89
|
"chant",
|
|
90
|
-
"warden"
|
|
90
|
+
"warden",
|
|
91
|
+
"sql"
|
|
91
92
|
]
|
|
92
93
|
},
|
|
93
94
|
"scope": {
|
|
@@ -171,7 +172,8 @@
|
|
|
171
172
|
"tofu",
|
|
172
173
|
"choudoufu",
|
|
173
174
|
"chant",
|
|
174
|
-
"warden"
|
|
175
|
+
"warden",
|
|
176
|
+
"sql"
|
|
175
177
|
]
|
|
176
178
|
},
|
|
177
179
|
"address": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
48
48
|
import { join, posix } from "node:path";
|
|
49
49
|
import yaml from "js-yaml";
|
|
50
|
-
import answerSchema from "../point-answer.schema.json";
|
|
50
|
+
import answerSchema from "../point-answer.schema.json" with { type: "json" };
|
|
51
51
|
import { fileHash } from "../lineage-lock";
|
|
52
52
|
import { DECISION_POINTS_SCHEMA_ID, POINT_INPUT_OUTPUT_NAMES, parsePoints, PointsError } from "../points";
|
|
53
53
|
import type { ChantMigration, ChantMigrationContext, ChantMigrationPlan, NotMoved, PlanConflict, PlannedChange } from "../chant-migrations";
|