@intentius/chant 0.124.13 → 0.124.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +462 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReconcileOp composite — the cloud → code workflow as an Op.
|
|
3
|
+
*
|
|
4
|
+
* Keeps source tracking reality: when live drifts from declarations, open a PR
|
|
5
|
+
* that regenerates the affected TypeScript. Mirrors the {@link WatchOp} shape.
|
|
6
|
+
*
|
|
7
|
+
* Phases: snapshot → plan → regenerate (live import) → open PR. The
|
|
8
|
+
* regenerate-and-PR step is the `reconcilePr` activity (#122), which derives
|
|
9
|
+
* the change set from `chant lifecycle plan` and opens a reviewable PR.
|
|
10
|
+
*
|
|
11
|
+
* Runs one-shot on the local Op executor for a `chant run`; with a `schedule`
|
|
12
|
+
* the cadence rides on the Op itself (#2120) for whichever runtime honours it.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // one-shot, local executor
|
|
17
|
+
* export const { op } = ReconcileOp({ name: "prod-reconcile", env: "prod" });
|
|
18
|
+
*
|
|
19
|
+
* // hourly
|
|
20
|
+
* export const { op } = ReconcileOp({
|
|
21
|
+
* name: "prod-reconcile",
|
|
22
|
+
* env: "prod",
|
|
23
|
+
* schedule: "0 * * * *",
|
|
24
|
+
* scope: { owned: true },
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @see #112 — stateless-authoritative state model + live import
|
|
29
|
+
*/
|
|
30
|
+
import { Op, phase, activity } from "../builders.js";
|
|
31
|
+
export function ReconcileOp(config) {
|
|
32
|
+
const onDrift = config.onDrift ?? "pull-request";
|
|
33
|
+
const owned = config.scope?.owned ?? false;
|
|
34
|
+
// The reconcile's headline output is the opened PR (or issue, or the comment
|
|
35
|
+
// it posted on the triggering pull request) URL. Expose it as an outcome
|
|
36
|
+
// attribute so it prints in `chant run` and lands on the ledger. `report`
|
|
37
|
+
// mode opens nothing, so it has no URL outcome.
|
|
38
|
+
const reconcileOutcome = onDrift === "pull-request"
|
|
39
|
+
? { name: "PR", from: "prUrl" }
|
|
40
|
+
: onDrift === "issue"
|
|
41
|
+
? { name: "Issue", from: "issueUrl" }
|
|
42
|
+
: onDrift === "comment"
|
|
43
|
+
? { name: "Comment", from: "commentUrl" }
|
|
44
|
+
: undefined;
|
|
45
|
+
const op = Op({
|
|
46
|
+
name: config.name,
|
|
47
|
+
overview: `Reconcile the ${config.env} environment into source (cloud → code)`,
|
|
48
|
+
labels: {
|
|
49
|
+
Reconcile: "true",
|
|
50
|
+
Env: config.env,
|
|
51
|
+
},
|
|
52
|
+
...(config.schedule ? { schedule: { cron: config.schedule, overlap: "skip" } } : {}),
|
|
53
|
+
phases: [
|
|
54
|
+
phase("Snapshot", [activity("lifecycleSnapshot", { env: config.env })]),
|
|
55
|
+
phase("Plan", [
|
|
56
|
+
{
|
|
57
|
+
kind: "activity",
|
|
58
|
+
fn: "lifecycleDiff",
|
|
59
|
+
args: { env: config.env, live: true },
|
|
60
|
+
outcomeAttribute: { name: "Drift", from: "drifted" },
|
|
61
|
+
},
|
|
62
|
+
]),
|
|
63
|
+
phase("Reconcile", [
|
|
64
|
+
// reconcilePr derives the change set from `chant lifecycle plan`,
|
|
65
|
+
// regenerates via `chant import --from`, and opens a PR. Surface the
|
|
66
|
+
// opened PR/issue URL as an outcome so `chant run` prints it — the
|
|
67
|
+
// reconcile's result is the link.
|
|
68
|
+
//
|
|
69
|
+
// `op` names this Op in the marker `issue` mode's sticky issue is
|
|
70
|
+
// found by (#2319). The env alone is not unique across Ops: it shares
|
|
71
|
+
// a marker namespace with `TerraformWatchOp`, which passes a terraform
|
|
72
|
+
// *root* as its `env`, so a chant environment and a root that happen
|
|
73
|
+
// to share a name resolved to one marker and overwrote each other.
|
|
74
|
+
{
|
|
75
|
+
kind: "activity",
|
|
76
|
+
fn: "reconcilePr",
|
|
77
|
+
args: { env: config.env, op: config.name, mode: onDrift, owned },
|
|
78
|
+
...(reconcileOutcome ? { outcomeAttribute: reconcileOutcome } : {}),
|
|
79
|
+
},
|
|
80
|
+
]),
|
|
81
|
+
],
|
|
82
|
+
});
|
|
83
|
+
return { op };
|
|
84
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WatchOp composite — periodic state observation as an Op.
|
|
3
|
+
*
|
|
4
|
+
* Composes existing pieces:
|
|
5
|
+
* - The local executor (`../local-executor.ts`) runs the phases in order and
|
|
6
|
+
* files each step's record under the phase it belongs to
|
|
7
|
+
* - The pre-built lifecycleSnapshot + lifecycleDiff activities
|
|
8
|
+
* - `schedule` puts the cadence on the Op itself (#2120)
|
|
9
|
+
*
|
|
10
|
+
* The cron is Op data, not a resource: `chant operator` ticks on it, the
|
|
11
|
+
* github/gitlab/forgejo generators render it as a CI cron, and a hosting
|
|
12
|
+
* lexicon hands it to its own scheduler.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* export const { op } = WatchOp({
|
|
17
|
+
* name: "prod-watch",
|
|
18
|
+
* env: "prod",
|
|
19
|
+
* schedule: "0,15,30,45 * * * *", // every 15 minutes
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @see #31 — Continuous observation (the issue this composite addresses)
|
|
24
|
+
*/
|
|
25
|
+
import { Op, phase, activity } from "../builders.js";
|
|
26
|
+
import { receiptCheckInput } from "../receipt-store.js";
|
|
27
|
+
export function WatchOp(config) {
|
|
28
|
+
const live = config.live ?? true;
|
|
29
|
+
const op = Op({
|
|
30
|
+
name: config.name,
|
|
31
|
+
overview: `Periodically snapshot and diff the ${config.env} environment`,
|
|
32
|
+
labels: {
|
|
33
|
+
Watch: "true",
|
|
34
|
+
Env: config.env,
|
|
35
|
+
},
|
|
36
|
+
...(config.schedule ? { schedule: { cron: config.schedule, overlap: "skip" } } : {}),
|
|
37
|
+
...(config.failOn ? { failOn: config.failOn } : {}),
|
|
38
|
+
phases: [
|
|
39
|
+
phase("Snapshot", [activity("lifecycleSnapshot", { env: config.env })]),
|
|
40
|
+
phase("Diff", [
|
|
41
|
+
// outcomeAttribute surfaces lifecycleDiff's `drifted` boolean as the
|
|
42
|
+
// run's `Drift` outcome on the run ledger, so a reader of the ledger
|
|
43
|
+
// can pick out the runs that detected drift.
|
|
44
|
+
{
|
|
45
|
+
kind: "activity",
|
|
46
|
+
fn: "lifecycleDiff",
|
|
47
|
+
args: { env: config.env, live },
|
|
48
|
+
outcomeAttribute: { name: "Drift", from: "drifted" },
|
|
49
|
+
},
|
|
50
|
+
]),
|
|
51
|
+
// Receipt staleness (#1834): read-only over the receipt store — absent
|
|
52
|
+
// or differing receipts surface as findings (and a StaleReceipts run
|
|
53
|
+
// outcome); nothing runs and nothing is written.
|
|
54
|
+
...(config.receipts && config.receipts.length > 0
|
|
55
|
+
? [
|
|
56
|
+
phase("Receipts", [
|
|
57
|
+
{
|
|
58
|
+
kind: "activity",
|
|
59
|
+
fn: "receiptStaleness",
|
|
60
|
+
args: { receipts: config.receipts.map(receiptCheckInput) },
|
|
61
|
+
outcomeAttribute: { name: "StaleReceipts", from: "stale" },
|
|
62
|
+
},
|
|
63
|
+
]),
|
|
64
|
+
]
|
|
65
|
+
: []),
|
|
66
|
+
],
|
|
67
|
+
});
|
|
68
|
+
return { op };
|
|
69
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowAuditOp composite — the live supply-chain audit of GitHub workflows
|
|
3
|
+
* as a chant Op with an optional schedule (#292).
|
|
4
|
+
*
|
|
5
|
+
* The github post-synth checks (#286-#291) own everything answerable from the
|
|
6
|
+
* deterministic build. This Op owns *only* the checks that require live
|
|
7
|
+
* resolution against a moving upstream truth — stale SHA pins, impostor refs,
|
|
8
|
+
* symbolic-ref confusion, pin/comment mismatch, advisories, archived upstreams.
|
|
9
|
+
* It sits at **observe** on the lifecycle dial, with a finding-mode (mirroring
|
|
10
|
+
* `ReconcileOp`: `report | issue | pull-request`) as the **reconcile** step.
|
|
11
|
+
*
|
|
12
|
+
* Runs one-shot on the local Op executor via `chant run`; a `schedule` puts
|
|
13
|
+
* the cadence on the Op itself (#2120), for continuous re-audit between
|
|
14
|
+
* change windows.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // one-shot, local executor
|
|
19
|
+
* export const { op } = WorkflowAuditOp({ name: "actions-audit" });
|
|
20
|
+
*
|
|
21
|
+
* // daily, opening a PR that bumps a stale pin
|
|
22
|
+
* export const { op } = WorkflowAuditOp({
|
|
23
|
+
* name: "actions-audit",
|
|
24
|
+
* schedule: "0 6 * * *",
|
|
25
|
+
* onFinding: "pull-request",
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @see #286 — the deterministic counterpart this freshens.
|
|
30
|
+
*/
|
|
31
|
+
import { Op, phase } from "../builders.js";
|
|
32
|
+
export function WorkflowAuditOp(config) {
|
|
33
|
+
const onFinding = config.onFinding ?? "report";
|
|
34
|
+
const op = Op({
|
|
35
|
+
name: config.name,
|
|
36
|
+
overview: "Resolve workflow action references against live upstreams and report supply-chain drift",
|
|
37
|
+
labels: {
|
|
38
|
+
Audit: "true",
|
|
39
|
+
Surface: "github-workflows",
|
|
40
|
+
},
|
|
41
|
+
...(config.schedule ? { schedule: { cron: config.schedule, overlap: "skip" } } : {}),
|
|
42
|
+
phases: [
|
|
43
|
+
phase("Audit", [
|
|
44
|
+
{
|
|
45
|
+
kind: "activity",
|
|
46
|
+
fn: "workflowSupplyChainAudit",
|
|
47
|
+
args: { workflowsDir: config.workflowsDir ?? ".github/workflows", mode: onFinding },
|
|
48
|
+
// Surface the finding count as the run's `Findings` outcome on the
|
|
49
|
+
// run ledger, so a reader can pick out the audits that found
|
|
50
|
+
// something.
|
|
51
|
+
outcomeAttribute: { name: "Findings", from: "findings" },
|
|
52
|
+
},
|
|
53
|
+
]),
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
return { op };
|
|
57
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converge rules (#1484) — the typed, JSON-serializable predicate language a
|
|
3
|
+
* `ConvergeOp` rule table is built from.
|
|
4
|
+
*
|
|
5
|
+
* The issue's illustrative sketch writes a rule's condition as a JS arrow
|
|
6
|
+
* function (`s => s.status === "drifted"`). That reads well but can't
|
|
7
|
+
* actually ship: a rule is evaluated per-tick against live, freshly-observed
|
|
8
|
+
* data inside an activity, and an activity's arguments — including whatever a
|
|
9
|
+
* `ConvergeOp` composite bakes into the Op it builds — must be plain JSON (see
|
|
10
|
+
* `step-output-ref.ts`'s module doc on why a value crossing an activity
|
|
11
|
+
* boundary can't carry a closure). A rule
|
|
12
|
+
* "outside the evaluable subset" is one of the build-time refusals #1484
|
|
13
|
+
* names explicitly, which only makes sense if there IS an evaluable subset
|
|
14
|
+
* to be outside of — so rules here are data: a small comparison language
|
|
15
|
+
* over one typed symptom record, interpreted by {@link evaluatePredicate}
|
|
16
|
+
* (pure, no I/O, matching Accessible Ops factor I — "predictable from the
|
|
17
|
+
* text alone").
|
|
18
|
+
*
|
|
19
|
+
* `S` is the symptom record type a `ConvergeOp` instance evaluates against
|
|
20
|
+
* (`ConvergeSymptom`, ../lifecycle/symptoms.ts, for the real thing — kept
|
|
21
|
+
* generic here so the predicate language and its tests don't depend on the
|
|
22
|
+
* lifecycle package). Since a predicate's `field` is typed `keyof S`, a rule
|
|
23
|
+
* that names a field the symptom record doesn't have is refused by
|
|
24
|
+
* TypeScript itself at the author's call site — the "symptom field nothing
|
|
25
|
+
* produces" refusal, satisfied for free. {@link isWellFormedPredicate} is the
|
|
26
|
+
* runtime backstop for a rule assembled by hand (bypassing `when()`/the
|
|
27
|
+
* comparison builders) rather than authored through them, and is what a
|
|
28
|
+
* build-time check (OPS014, ../lint/rules/op/ops014-converge-rule-refusals.ts)
|
|
29
|
+
* re-validates the serialized rule table against.
|
|
30
|
+
*/
|
|
31
|
+
const FIELD_COMPARISON_OPS = new Set(["eq", "neq", "gt", "gte", "lt", "lte"]);
|
|
32
|
+
const FIELD_TRUTHINESS_OPS = new Set(["truthy", "falsy"]);
|
|
33
|
+
/**
|
|
34
|
+
* Structural validator for a value claiming to be a {@link SymptomPredicate}
|
|
35
|
+
* — the runtime backstop OPS014
|
|
36
|
+
* (../lint/rules/op/ops014-converge-rule-refusals.ts) re-checks a serialized
|
|
37
|
+
* rule table against, since nothing forces a rule
|
|
38
|
+
* assembled by hand (rather than through the builders below) to match this
|
|
39
|
+
* shape. Recurses through `allOf`/`anyOf`; `fieldWhitelist`, when given,
|
|
40
|
+
* additionally refuses a field name the symptom record doesn't actually
|
|
41
|
+
* produce (defense in depth over TypeScript's `keyof S` check, which only
|
|
42
|
+
* applies at the author's original call site — not to a rule table replayed
|
|
43
|
+
* from JSON).
|
|
44
|
+
*/
|
|
45
|
+
export function isWellFormedPredicate(value, fieldWhitelist) {
|
|
46
|
+
if (typeof value !== "object" || value === null)
|
|
47
|
+
return false;
|
|
48
|
+
const v = value;
|
|
49
|
+
switch (v.kind) {
|
|
50
|
+
case "field-comparison":
|
|
51
|
+
return (typeof v.field === "string" &&
|
|
52
|
+
(!fieldWhitelist || fieldWhitelist.has(v.field)) &&
|
|
53
|
+
typeof v.op === "string" &&
|
|
54
|
+
FIELD_COMPARISON_OPS.has(v.op) &&
|
|
55
|
+
(typeof v.value === "string" || typeof v.value === "number" || typeof v.value === "boolean"));
|
|
56
|
+
case "field-truthiness":
|
|
57
|
+
return (typeof v.field === "string" &&
|
|
58
|
+
(!fieldWhitelist || fieldWhitelist.has(v.field)) &&
|
|
59
|
+
typeof v.op === "string" &&
|
|
60
|
+
FIELD_TRUTHINESS_OPS.has(v.op));
|
|
61
|
+
case "all-of":
|
|
62
|
+
case "any-of":
|
|
63
|
+
return Array.isArray(v.predicates) && v.predicates.every((p) => isWellFormedPredicate(p, fieldWhitelist));
|
|
64
|
+
default:
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Evaluate a {@link SymptomPredicate} against a symptom record. Pure — no I/O, no ambient reads. */
|
|
69
|
+
export function evaluatePredicate(predicate, symptom) {
|
|
70
|
+
switch (predicate.kind) {
|
|
71
|
+
case "field-comparison": {
|
|
72
|
+
const actual = symptom[predicate.field];
|
|
73
|
+
switch (predicate.op) {
|
|
74
|
+
case "eq":
|
|
75
|
+
return actual === predicate.value;
|
|
76
|
+
case "neq":
|
|
77
|
+
return actual !== predicate.value;
|
|
78
|
+
case "gt":
|
|
79
|
+
return typeof actual === "number" && typeof predicate.value === "number" && actual > predicate.value;
|
|
80
|
+
case "gte":
|
|
81
|
+
return typeof actual === "number" && typeof predicate.value === "number" && actual >= predicate.value;
|
|
82
|
+
case "lt":
|
|
83
|
+
return typeof actual === "number" && typeof predicate.value === "number" && actual < predicate.value;
|
|
84
|
+
case "lte":
|
|
85
|
+
return typeof actual === "number" && typeof predicate.value === "number" && actual <= predicate.value;
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case "field-truthiness": {
|
|
90
|
+
const actual = symptom[predicate.field];
|
|
91
|
+
return predicate.op === "truthy" ? !!actual : !actual;
|
|
92
|
+
}
|
|
93
|
+
case "all-of":
|
|
94
|
+
return predicate.predicates.every((p) => evaluatePredicate(p, symptom));
|
|
95
|
+
case "any-of":
|
|
96
|
+
return predicate.predicates.some((p) => evaluatePredicate(p, symptom));
|
|
97
|
+
}
|
|
98
|
+
// Unreachable for a well-formed predicate; a malformed one (bypassing the
|
|
99
|
+
// builders and isWellFormedPredicate) never matches rather than throwing
|
|
100
|
+
// mid-tick — the build-time check is what refuses it before this runs.
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Does a predicate reference the given symptom field anywhere in it,
|
|
105
|
+
* recursing through `allOf`/`anyOf`? The build-time backstop for a claim
|
|
106
|
+
* about a *category* of rule (e.g. "a rule reading `adoptCount`") rather
|
|
107
|
+
* than a single comparison — OPS014's adopt-safety check
|
|
108
|
+
* (../lint/rules/op/ops014-converge-rule-refusals.ts) uses this to refuse a
|
|
109
|
+
* rule that both reads `adoptCount` and dispatches a
|
|
110
|
+
* mutating op, rather than merely documenting that authors shouldn't write
|
|
111
|
+
* one.
|
|
112
|
+
*/
|
|
113
|
+
export function predicateReferencesField(predicate, field) {
|
|
114
|
+
switch (predicate.kind) {
|
|
115
|
+
case "field-comparison":
|
|
116
|
+
case "field-truthiness":
|
|
117
|
+
return predicate.field === field;
|
|
118
|
+
case "all-of":
|
|
119
|
+
case "any-of":
|
|
120
|
+
return predicate.predicates.some((p) => predicateReferencesField(p, field));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ── Predicate builders ──────────────────────────────────────────────────────
|
|
124
|
+
export function eq(field, value) {
|
|
125
|
+
return { kind: "field-comparison", field, op: "eq", value };
|
|
126
|
+
}
|
|
127
|
+
export function neq(field, value) {
|
|
128
|
+
return { kind: "field-comparison", field, op: "neq", value };
|
|
129
|
+
}
|
|
130
|
+
export function gt(field, value) {
|
|
131
|
+
return { kind: "field-comparison", field, op: "gt", value };
|
|
132
|
+
}
|
|
133
|
+
export function gte(field, value) {
|
|
134
|
+
return { kind: "field-comparison", field, op: "gte", value };
|
|
135
|
+
}
|
|
136
|
+
export function lt(field, value) {
|
|
137
|
+
return { kind: "field-comparison", field, op: "lt", value };
|
|
138
|
+
}
|
|
139
|
+
export function lte(field, value) {
|
|
140
|
+
return { kind: "field-comparison", field, op: "lte", value };
|
|
141
|
+
}
|
|
142
|
+
export function truthy(field) {
|
|
143
|
+
return { kind: "field-truthiness", field, op: "truthy" };
|
|
144
|
+
}
|
|
145
|
+
export function falsy(field) {
|
|
146
|
+
return { kind: "field-truthiness", field, op: "falsy" };
|
|
147
|
+
}
|
|
148
|
+
export function allOf(...predicates) {
|
|
149
|
+
return { kind: "all-of", predicates };
|
|
150
|
+
}
|
|
151
|
+
export function anyOf(...predicates) {
|
|
152
|
+
return { kind: "any-of", predicates };
|
|
153
|
+
}
|
|
154
|
+
export function run(op) {
|
|
155
|
+
return { kind: "run", op };
|
|
156
|
+
}
|
|
157
|
+
export function report(reason) {
|
|
158
|
+
return { kind: "report", reason };
|
|
159
|
+
}
|
|
160
|
+
// ── Rules ────────────────────────────────────────────────────────────────────
|
|
161
|
+
/** A rule table's default flap-damping threshold (issue: "with a default"). */
|
|
162
|
+
export const DEFAULT_FLAP_THRESHOLD = 3;
|
|
163
|
+
/**
|
|
164
|
+
* Declare one converge rule. Throws immediately (build time — this runs
|
|
165
|
+
* while `chant build` evaluates the authoring `*.op.ts` file, exactly like
|
|
166
|
+
* `ApplyOp`'s `compensate` refusal) when `id` or `why` is missing or blank,
|
|
167
|
+
* or `flapThreshold` isn't a positive integer.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```ts
|
|
171
|
+
* when(eq("status", "drifted"), run("fountain-apply"), {
|
|
172
|
+
* id: "drift-apply",
|
|
173
|
+
* why: "Live config drifted from declared source; re-apply converges it back.",
|
|
174
|
+
* })
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export function when(predicate, action, opts) {
|
|
178
|
+
if (!opts.id || opts.id.trim().length === 0) {
|
|
179
|
+
throw new Error("when(): a rule must have a non-empty `id` (used for flap-damping and diagnostics)");
|
|
180
|
+
}
|
|
181
|
+
if (!opts.why || opts.why.trim().length === 0) {
|
|
182
|
+
throw new Error(`when("${opts.id}"): a rule must carry its \`why\` — every rule's rationale is required, refused at build otherwise`);
|
|
183
|
+
}
|
|
184
|
+
if (opts.flapThreshold !== undefined && (!Number.isInteger(opts.flapThreshold) || opts.flapThreshold < 1)) {
|
|
185
|
+
throw new Error(`when("${opts.id}"): flapThreshold must be a positive integer`);
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
id: opts.id,
|
|
189
|
+
when: predicate,
|
|
190
|
+
then: action,
|
|
191
|
+
why: opts.why,
|
|
192
|
+
...(opts.flapThreshold !== undefined ? { flapThreshold: opts.flapThreshold } : {}),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/** Every rule id in a table must be unique — flap-damping counters and dispatch/report accounting are keyed by id. */
|
|
196
|
+
export function duplicateRuleIds(rules) {
|
|
197
|
+
const seen = new Set();
|
|
198
|
+
const dupes = new Set();
|
|
199
|
+
for (const r of rules) {
|
|
200
|
+
if (seen.has(r.id))
|
|
201
|
+
dupes.add(r.id);
|
|
202
|
+
seen.add(r.id);
|
|
203
|
+
}
|
|
204
|
+
return [...dupes].sort();
|
|
205
|
+
}
|
package/dist/op/cron.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cron for an Op's own schedule (#2120) — validation at `Op()` construction
|
|
3
|
+
* and minute-granularity matching for `chant operator`'s per-op cadence.
|
|
4
|
+
*
|
|
5
|
+
* `OpConfig.schedule.cron` is runtime-neutral data: the github lexicon turns
|
|
6
|
+
* it into `on.schedule`, a hosting lexicon hands it to its own scheduler,
|
|
7
|
+
* `chant operator` reads it as that Op's tick cadence, and the local one-shot
|
|
8
|
+
* executor ignores it entirely. Nothing here talks to a scheduler.
|
|
9
|
+
*
|
|
10
|
+
* The validator a lexicon's own post-synth cron check imports rather than
|
|
11
|
+
* keeping its own copy:
|
|
12
|
+
* deliberately permissive, a pre-submission guard rather than a full parser,
|
|
13
|
+
* since the final word belongs to whichever scheduler runs the cron.
|
|
14
|
+
*
|
|
15
|
+
* {@link cronMatches} is stricter about what it can *evaluate* than
|
|
16
|
+
* {@link isValidCronExpression} is about what it accepts, so a field carrying
|
|
17
|
+
* a Quartz extension the evaluator does not implement (`L`, `W`, `#`, `?`)
|
|
18
|
+
* matches everything rather than nothing — an operator that ticks too often
|
|
19
|
+
* is a wasted converge, one that never ticks is a silent outage.
|
|
20
|
+
*/
|
|
21
|
+
/** Very permissive cron field pattern — catches obvious syntax errors. */
|
|
22
|
+
const CRON_FIELD = /^[0-9*,/\-?LW#]+$/;
|
|
23
|
+
/**
|
|
24
|
+
* True when `expr` looks like 5- or 6-field cron. Field-shape only: it does
|
|
25
|
+
* not check that a number is in range for its position, and it accepts the
|
|
26
|
+
* Quartz extensions (`L`, `W`, `#`, `?`) some schedulers take.
|
|
27
|
+
*/
|
|
28
|
+
export function isValidCronExpression(expr) {
|
|
29
|
+
const fields = expr.trim().split(/\s+/);
|
|
30
|
+
if (fields.length < 5 || fields.length > 6)
|
|
31
|
+
return false;
|
|
32
|
+
return fields.every((f) => CRON_FIELD.test(f));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The message `Op()` throws with and a lexicon's post-synth cron check
|
|
36
|
+
* reports, so one wording covers both the build-time refusal and the
|
|
37
|
+
* post-synth diagnostic.
|
|
38
|
+
*/
|
|
39
|
+
export function cronSyntaxMessage(expr) {
|
|
40
|
+
return `cron expression "${expr}" does not look like valid 5- or 6-field cron syntax`;
|
|
41
|
+
}
|
|
42
|
+
const ANY = { any: true };
|
|
43
|
+
/**
|
|
44
|
+
* Parse one field into the set of values it matches. Anything the evaluator
|
|
45
|
+
* cannot make sense of — a Quartz extension, an inverted range, a zero step —
|
|
46
|
+
* degrades to {@link ANY} rather than throwing: this runs on an expression
|
|
47
|
+
* `Op()` already accepted, and refusing at tick time would strand the Op.
|
|
48
|
+
*/
|
|
49
|
+
function parseField(field, min, max) {
|
|
50
|
+
if (field === "*" || field === "?" || /[LW#]/.test(field))
|
|
51
|
+
return ANY;
|
|
52
|
+
const values = new Set();
|
|
53
|
+
for (const part of field.split(",")) {
|
|
54
|
+
const [rangePart, stepPart] = part.split("/");
|
|
55
|
+
const step = stepPart === undefined ? 1 : Number(stepPart);
|
|
56
|
+
if (!Number.isInteger(step) || step < 1)
|
|
57
|
+
return ANY;
|
|
58
|
+
let lo;
|
|
59
|
+
let hi;
|
|
60
|
+
if (rangePart === "*" || rangePart === "") {
|
|
61
|
+
lo = min;
|
|
62
|
+
hi = max;
|
|
63
|
+
}
|
|
64
|
+
else if (rangePart.includes("-")) {
|
|
65
|
+
const [a, b] = rangePart.split("-");
|
|
66
|
+
lo = Number(a);
|
|
67
|
+
hi = Number(b);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
lo = Number(rangePart);
|
|
71
|
+
// `5/10` means "from 5, every 10" — a bare `5` means only 5.
|
|
72
|
+
hi = stepPart === undefined ? lo : max;
|
|
73
|
+
}
|
|
74
|
+
if (!Number.isInteger(lo) || !Number.isInteger(hi) || lo > hi)
|
|
75
|
+
return ANY;
|
|
76
|
+
for (let v = lo; v <= hi; v += step)
|
|
77
|
+
values.add(v);
|
|
78
|
+
}
|
|
79
|
+
return values.size === 0 ? ANY : { any: false, values };
|
|
80
|
+
}
|
|
81
|
+
function fieldMatches(spec, value) {
|
|
82
|
+
return spec.any || spec.values.has(value);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* True when `date` falls on a minute `expr` fires at, in the host's local
|
|
86
|
+
* time zone (the only clock the operator daemon has).
|
|
87
|
+
*
|
|
88
|
+
* A 6-field expression is read as Quartz's `second minute hour dom month dow`
|
|
89
|
+
* and the seconds field is dropped — nothing in chant ticks sub-minute.
|
|
90
|
+
* Day-of-month and day-of-week follow the usual cron rule: when both are
|
|
91
|
+
* restricted, either one matching is enough.
|
|
92
|
+
*/
|
|
93
|
+
export function cronMatches(expr, date) {
|
|
94
|
+
const fields = expr.trim().split(/\s+/);
|
|
95
|
+
const five = fields.length === 6 ? fields.slice(1) : fields;
|
|
96
|
+
if (five.length !== 5)
|
|
97
|
+
return false;
|
|
98
|
+
const [minuteF, hourF, domF, monthF, dowF] = five;
|
|
99
|
+
if (!fieldMatches(parseField(minuteF, 0, 59), date.getMinutes()))
|
|
100
|
+
return false;
|
|
101
|
+
if (!fieldMatches(parseField(hourF, 0, 23), date.getHours()))
|
|
102
|
+
return false;
|
|
103
|
+
if (!fieldMatches(parseField(monthF, 1, 12), date.getMonth() + 1))
|
|
104
|
+
return false;
|
|
105
|
+
const dom = parseField(domF, 1, 31);
|
|
106
|
+
const dow = parseField(dowF, 0, 7);
|
|
107
|
+
const weekday = date.getDay();
|
|
108
|
+
const domOk = fieldMatches(dom, date.getDate());
|
|
109
|
+
const dowOk = fieldMatches(dow, weekday) || (weekday === 0 && fieldMatches(dow, 7));
|
|
110
|
+
if (dom.any && dow.any)
|
|
111
|
+
return true;
|
|
112
|
+
if (dom.any)
|
|
113
|
+
return dowOk;
|
|
114
|
+
if (dow.any)
|
|
115
|
+
return domOk;
|
|
116
|
+
return domOk || dowOk;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The longest window {@link cronDueBetween} scans minute by minute. Past it
|
|
120
|
+
* the answer is "yes" without scanning: an operator that has not looked at an
|
|
121
|
+
* op for two days has certainly missed a fire of any cron worth putting on an
|
|
122
|
+
* Op, and the alternative — 100k iterations on a clock jump — buys nothing.
|
|
123
|
+
*/
|
|
124
|
+
const MAX_SCAN_MINUTES = 2 * 24 * 60;
|
|
125
|
+
/**
|
|
126
|
+
* True when `expr` fires at some minute in `(after, upTo]` — what a round
|
|
127
|
+
* asks for an Op it last ticked at `after`. Level-triggered on purpose: a
|
|
128
|
+
* round that arrives late still ticks the Op it owes rather than waiting for
|
|
129
|
+
* the next exact match, and several missed fires collapse into the one tick a
|
|
130
|
+
* convergent verb needs.
|
|
131
|
+
*/
|
|
132
|
+
export function cronDueBetween(expr, after, upTo) {
|
|
133
|
+
if (upTo.getTime() <= after.getTime())
|
|
134
|
+
return false;
|
|
135
|
+
const startMs = Math.floor(after.getTime() / 60000) * 60000 + 60000;
|
|
136
|
+
if (startMs > upTo.getTime())
|
|
137
|
+
return false;
|
|
138
|
+
const spanMinutes = Math.floor((upTo.getTime() - startMs) / 60000) + 1;
|
|
139
|
+
if (spanMinutes > MAX_SCAN_MINUTES)
|
|
140
|
+
return true;
|
|
141
|
+
for (let i = 0; i < spanMinutes; i++) {
|
|
142
|
+
if (cronMatches(expr, new Date(startMs + i * 60000)))
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|