@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.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.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +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/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lexiconUpgrade — the upgrade-detection and PR-automation activity for
|
|
3
|
+
* in-scope lexicons: every lexicon whose plugin declares `upstreamPin` (k8s,
|
|
4
|
+
* k3s, gcp, docker, gitlab, cedar, sql, ...) plus the rolling ones (aws, azure,
|
|
5
|
+
* github, fly).
|
|
6
|
+
*
|
|
7
|
+
* Classifies the lexicon as pinned or rolling, calls the right check function,
|
|
8
|
+
* then surfaces the result in the requested mode: report (default), issue, or
|
|
9
|
+
* pull-request. In pull-request mode it maintains a long-lived branch per
|
|
10
|
+
* lexicon (`lexicon-upgrade/<lexicon>`), updates the PR in place when the delta
|
|
11
|
+
* changes, and applies a semver label derived from the surface severity.
|
|
12
|
+
*
|
|
13
|
+
* For pinned lexicons in pull-request mode, the PR also bumps the lexicon's
|
|
14
|
+
* own package.json version according to the semver label (minor → minor bump,
|
|
15
|
+
* breaking → major bump). Merging the PR carries the version change so
|
|
16
|
+
* publish-on-merge can ship just that lexicon without a full monorepo release.
|
|
17
|
+
*
|
|
18
|
+
* Rolling lexicons (aws, azure, github) drift on their own cadence and are not
|
|
19
|
+
* version-bumped here — they move to drift-issues per #546.
|
|
20
|
+
*
|
|
21
|
+
* Supply-chain note: this activity never executes spec-provided content.
|
|
22
|
+
* It only reads the artifacts produced by the lexicon's own generate step,
|
|
23
|
+
* which is called through the lexicon's npm prepack chain.
|
|
24
|
+
*/
|
|
25
|
+
import { exec } from "node:child_process";
|
|
26
|
+
import { promisify } from "node:util";
|
|
27
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
28
|
+
import { join } from "node:path";
|
|
29
|
+
import { bumpForSeverity, bumpPackageJsonVersion } from "../../codegen/version-bump.js";
|
|
30
|
+
import { ghHostEnv } from "./gh-host.js";
|
|
31
|
+
import { restPullRequestForge } from "./forge-pull-request.js";
|
|
32
|
+
import { postOrUpdateGithubIssue } from "./reconcile.js";
|
|
33
|
+
export { bumpPackageJsonVersion };
|
|
34
|
+
const execAsync = promisify(exec);
|
|
35
|
+
// ── Package.json version bumping ──────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Compute a bumped semver string from a current version and a semver label.
|
|
38
|
+
*
|
|
39
|
+
* The mapping is 0.x-aware, because promoting to 1.0.0 should signal the
|
|
40
|
+
* lexicon's own API stability, not track an upstream spec's breaking change:
|
|
41
|
+
*
|
|
42
|
+
* - Pre-1.0 (major === 0): "breaking" bumps the minor (0.13.1 → 0.14.0),
|
|
43
|
+
* "minor" (additive) bumps the patch (0.13.1 → 0.13.2). Never auto-1.0.0.
|
|
44
|
+
* - >= 1.0.0: "minor" bumps the minor (1.2.3 → 1.3.0), "breaking" bumps the
|
|
45
|
+
* major (1.2.3 → 2.0.0).
|
|
46
|
+
*
|
|
47
|
+
* Handles the common "MAJOR.MINOR.PATCH" form. Returns null when the
|
|
48
|
+
* current version string cannot be parsed as M.m.p.
|
|
49
|
+
*/
|
|
50
|
+
export function computeBumpedVersion(current, label) {
|
|
51
|
+
// Single source of truth for the 0.x-aware rule lives in core (#616). The
|
|
52
|
+
// pinned Op's "minor" label maps to an additive surface change; "breaking"
|
|
53
|
+
// maps straight through.
|
|
54
|
+
return bumpForSeverity(current, label === "breaking" ? "breaking" : "additive");
|
|
55
|
+
}
|
|
56
|
+
// ── Classification ────────────────────────────────────────────────────
|
|
57
|
+
// Rolling lexicons follow their upstream spec with no version constant, so
|
|
58
|
+
// they are a fixed list. Every other lexicon is pinned when its plugin declares
|
|
59
|
+
// `upstreamPin` (cedar's CEDAR_WASM_VERSION, sql's ClickHouse version, k3s...):
|
|
60
|
+
// discovered at run time, not listed here.
|
|
61
|
+
const ROLLING_LEXICONS = new Set(["aws", "azure", "github", "fly"]);
|
|
62
|
+
/** Return true when the lexicon follows a rolling spec (no pinned constant). */
|
|
63
|
+
export function isRolling(lexicon) {
|
|
64
|
+
return ROLLING_LEXICONS.has(lexicon);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Return true when the lexicon's plugin declares an `upstreamPin` (loaded from
|
|
68
|
+
* `lexiconDir`, else from its installed package), the same discovery
|
|
69
|
+
* `chant dev pinned-upgrade` does.
|
|
70
|
+
*/
|
|
71
|
+
export async function isPinned(lexicon, lexiconDir, loadPin) {
|
|
72
|
+
if (isRolling(lexicon))
|
|
73
|
+
return false;
|
|
74
|
+
const load = loadPin ?? (async (l, d) => (await import("../../codegen/pinned-upgrade.js")).loadUpstreamPin(l, d));
|
|
75
|
+
return (await load(lexicon, lexiconDir ?? `${process.cwd()}/lexicons/${lexicon}`)) !== null;
|
|
76
|
+
}
|
|
77
|
+
// ── Semver labeling ───────────────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Map a surface severity to a semver label for the PR.
|
|
80
|
+
*
|
|
81
|
+
* "additive" → "minor" (new resources/properties added)
|
|
82
|
+
* "breaking" → "breaking" (removed or changed resources/properties)
|
|
83
|
+
* "none" → null (surface unchanged)
|
|
84
|
+
*/
|
|
85
|
+
export function severityToLabel(severity) {
|
|
86
|
+
if (severity === "additive")
|
|
87
|
+
return "minor";
|
|
88
|
+
if (severity === "breaking")
|
|
89
|
+
return "breaking";
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
// ── Branch / PR naming ────────────────────────────────────────────────
|
|
93
|
+
/** Long-lived branch name for a lexicon upgrade PR. */
|
|
94
|
+
export function upgradeBranchName(lexicon, pin) {
|
|
95
|
+
return pin ? `lexicon-upgrade/${lexicon}-${pin}` : `lexicon-upgrade/${lexicon}`;
|
|
96
|
+
}
|
|
97
|
+
/** PR title for an upgrade. */
|
|
98
|
+
export function upgradePrTitle(lexicon, from, to, pin) {
|
|
99
|
+
if (from && to)
|
|
100
|
+
return `feat(${lexicon}): upgrade ${pin ? `${pin} ` : "spec "}${from} to ${to}`;
|
|
101
|
+
return `feat(${lexicon}): upgrade to latest spec`;
|
|
102
|
+
}
|
|
103
|
+
// ── Markdown summary builder ──────────────────────────────────────────
|
|
104
|
+
/** Build the PR/issue/report body from the upgrade result data. */
|
|
105
|
+
export function buildUpgradeSummary(opts) {
|
|
106
|
+
const { lexicon, from, to, deltaText, semverLabel, validationOk, failures = [], manualPin } = opts;
|
|
107
|
+
// Example validation status (#604): the upgrade check lints the lexicon's
|
|
108
|
+
// examples (regenLexicon step 6), and an example failure makes validation
|
|
109
|
+
// fail. Surface it explicitly so the PR / drift issue states example health
|
|
110
|
+
// instead of leaving it implicit in CI. (The authoritative example *build*
|
|
111
|
+
// still runs in CI — the pinned PR's test job, and main's continuous build
|
|
112
|
+
// for rolling lexicons.)
|
|
113
|
+
const exampleFailures = failures.filter((f) => f.step === "lint" || f.step === "examples");
|
|
114
|
+
const lines = [`## Lexicon upgrade: ${lexicon}${opts.pin ? ` (${opts.pin})` : ""}`];
|
|
115
|
+
if (from)
|
|
116
|
+
lines.push(``, `**From:** \`${from}\` **To:** \`${to ?? "latest"}\``);
|
|
117
|
+
if (semverLabel)
|
|
118
|
+
lines.push(`**Semver label:** \`${semverLabel}\``);
|
|
119
|
+
lines.push(exampleFailures.length > 0
|
|
120
|
+
? `**Examples:** ⚠️ ${exampleFailures.length} check(s) failing — see Validation failures below`
|
|
121
|
+
: `**Examples:** lint clean`);
|
|
122
|
+
lines.push(``);
|
|
123
|
+
if (manualPin) {
|
|
124
|
+
lines.push(`### Manual pin bump`);
|
|
125
|
+
lines.push(``);
|
|
126
|
+
lines.push(`This pin cannot be rewritten automatically, so nothing was edited or regenerated. ` +
|
|
127
|
+
`Edit \`${manualPin.file}\`: ${manualPin.instructions}`);
|
|
128
|
+
lines.push(``);
|
|
129
|
+
return lines.join("\n");
|
|
130
|
+
}
|
|
131
|
+
if (!validationOk) {
|
|
132
|
+
lines.push(`### Validation failures`);
|
|
133
|
+
lines.push(``);
|
|
134
|
+
lines.push(`Regen or validation did not pass. Review the failures before merging.`);
|
|
135
|
+
for (const f of failures) {
|
|
136
|
+
lines.push(``, `**Step: ${f.step}**`, "```", f.output.slice(0, 2000), "```");
|
|
137
|
+
}
|
|
138
|
+
lines.push(``);
|
|
139
|
+
}
|
|
140
|
+
if (deltaText) {
|
|
141
|
+
lines.push(`### Surface delta`);
|
|
142
|
+
lines.push(``);
|
|
143
|
+
lines.push(deltaText);
|
|
144
|
+
lines.push(``);
|
|
145
|
+
}
|
|
146
|
+
else if (validationOk) {
|
|
147
|
+
lines.push(`No surface delta detected.`);
|
|
148
|
+
}
|
|
149
|
+
// #616: rolling lexicons carry no version pin, so accepting drift must also
|
|
150
|
+
// bump the package version — otherwise skip-if-unchanged strands the new
|
|
151
|
+
// surface at publish time. Spell out the `--bump` re-baseline in the issue.
|
|
152
|
+
if (deltaText && isRolling(lexicon)) {
|
|
153
|
+
lines.push(`### Accepting this drift`);
|
|
154
|
+
lines.push(``);
|
|
155
|
+
lines.push(`Re-baseline and bump the version in one step (bump matches the drift severity, 0.x-aware):`);
|
|
156
|
+
lines.push(``, "```", `chant dev surface-diff lexicons/${lexicon} --update-snapshot --bump`, "```");
|
|
157
|
+
lines.push(``);
|
|
158
|
+
}
|
|
159
|
+
return lines.join("\n");
|
|
160
|
+
}
|
|
161
|
+
// ── Shell helpers ─────────────────────────────────────────────────────
|
|
162
|
+
function shellQuote(s) {
|
|
163
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
164
|
+
}
|
|
165
|
+
const defaultGh = async (cmd, opts) => execAsync(cmd, { ...opts });
|
|
166
|
+
/**
|
|
167
|
+
* `run`, with the forge's host handed to every `gh` call that brings no
|
|
168
|
+
* environment of its own (#3780). `gh pr view`, `gh pr edit`, `gh pr create`,
|
|
169
|
+
* `gh label create` and the ambient `gh issue create` name no host, so on
|
|
170
|
+
* GitHub Enterprise Server or Forgejo they would not reach the job's own
|
|
171
|
+
* forge; see `./gh-host.ts`. A call that passes an `env` (the issue recipe's
|
|
172
|
+
* full-URL `gh api` calls, #2320) already names its host and keeps it. The
|
|
173
|
+
* environment is resolved once, on the first `gh` call. `git` calls pass
|
|
174
|
+
* through untouched.
|
|
175
|
+
*/
|
|
176
|
+
export function withGhHost(run, resolve = () => ghHostEnv(process.env)) {
|
|
177
|
+
let env;
|
|
178
|
+
return async (cmd, opts) => {
|
|
179
|
+
if (!cmd.startsWith("gh ") || opts?.env)
|
|
180
|
+
return run(cmd, opts);
|
|
181
|
+
env ?? (env = resolve());
|
|
182
|
+
return run(cmd, { ...opts, env: await env });
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The hidden marker that makes this lexicon's upgrade-status issue findable
|
|
187
|
+
* across re-runs (#2297): written as the issue body's first line, matched by
|
|
188
|
+
* `startswith` — the same recipe reconcile.ts's `issueMarker` names for a
|
|
189
|
+
* reconcile finding, kept as its own function because the two activities own
|
|
190
|
+
* different issues. Keyed on `lexicon`, not on the validation outcome: a
|
|
191
|
+
* lexicon has one upgrade-status issue that flips between "validation
|
|
192
|
+
* failed" and "upgrade ready" as reality changes, rather than a second issue
|
|
193
|
+
* for the other outcome. `lexicon` is a closed set of known identifiers
|
|
194
|
+
* (see `SupportedLexicon`), so unlike `issueMarker` this needs no slugifying.
|
|
195
|
+
*/
|
|
196
|
+
export function lexiconUpgradeIssueMarker(lexicon) {
|
|
197
|
+
return `<!-- chant-lexicon-upgrade:${lexicon} -->`;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Open or update this lexicon's upgrade-status issue (#2297). On a GitHub
|
|
201
|
+
* Actions or Forgejo Actions job (`GITHUB_REPOSITORY` set) this is
|
|
202
|
+
* `postOrUpdateGithubIssue`'s sticky recipe from reconcile.ts: find the OPEN
|
|
203
|
+
* issue already carrying this lexicon's marker, edit it, open one only when
|
|
204
|
+
* there is none — see that function's own doc comment for the search
|
|
205
|
+
* mechanism and the close decision (never closed here either). Outside any
|
|
206
|
+
* known CI job, falls back to `gh`'s own ambient `gh issue create`, still
|
|
207
|
+
* marker-prefixed so a later CI run finds and edits it instead of opening a
|
|
208
|
+
* second one.
|
|
209
|
+
*/
|
|
210
|
+
async function postLexiconIssue(lexicon, title, body, gh) {
|
|
211
|
+
const marker = lexiconUpgradeIssueMarker(lexicon);
|
|
212
|
+
const repo = process.env.GITHUB_REPOSITORY;
|
|
213
|
+
if (repo) {
|
|
214
|
+
// `postOrUpdateGithubIssue` resolves the token itself and hands it back
|
|
215
|
+
// through `gh`'s second argument (#2320), so this runner has to forward
|
|
216
|
+
// what it is given rather than dropping it — see `GhRunner`.
|
|
217
|
+
return postOrUpdateGithubIssue(repo, marker, title, body, gh);
|
|
218
|
+
}
|
|
219
|
+
const { stdout } = await gh(`gh issue create --title ${shellQuote(title)} --body ${shellQuote(`${marker}\n\n${body}`)}`);
|
|
220
|
+
return stdout.trim();
|
|
221
|
+
}
|
|
222
|
+
// ── PR idempotency helpers ────────────────────────────────────────────
|
|
223
|
+
/**
|
|
224
|
+
* Check whether an open PR exists for the given branch.
|
|
225
|
+
* Returns the PR URL, or null if none.
|
|
226
|
+
*/
|
|
227
|
+
async function openPrUrl(branch, gh, forge) {
|
|
228
|
+
if (forge)
|
|
229
|
+
return (await forge.findPullRequest(branch))?.url ?? null;
|
|
230
|
+
try {
|
|
231
|
+
const { stdout } = await gh(`gh pr view ${shellQuote(branch)} --json url,state --jq 'select(.state=="OPEN") | .url'`);
|
|
232
|
+
const url = stdout.trim();
|
|
233
|
+
return url || null;
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Read the body of the open PR for `branch`, if any.
|
|
241
|
+
* Returns null when there is no open PR or gh is unavailable.
|
|
242
|
+
*/
|
|
243
|
+
async function currentPrBody(branch, gh, forge) {
|
|
244
|
+
if (forge)
|
|
245
|
+
return (await forge.findPullRequest(branch))?.body.trim() || null;
|
|
246
|
+
try {
|
|
247
|
+
const { stdout } = await gh(`gh pr view ${shellQuote(branch)} --json body,state --jq 'select(.state=="OPEN") | .body'`);
|
|
248
|
+
const body = stdout.trim();
|
|
249
|
+
return body || null;
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Apply or ensure a label exists on the repo, then add it to the PR.
|
|
257
|
+
* Best-effort — never throws.
|
|
258
|
+
*/
|
|
259
|
+
async function ensureLabelOnPr(branch, label, gh) {
|
|
260
|
+
try {
|
|
261
|
+
const color = label === "breaking" ? "B60205" : "0075CA";
|
|
262
|
+
await gh(`gh label create ${shellQuote(label)} --color ${shellQuote(color)} --force`).catch(() => { });
|
|
263
|
+
await gh(`gh pr edit ${shellQuote(branch)} --add-label ${shellQuote(label)}`);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// Best-effort
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// ── Real check function loaders ───────────────────────────────────────
|
|
270
|
+
let _realCheckPinned = null;
|
|
271
|
+
let _realCheckRolling = null;
|
|
272
|
+
let _realApplyBump = null;
|
|
273
|
+
async function getRealCheckPinned() {
|
|
274
|
+
if (!_realCheckPinned) {
|
|
275
|
+
const mod = await import("../../codegen/pinned-upgrade.js");
|
|
276
|
+
_realCheckPinned = (opts) => mod.checkPinnedUpgrades(opts);
|
|
277
|
+
}
|
|
278
|
+
return _realCheckPinned;
|
|
279
|
+
}
|
|
280
|
+
async function getRealCheckRolling() {
|
|
281
|
+
if (!_realCheckRolling) {
|
|
282
|
+
const mod = await import("../../codegen/rolling-upgrade.js");
|
|
283
|
+
_realCheckRolling = (opts) => mod.checkRollingUpgrade(opts);
|
|
284
|
+
}
|
|
285
|
+
return _realCheckRolling;
|
|
286
|
+
}
|
|
287
|
+
async function getRealApplyBump() {
|
|
288
|
+
if (!_realApplyBump) {
|
|
289
|
+
const mod = await import("../../codegen/pinned-upgrade.js");
|
|
290
|
+
_realApplyBump = (lexicon, lexiconDir, newVersion, pin) => mod.applyPinnedVersionBump(lexicon, lexiconDir, newVersion, pin);
|
|
291
|
+
}
|
|
292
|
+
return _realApplyBump;
|
|
293
|
+
}
|
|
294
|
+
// ── Main activity ─────────────────────────────────────────────────────
|
|
295
|
+
/**
|
|
296
|
+
* Run the lexicon upgrade check for one lexicon and surface the result.
|
|
297
|
+
*
|
|
298
|
+
* Pinned lexicons (any whose plugin declares `upstreamPin`):
|
|
299
|
+
* Calls checkPinnedUpgrade. A PR is opened only when hasUpgrade=true AND
|
|
300
|
+
* validation passed. Validation failures produce a report or issue.
|
|
301
|
+
* A pin that moves with other constants (`alsoMoves`, sql's version plus
|
|
302
|
+
* digest) is report-only: the summary names the newer version and the
|
|
303
|
+
* manual step, and no branch, bump or PR is made.
|
|
304
|
+
*
|
|
305
|
+
* Rolling lexicons (aws, azure, github):
|
|
306
|
+
* Calls checkRollingUpgrade. A PR is opened only when the surface changed
|
|
307
|
+
* AND validation passed. Surface unchanged = no action.
|
|
308
|
+
*
|
|
309
|
+
* In pull-request mode:
|
|
310
|
+
* - Branch: lexicon-upgrade/<lexicon> (long-lived, one per lexicon).
|
|
311
|
+
* - Idempotent: if the open PR body matches the new summary, skip re-push.
|
|
312
|
+
* - Semver label: "minor" (additive) or "breaking" (changed/removed).
|
|
313
|
+
* - Validation failure falls back to issue mode.
|
|
314
|
+
*
|
|
315
|
+
* In issue mode (#2297): one OPEN issue per lexicon, found by a hidden
|
|
316
|
+
* marker and edited in place on every re-run — the same sticky recipe
|
|
317
|
+
* reconcile.ts's `issue` mode uses, via the shared `postOrUpdateGithubIssue`.
|
|
318
|
+
* Never closed by this activity; see that function's doc comment for the
|
|
319
|
+
* close decision, which applies here unchanged.
|
|
320
|
+
*
|
|
321
|
+
* Never auto-merges or auto-publishes.
|
|
322
|
+
*/
|
|
323
|
+
export async function lexiconUpgrade(args) {
|
|
324
|
+
const { lexicon, mode = "report", _gh: rawGh = defaultGh, } = args;
|
|
325
|
+
const gh = withGhHost(rawGh);
|
|
326
|
+
const lexiconDir = args.lexiconDir ?? `${process.cwd()}/lexicons/${lexicon}`;
|
|
327
|
+
// ── 1. Run the appropriate check ──────────────────────────────────
|
|
328
|
+
let hasUpgrade;
|
|
329
|
+
let deltaText;
|
|
330
|
+
let severity;
|
|
331
|
+
let validationOk;
|
|
332
|
+
let failures = [];
|
|
333
|
+
let from;
|
|
334
|
+
let to;
|
|
335
|
+
let freshSnapshotJson = null;
|
|
336
|
+
// An injected check stands in for the whole pinned check, so discovery runs
|
|
337
|
+
// only on the real path.
|
|
338
|
+
const pinned = !isRolling(lexicon) && (args._checkPinned ? true : await isPinned(lexicon, lexiconDir, args._loadPin));
|
|
339
|
+
let manualPin;
|
|
340
|
+
let pinLabel;
|
|
341
|
+
let summaryOverride;
|
|
342
|
+
if (pinned) {
|
|
343
|
+
const checkPinned = args._checkPinned ?? (await getRealCheckPinned());
|
|
344
|
+
const raw = await checkPinned({ lexiconDir, lexicon, ...(args.pin ? { pin: args.pin } : {}) });
|
|
345
|
+
const results = Array.isArray(raw) ? raw : [raw];
|
|
346
|
+
const multi = results.length > 1;
|
|
347
|
+
// The pin the rest of the flow (validation, bump, PR) acts on: the first
|
|
348
|
+
// one that has a rewritable upgrade, else the first with any finding.
|
|
349
|
+
// A pin with `alsoMoves` (manualPin) is report-only, so it never leads.
|
|
350
|
+
const rewritable = (r) => r.hasUpgrade && !r.manualPin && !r.fetchError;
|
|
351
|
+
const result = results.find(rewritable) ?? results.find((r) => r.hasUpgrade || r.fetchError) ?? results[0];
|
|
352
|
+
if (multi) {
|
|
353
|
+
pinLabel = rewritable(result) ? result.pin : undefined;
|
|
354
|
+
const sections = results.map((r) => buildUpgradeSummary({
|
|
355
|
+
lexicon,
|
|
356
|
+
pin: r.pin,
|
|
357
|
+
from: r.from,
|
|
358
|
+
to: r.to,
|
|
359
|
+
deltaText: r.validation?.deltaText ?? "",
|
|
360
|
+
semverLabel: severityToLabel(r.validation?.severity ?? "none"),
|
|
361
|
+
validationOk: r.fetchError ? false : (r.validation?.ok ?? true),
|
|
362
|
+
failures: r.fetchError
|
|
363
|
+
? [{ step: "upstream-fetch", output: r.fetchError }]
|
|
364
|
+
: (r.validation?.failures ?? []).map((f) => ({ step: f.step, output: f.output })),
|
|
365
|
+
manualPin: r.manualPin,
|
|
366
|
+
}));
|
|
367
|
+
const others = results.filter((r) => r !== result && rewritable(r));
|
|
368
|
+
if (others.length > 0) {
|
|
369
|
+
const names = others.map((r) => r.pin).join(", ");
|
|
370
|
+
sections.push("More than one pin has an upgrade this run can bump. This run acts on " + result.pin +
|
|
371
|
+
"; run it again with pin set to each of the others (" + names + ").");
|
|
372
|
+
}
|
|
373
|
+
summaryOverride = sections.join("\n\n");
|
|
374
|
+
}
|
|
375
|
+
if (result.fetchError) {
|
|
376
|
+
const summary = summaryOverride ??
|
|
377
|
+
buildUpgradeSummary({
|
|
378
|
+
lexicon,
|
|
379
|
+
from: result.from,
|
|
380
|
+
to: result.to,
|
|
381
|
+
deltaText: "",
|
|
382
|
+
semverLabel: null,
|
|
383
|
+
validationOk: false,
|
|
384
|
+
failures: [{ step: "upstream-fetch", output: result.fetchError }],
|
|
385
|
+
});
|
|
386
|
+
return {
|
|
387
|
+
lexicon,
|
|
388
|
+
mode,
|
|
389
|
+
hasUpgrade: false,
|
|
390
|
+
deltaText: "",
|
|
391
|
+
semverLabel: null,
|
|
392
|
+
summary,
|
|
393
|
+
validationOk: false,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
hasUpgrade = results.some((r) => r.hasUpgrade && !r.fetchError);
|
|
397
|
+
from = result.from;
|
|
398
|
+
to = result.to;
|
|
399
|
+
manualPin = multi ? (rewritable(result) ? undefined : result.manualPin) : result.manualPin;
|
|
400
|
+
severity = result.validation?.severity ?? "none";
|
|
401
|
+
deltaText = result.validation?.deltaText ?? "";
|
|
402
|
+
validationOk = result.validation?.ok ?? true;
|
|
403
|
+
failures = (result.validation?.failures ?? []).map((f) => ({ step: f.step, output: f.output }));
|
|
404
|
+
if (result.validation?.freshSnapshot) {
|
|
405
|
+
const { serializeSnapshot } = await import("../../codegen/surface-snapshot.js");
|
|
406
|
+
freshSnapshotJson = serializeSnapshot(result.validation.freshSnapshot);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else if (isRolling(lexicon)) {
|
|
410
|
+
const checkRolling = args._checkRolling ?? (await getRealCheckRolling());
|
|
411
|
+
const result = await checkRolling({ lexiconDir });
|
|
412
|
+
hasUpgrade = result.hasUpgrade;
|
|
413
|
+
severity = result.severity;
|
|
414
|
+
deltaText = result.deltaText;
|
|
415
|
+
validationOk = result.validationOk;
|
|
416
|
+
failures = (result.failures ?? []).map((f) => ({ step: f.step, output: f.output }));
|
|
417
|
+
if (result.freshSnapshot) {
|
|
418
|
+
const { serializeSnapshot } = await import("../../codegen/surface-snapshot.js");
|
|
419
|
+
freshSnapshotJson = serializeSnapshot(result.freshSnapshot);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
throw new Error(`Lexicon "${lexicon}" is not supported by LexiconUpgradeOp. ` +
|
|
424
|
+
`Supported: the rolling lexicons (${[...ROLLING_LEXICONS].join(", ")}) and any lexicon whose plugin declares upstreamPin.`);
|
|
425
|
+
}
|
|
426
|
+
const semverLabel = severityToLabel(severity);
|
|
427
|
+
const summary = summaryOverride ??
|
|
428
|
+
buildUpgradeSummary({
|
|
429
|
+
lexicon,
|
|
430
|
+
from,
|
|
431
|
+
to,
|
|
432
|
+
deltaText,
|
|
433
|
+
semverLabel,
|
|
434
|
+
validationOk,
|
|
435
|
+
failures,
|
|
436
|
+
manualPin,
|
|
437
|
+
});
|
|
438
|
+
// ── 2. No upgrade ─────────────────────────────────────────────────
|
|
439
|
+
if (!hasUpgrade) {
|
|
440
|
+
return {
|
|
441
|
+
lexicon,
|
|
442
|
+
mode,
|
|
443
|
+
hasUpgrade: false,
|
|
444
|
+
deltaText,
|
|
445
|
+
semverLabel: null,
|
|
446
|
+
summary,
|
|
447
|
+
validationOk,
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
// ── 3. Validation failure: surface as report or issue, never PR ───
|
|
451
|
+
if (!validationOk) {
|
|
452
|
+
const effectiveMode = mode === "pull-request" ? "issue" : mode;
|
|
453
|
+
if (effectiveMode === "issue") {
|
|
454
|
+
const title = `chore(${lexicon}): spec upgrade validation failed`;
|
|
455
|
+
const issueUrl = await postLexiconIssue(lexicon, title, summary, gh);
|
|
456
|
+
return {
|
|
457
|
+
lexicon,
|
|
458
|
+
mode,
|
|
459
|
+
hasUpgrade: true,
|
|
460
|
+
deltaText,
|
|
461
|
+
semverLabel,
|
|
462
|
+
issueUrl,
|
|
463
|
+
summary,
|
|
464
|
+
validationOk: false,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
return {
|
|
468
|
+
lexicon,
|
|
469
|
+
mode,
|
|
470
|
+
hasUpgrade: true,
|
|
471
|
+
deltaText,
|
|
472
|
+
semverLabel,
|
|
473
|
+
summary,
|
|
474
|
+
validationOk: false,
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
// ── 4. Upgrade ready: surface according to mode ───────────────────
|
|
478
|
+
const title = upgradePrTitle(lexicon, from, to, pinLabel);
|
|
479
|
+
// #546: rolling lexicons have no version pin, so a "pull-request" would only
|
|
480
|
+
// refresh the baseline snapshot — low signal, no build-output change. Surface
|
|
481
|
+
// rolling drift as an issue instead; re-baselining stays a deliberate
|
|
482
|
+
// maintainer action (`chant dev surface-diff <lexicon> --update-snapshot --bump`).
|
|
483
|
+
// Pinned lexicons keep opening version-bump PRs.
|
|
484
|
+
// A pin that moves with other constants cannot be bumped here, so it is
|
|
485
|
+
// report-only whatever the mode.
|
|
486
|
+
const effectiveMode = manualPin
|
|
487
|
+
? "report"
|
|
488
|
+
: mode === "pull-request" && isRolling(lexicon)
|
|
489
|
+
? "issue"
|
|
490
|
+
: mode;
|
|
491
|
+
if (effectiveMode === "report") {
|
|
492
|
+
return {
|
|
493
|
+
lexicon,
|
|
494
|
+
mode: effectiveMode,
|
|
495
|
+
hasUpgrade: true,
|
|
496
|
+
deltaText,
|
|
497
|
+
semverLabel,
|
|
498
|
+
summary,
|
|
499
|
+
validationOk: true,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
if (effectiveMode === "issue") {
|
|
503
|
+
const issueUrl = await postLexiconIssue(lexicon, title, summary, gh);
|
|
504
|
+
return {
|
|
505
|
+
lexicon,
|
|
506
|
+
mode: effectiveMode,
|
|
507
|
+
hasUpgrade: true,
|
|
508
|
+
deltaText,
|
|
509
|
+
semverLabel,
|
|
510
|
+
issueUrl,
|
|
511
|
+
summary,
|
|
512
|
+
validationOk: true,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
// ── 5. pull-request mode: idempotent branch + PR management ──────
|
|
516
|
+
const branch = upgradeBranchName(lexicon, pinLabel);
|
|
517
|
+
// Idempotency check: if the open PR already has this summary, nothing changed.
|
|
518
|
+
// Compare trimmed — gh/git round-trips can alter trailing whitespace.
|
|
519
|
+
// `gh pr` speaks GraphQL, which Forgejo does not serve: a Forgejo or
|
|
520
|
+
// GitLab job finds, opens and labels the pull request over REST (#3798).
|
|
521
|
+
const forge = args._forge !== undefined ? (args._forge ?? undefined) : await restPullRequestForge(process.env);
|
|
522
|
+
const existingPrBody = await currentPrBody(branch, gh, forge);
|
|
523
|
+
if (existingPrBody !== null && existingPrBody.trim() === summary.trim()) {
|
|
524
|
+
const existingUrl = await openPrUrl(branch, gh, forge);
|
|
525
|
+
return {
|
|
526
|
+
lexicon,
|
|
527
|
+
mode,
|
|
528
|
+
hasUpgrade: true,
|
|
529
|
+
deltaText,
|
|
530
|
+
semverLabel,
|
|
531
|
+
prUrl: existingUrl ?? undefined,
|
|
532
|
+
summary,
|
|
533
|
+
validationOk: true,
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
// Reset/create the long-lived branch from main and commit the changes.
|
|
537
|
+
// All git shell-outs go through the injectable `gh` runner (which defaults to
|
|
538
|
+
// execAsync) so tests can mock them — a test must never touch the real repo
|
|
539
|
+
// or push to origin.
|
|
540
|
+
await gh(`git fetch origin main`);
|
|
541
|
+
await gh(`git branch -f ${shellQuote(branch)} origin/main`).catch(async () => {
|
|
542
|
+
await gh(`git branch ${shellQuote(branch)} origin/main`);
|
|
543
|
+
});
|
|
544
|
+
// Save current branch, switch to upgrade branch.
|
|
545
|
+
const { stdout: currentBranch } = await gh(`git rev-parse --abbrev-ref HEAD`);
|
|
546
|
+
const savedBranch = currentBranch.trim();
|
|
547
|
+
await gh(`git stash --include-untracked`).catch(() => { });
|
|
548
|
+
try {
|
|
549
|
+
await gh(`git checkout ${shellQuote(branch)}`);
|
|
550
|
+
// For pinned lexicons: apply the spec version bump permanently on this branch.
|
|
551
|
+
if (pinned && to) {
|
|
552
|
+
const applyBump = args._applyBump ?? (await getRealApplyBump());
|
|
553
|
+
const { filePath } = await (pinLabel ? applyBump(lexicon, lexiconDir, to, pinLabel) : applyBump(lexicon, lexiconDir, to));
|
|
554
|
+
await gh(`git add ${shellQuote(filePath)}`).catch(() => { });
|
|
555
|
+
// Bump the lexicon's package.json version so merging this PR causes
|
|
556
|
+
// publish-on-merge to ship exactly this lexicon (minor → minor bump,
|
|
557
|
+
// breaking → major bump). Rolling lexicons are excluded — they use
|
|
558
|
+
// drift-issues (#546) and do not pin to a version constant.
|
|
559
|
+
if (semverLabel) {
|
|
560
|
+
const pkgJsonPath = join(lexiconDir, "package.json");
|
|
561
|
+
const raw = readFileSync(pkgJsonPath, "utf-8");
|
|
562
|
+
const pkg = JSON.parse(raw);
|
|
563
|
+
const currentVersion = pkg.version ?? "0.0.0";
|
|
564
|
+
const bumpedVersion = computeBumpedVersion(currentVersion, semverLabel);
|
|
565
|
+
if (bumpedVersion) {
|
|
566
|
+
const doBump = args._bumpPackageVersion ?? bumpPackageJsonVersion;
|
|
567
|
+
doBump(pkgJsonPath, bumpedVersion);
|
|
568
|
+
await gh(`git add ${shellQuote(pkgJsonPath)}`).catch(() => { });
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
// Write and stage the fresh surface snapshot.
|
|
573
|
+
if (freshSnapshotJson) {
|
|
574
|
+
const { SNAPSHOT_FILENAME } = await import("../../codegen/lexicon-regen.js");
|
|
575
|
+
const snapshotPath = join(lexiconDir, SNAPSHOT_FILENAME);
|
|
576
|
+
writeFileSync(snapshotPath, freshSnapshotJson, "utf-8");
|
|
577
|
+
await gh(`git add ${shellQuote(snapshotPath)}`).catch(() => { });
|
|
578
|
+
}
|
|
579
|
+
await gh(`git commit -m ${shellQuote(title)} --allow-empty`);
|
|
580
|
+
// Push to origin — force-with-lease, then fall back to force on first push.
|
|
581
|
+
await gh(`git push -u origin ${shellQuote(branch)} --force-with-lease`).catch(async () => {
|
|
582
|
+
await gh(`git push -u origin ${shellQuote(branch)} --force`);
|
|
583
|
+
});
|
|
584
|
+
// Open or update the PR.
|
|
585
|
+
let prUrl;
|
|
586
|
+
const open = forge ? await forge.findPullRequest(branch) : undefined;
|
|
587
|
+
const existingUrl = forge ? null : await openPrUrl(branch, gh);
|
|
588
|
+
if (forge) {
|
|
589
|
+
let pr = open;
|
|
590
|
+
if (pr) {
|
|
591
|
+
const edited = await forge.editPullRequest(pr.number, { title, body: summary });
|
|
592
|
+
prUrl = edited?.url ?? pr.url ?? "";
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
pr = await forge.openPullRequest({ head: branch, base: "main", title, body: summary });
|
|
596
|
+
prUrl = pr.url ?? "";
|
|
597
|
+
}
|
|
598
|
+
// Best-effort, as below. Forgejo adds only a label the repository
|
|
599
|
+
// already has; GitHub and GitLab make one.
|
|
600
|
+
if (semverLabel)
|
|
601
|
+
await forge.addLabels(pr.number, [semverLabel]).catch(() => { });
|
|
602
|
+
}
|
|
603
|
+
else if (existingUrl) {
|
|
604
|
+
await gh(`gh pr edit ${shellQuote(branch)} --title ${shellQuote(title)} --body ${shellQuote(summary)}`);
|
|
605
|
+
prUrl = existingUrl;
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
const { stdout } = await gh(`gh pr create --title ${shellQuote(title)} --body ${shellQuote(summary)} --head ${shellQuote(branch)} --base main`);
|
|
609
|
+
prUrl = stdout.trim();
|
|
610
|
+
}
|
|
611
|
+
if (semverLabel && !forge) {
|
|
612
|
+
await ensureLabelOnPr(branch, semverLabel, gh);
|
|
613
|
+
}
|
|
614
|
+
return {
|
|
615
|
+
lexicon,
|
|
616
|
+
mode,
|
|
617
|
+
hasUpgrade: true,
|
|
618
|
+
deltaText,
|
|
619
|
+
semverLabel,
|
|
620
|
+
prUrl,
|
|
621
|
+
summary,
|
|
622
|
+
validationOk: true,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
finally {
|
|
626
|
+
await gh(`git checkout ${shellQuote(savedBranch)}`).catch(() => { });
|
|
627
|
+
await gh(`git stash pop`).catch(() => { });
|
|
628
|
+
}
|
|
629
|
+
}
|