@intentius/chant 0.101.0 → 0.104.0
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/dist/agents/checks.d.ts.map +1 -1
- package/dist/attrref.d.ts.map +1 -1
- package/dist/audit/core.d.ts +2 -0
- package/dist/audit/core.d.ts.map +1 -1
- package/dist/audit/discover.d.ts.map +1 -1
- package/dist/audit/nginx.d.ts.map +1 -1
- package/dist/audit/prior-art.d.ts +48 -0
- package/dist/audit/prior-art.d.ts.map +1 -1
- package/dist/behaviour-kinds.d.ts.map +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/change-set.d.ts +232 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/cli/commands/audit.d.ts +7 -0
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/carve-emit.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.d.ts +16 -0
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/import.d.ts +8 -0
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/onboard.d.ts +9 -0
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/pinned-upgrade.d.ts +19 -5
- package/dist/cli/commands/pinned-upgrade.d.ts.map +1 -1
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/change-set.d.ts +11 -0
- package/dist/cli/handlers/change-set.d.ts.map +1 -0
- package/dist/cli/handlers/dev.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.d.ts +33 -0
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/operator.d.ts +16 -0
- package/dist/cli/handlers/operator.d.ts.map +1 -1
- package/dist/cli/handlers/pr.d.ts +31 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -0
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/lsp/server.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/mcp/op-tools.d.ts.map +1 -1
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/tools/build.d.ts.map +1 -1
- package/dist/cli/mcp/tools/composites.d.ts.map +1 -1
- package/dist/cli/mcp/tools/explain.d.ts.map +1 -1
- package/dist/cli/mcp/tools/import.d.ts.map +1 -1
- package/dist/cli/mcp/tools/lint.d.ts.map +1 -1
- package/dist/cli/mcp/tools/scaffold.d.ts.map +1 -1
- package/dist/cli/mcp/tools/search.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.d.ts +4 -3
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +74 -3
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/codegen/fetch.d.ts.map +1 -1
- package/dist/codegen/naming.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.d.ts +67 -3
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/registry.d.ts.map +1 -1
- package/dist/components/auto-release.d.ts +16 -0
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability.d.ts +53 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/changed-files.d.ts +31 -0
- package/dist/components/changed-files.d.ts.map +1 -0
- package/dist/components/cli-support.d.ts +9 -1
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/component.d.ts +24 -0
- package/dist/components/component.d.ts.map +1 -1
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/components/driver.d.ts +13 -0
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/fan-out-output.d.ts +6 -0
- package/dist/components/fan-out-output.d.ts.map +1 -1
- package/dist/components/fan-out-record.d.ts +41 -0
- package/dist/components/fan-out-record.d.ts.map +1 -0
- package/dist/components/fan-out-run.d.ts +65 -0
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-support.d.ts +2 -0
- package/dist/components/fan-out-support.d.ts.map +1 -1
- package/dist/components/fan-out.d.ts +6 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/gated-wave-pipeline.d.ts +50 -0
- package/dist/components/gated-wave-pipeline.d.ts.map +1 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/layers.d.ts +25 -0
- package/dist/components/layers.d.ts.map +1 -0
- package/dist/components/pr-pipeline.d.ts +61 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -0
- package/dist/components/pr-run.d.ts +119 -0
- package/dist/components/pr-run.d.ts.map +1 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/verbs/process-runner.d.ts.map +1 -1
- package/dist/components/verbs/r2-sync.d.ts.map +1 -1
- package/dist/components/verbs/run-agent.d.ts.map +1 -1
- package/dist/components/verbs/sbom-generator.d.ts.map +1 -1
- package/dist/components/verbs/shell.d.ts.map +1 -1
- package/dist/components/verbs/sign.d.ts.map +1 -1
- package/dist/components/verbs/verify.d.ts.map +1 -1
- package/dist/components/verbs/vuln-gate.d.ts.map +1 -1
- package/dist/components/verbs/vuln-scan.d.ts.map +1 -1
- package/dist/components/verbs/wrangler.d.ts.map +1 -1
- package/dist/components/wave-plan.d.ts +49 -0
- package/dist/components/wave-plan.d.ts.map +1 -0
- package/dist/composite.d.ts.map +1 -1
- package/dist/config.d.ts +19 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/declarable.d.ts +16 -0
- package/dist/declarable.d.ts.map +1 -1
- package/dist/discovery/cache.d.ts.map +1 -1
- package/dist/discovery/fold-import.d.ts +15 -5
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/param-deps.d.ts +16 -0
- package/dist/discovery/param-deps.d.ts.map +1 -1
- package/dist/discovery/sandbox/policy-wire.d.ts.map +1 -1
- package/dist/discovery/specifier-resolve.d.ts +37 -0
- package/dist/discovery/specifier-resolve.d.ts.map +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/fold/fold.d.ts +3 -1
- package/dist/fold/fold.d.ts.map +1 -1
- package/dist/gated-waves.d.ts +147 -0
- package/dist/gated-waves.d.ts.map +1 -0
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-layout.d.ts.map +1 -1
- package/dist/import/base-parser.d.ts.map +1 -1
- package/dist/import/embedded.d.ts +7 -0
- package/dist/import/embedded.d.ts.map +1 -1
- package/dist/import/parser-options.d.ts +14 -0
- package/dist/import/parser-options.d.ts.map +1 -0
- package/dist/import/parser.d.ts +17 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/kubectl-context.d.ts.map +1 -1
- package/dist/lexicon-output.d.ts.map +1 -1
- package/dist/lexicon-schema.d.ts +3 -3
- package/dist/lexicon.d.ts +103 -3
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/assert-live.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +22 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +46 -1
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/member-ledger.d.ts.map +1 -1
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/plan-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/scenario.d.ts.map +1 -1
- package/dist/lifecycle/status.d.ts.map +1 -1
- package/dist/lifecycle/work-lease.d.ts +61 -2
- package/dist/lifecycle/work-lease.d.ts.map +1 -1
- package/dist/lint/config.d.ts +8 -8
- package/dist/lint/engine.d.ts +6 -0
- package/dist/lint/engine.d.ts.map +1 -1
- package/dist/lint/post-synth.d.ts +18 -0
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lsp/lexicon-providers.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.d.ts +137 -11
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/apply.d.ts +79 -9
- package/dist/op/activities/apply.d.ts.map +1 -1
- package/dist/op/activities/change-set.d.ts +62 -0
- package/dist/op/activities/change-set.d.ts.map +1 -0
- package/dist/op/activities/decide.d.ts +2 -0
- package/dist/op/activities/decide.d.ts.map +1 -1
- package/dist/op/activities/factory.d.ts +137 -0
- package/dist/op/activities/factory.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +5 -1
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/lexicon-upgrade.d.ts +44 -12
- package/dist/op/activities/lexicon-upgrade.d.ts.map +1 -1
- package/dist/op/activity-contract.d.ts +1 -1
- package/dist/op/activity-contract.d.ts.map +1 -1
- package/dist/op/activity-failure.d.ts.map +1 -1
- package/dist/op/activity-profiles.d.ts.map +1 -1
- package/dist/op/builders.d.ts +11 -0
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/composites/apply-op.d.ts +12 -5
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/lexicon-upgrade-op.d.ts +22 -6
- package/dist/op/composites/lexicon-upgrade-op.d.ts.map +1 -1
- package/dist/op/decide-backend.d.ts +5 -1
- package/dist/op/decide-backend.d.ts.map +1 -1
- package/dist/op/decide-read-inputs.d.ts +4 -2
- package/dist/op/decide-read-inputs.d.ts.map +1 -1
- package/dist/op/emulator-lifecycle.d.ts +21 -2
- package/dist/op/emulator-lifecycle.d.ts.map +1 -1
- package/dist/op/factory.d.ts +83 -0
- package/dist/op/factory.d.ts.map +1 -0
- package/dist/op/gate-approval.d.ts +5 -1
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-wait.d.ts.map +1 -1
- package/dist/op/gate.d.ts +19 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/index.d.ts +6 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/local-executor.d.ts +6 -0
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/op-ir.d.ts +2 -0
- package/dist/op/op-ir.d.ts.map +1 -1
- package/dist/op/op-verb-class.d.ts.map +1 -1
- package/dist/op/operator.d.ts.map +1 -1
- package/dist/op/run-context.d.ts +39 -0
- package/dist/op/run-context.d.ts.map +1 -0
- package/dist/op/run-live.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/source-archive.d.ts.map +1 -1
- package/dist/op/steward-beside.d.ts.map +1 -1
- package/dist/op/steward-points.d.ts.map +1 -1
- package/dist/op/steward.d.ts.map +1 -1
- package/dist/op/types.d.ts +16 -3
- package/dist/op/types.d.ts.map +1 -1
- package/dist/op/work-lease-run.d.ts +24 -4
- package/dist/op/work-lease-run.d.ts.map +1 -1
- package/dist/plan-summary.d.ts +207 -0
- package/dist/plan-summary.d.ts.map +1 -0
- package/dist/pr-forge.d.ts +105 -0
- package/dist/pr-forge.d.ts.map +1 -0
- package/dist/pr-loop.d.ts +178 -0
- package/dist/pr-loop.d.ts.map +1 -0
- package/dist/project-root.d.ts.map +1 -1
- package/dist/provenance.d.ts +21 -0
- package/dist/provenance.d.ts.map +1 -1
- package/dist/pseudo-parameter.d.ts.map +1 -1
- package/dist/reconcile.d.ts.map +1 -1
- package/dist/secret-materialization.d.ts.map +1 -1
- package/dist/telemetry-attribution.d.ts +31 -0
- package/dist/telemetry-attribution.d.ts.map +1 -1
- package/dist/terraform/emit-source.d.ts.map +1 -1
- package/dist/terraform/hcl2json.d.ts +45 -0
- package/dist/terraform/hcl2json.d.ts.map +1 -0
- package/dist/terraform/parse.d.ts +4 -40
- package/dist/terraform/parse.d.ts.map +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/decide-workspace.d.ts +1 -1
- package/dist/workspace/__fixtures__/decide-workspace.d.ts.map +1 -1
- package/dist/workspace/agent-cli.d.ts +5 -0
- package/dist/workspace/agent-cli.d.ts.map +1 -1
- package/dist/workspace/box-cli.d.ts +12 -0
- package/dist/workspace/box-cli.d.ts.map +1 -0
- package/dist/workspace/box-factory.d.ts +97 -0
- package/dist/workspace/box-factory.d.ts.map +1 -0
- package/dist/workspace/box-listing.d.ts +85 -0
- package/dist/workspace/box-listing.d.ts.map +1 -0
- package/dist/workspace/box-publish.d.ts +147 -0
- package/dist/workspace/box-publish.d.ts.map +1 -0
- package/dist/workspace/broker-protocol.d.ts +190 -0
- package/dist/workspace/broker-protocol.d.ts.map +1 -0
- package/dist/workspace/changes.d.ts.map +1 -1
- package/dist/workspace/chant-migrations/chud-lexicon-exit.d.ts.map +1 -1
- package/dist/workspace/checks/boxes.d.ts.map +1 -1
- package/dist/workspace/checks.d.ts +5 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/compose-graph.d.ts +10 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/composites.d.ts +2 -2
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts +17 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts.map +1 -0
- package/dist/workspace/conformance/broker.d.ts +202 -0
- package/dist/workspace/conformance/broker.d.ts.map +1 -0
- package/dist/workspace/conformance/index.d.ts +68 -6
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/vitest.d.ts +19 -3
- package/dist/workspace/conformance/vitest.d.ts.map +1 -1
- package/dist/workspace/conformance/writer.d.ts +462 -0
- package/dist/workspace/conformance/writer.d.ts.map +1 -0
- package/dist/workspace/decide.d.ts +126 -12
- package/dist/workspace/decide.d.ts.map +1 -1
- package/dist/workspace/decision-points.schema.json +11 -4
- package/dist/workspace/declaration.d.ts +156 -4
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.schema.json +383 -5
- package/dist/workspace/environments.d.ts +36 -10
- package/dist/workspace/environments.d.ts.map +1 -1
- package/dist/workspace/factory-rules.d.ts +180 -0
- package/dist/workspace/factory-rules.d.ts.map +1 -0
- package/dist/workspace/generated-files.d.ts.map +1 -1
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cli.d.ts +2 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/identity.d.ts +111 -0
- package/dist/workspace/identity.d.ts.map +1 -0
- package/dist/workspace/init.d.ts +21 -0
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/intent-cli.d.ts +7 -4
- package/dist/workspace/intent-cli.d.ts.map +1 -1
- package/dist/workspace/intent-record.d.ts +36 -2
- package/dist/workspace/intent-record.d.ts.map +1 -1
- package/dist/workspace/intent.d.ts +249 -8
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/json-edit.d.ts +24 -0
- package/dist/workspace/json-edit.d.ts.map +1 -0
- package/dist/workspace/jsonc.d.ts +11 -0
- package/dist/workspace/jsonc.d.ts.map +1 -1
- package/dist/workspace/kinds.d.ts +66 -4
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/lexicon-symbols.d.ts +29 -0
- package/dist/workspace/lexicon-symbols.d.ts.map +1 -0
- package/dist/workspace/lineage-hash-index.d.ts.map +1 -1
- package/dist/workspace/lineage-lock.d.ts +2 -2
- package/dist/workspace/lineage-lock.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.d.ts +31 -2
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/point-answer.schema.json +42 -2
- package/dist/workspace/points-cli.d.ts +10 -3
- package/dist/workspace/points-cli.d.ts.map +1 -1
- package/dist/workspace/points.d.ts +66 -5
- package/dist/workspace/points.d.ts.map +1 -1
- package/dist/workspace/principal-classes.d.ts +114 -0
- package/dist/workspace/principal-classes.d.ts.map +1 -0
- package/dist/workspace/reason-codes.d.ts +53 -4
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/record-assets.d.ts.map +1 -1
- package/dist/workspace/record-sessions.d.ts +5 -7
- package/dist/workspace/record-sessions.d.ts.map +1 -1
- package/dist/workspace/records-checkout.d.ts +54 -0
- package/dist/workspace/records-checkout.d.ts.map +1 -0
- package/dist/workspace/records-cli.d.ts +34 -1
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-close.d.ts +7 -3
- package/dist/workspace/records-close.d.ts.map +1 -1
- package/dist/workspace/records-since.d.ts.map +1 -1
- package/dist/workspace/records-write.d.ts +68 -7
- package/dist/workspace/records-write.d.ts.map +1 -1
- package/dist/workspace/records.d.ts +43 -9
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/runs-cli.d.ts +296 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -0
- package/dist/workspace/runs.d.ts +544 -0
- package/dist/workspace/runs.d.ts.map +1 -0
- package/dist/workspace/session-kinds.d.ts +1 -1
- package/dist/workspace/session-kinds.d.ts.map +1 -1
- package/dist/workspace/source-block.d.ts +1 -1
- package/dist/workspace/source-block.d.ts.map +1 -1
- package/dist/workspace/squash.d.ts +80 -0
- package/dist/workspace/squash.d.ts.map +1 -0
- package/dist/workspace/status-gates.d.ts +17 -3
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +64 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/symbols.d.ts +63 -0
- package/dist/workspace/symbols.d.ts.map +1 -0
- package/dist/workspace/trailer-joins.d.ts +46 -0
- package/dist/workspace/trailer-joins.d.ts.map +1 -0
- package/dist/workspace/trailers.d.ts +89 -0
- package/dist/workspace/trailers.d.ts.map +1 -0
- package/dist/workspace/trust/attestor.d.ts.map +1 -1
- package/dist/workspace/trust/rotation.d.ts.map +1 -1
- package/dist/workspace/trust/run-commits.d.ts +46 -0
- package/dist/workspace/trust/run-commits.d.ts.map +1 -0
- package/dist/workspace/trust/run-statement.d.ts +128 -0
- package/dist/workspace/trust/run-statement.d.ts.map +1 -0
- package/dist/workspace/trust/seal.d.ts +38 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/test-repo.d.ts.map +1 -1
- package/dist/workspace/trust/verify-cli.d.ts +1 -1
- package/dist/workspace/trust/verify.d.ts +16 -2
- package/dist/workspace/trust/verify.d.ts.map +1 -1
- package/dist/workspace/wip-cli.d.ts +21 -0
- package/dist/workspace/wip-cli.d.ts.map +1 -0
- package/dist/workspace/wip.d.ts +268 -0
- package/dist/workspace/wip.d.ts.map +1 -0
- package/dist/workspace/work-cli.d.ts +39 -3
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-evidence.d.ts +1 -1
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work-size.d.ts +55 -0
- package/dist/workspace/work-size.d.ts.map +1 -0
- package/dist/workspace/work.d.ts +26 -1
- package/dist/workspace/work.d.ts.map +1 -1
- package/dist/workspace/workspace-kinds.schema.json +122 -0
- package/dist/workspace/workspace-principals.schema.json +60 -0
- package/dist/workspace/write-lock-cli.d.ts +60 -0
- package/dist/workspace/write-lock-cli.d.ts.map +1 -0
- package/dist/workspace/write-lock.d.ts +152 -0
- package/dist/workspace/write-lock.d.ts.map +1 -0
- package/dist/workspace/write-scope.d.ts +83 -19
- package/dist/workspace/write-scope.d.ts.map +1 -1
- package/dist/yaml.d.ts +21 -39
- package/dist/yaml.d.ts.map +1 -1
- package/package.json +7 -2
- package/src/__fixtures__/change-set/lifecycle-plan.floci.json +59 -0
- package/src/__fixtures__/change-set/lifecycle-v1.ts.txt +4 -0
- package/src/__fixtures__/change-set/lifecycle-v2.ts.txt +4 -0
- package/src/__fixtures__/change-set/lifecycle.change-set.golden.json +95 -0
- package/src/__fixtures__/change-set/warden.change-set.golden.json +106 -0
- package/src/__fixtures__/change-set/warden.plan.json +44 -0
- package/src/__fixtures__/plan-summary/normalization-vectors.json +1593 -0
- package/src/__fixtures__/pr-loop/pr-apply-applied.note.golden.md +31 -0
- package/src/__fixtures__/pr-loop/pr-apply-refused.note.golden.md +31 -0
- package/src/__fixtures__/pr-loop/pr-plan.golden.json +127 -0
- package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +37 -0
- package/src/audit/core.test.ts +15 -0
- package/src/audit/core.ts +8 -2
- package/src/audit/discover.test.ts +11 -0
- package/src/audit/discover.ts +7 -2
- package/src/audit/prior-art.ts +15 -0
- package/src/change-set-bundle.test.ts +57 -0
- package/src/change-set.test.ts +215 -0
- package/src/change-set.ts +445 -0
- package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +1 -1
- package/src/cli/commands/audit-opt-in.test.ts +54 -0
- package/src/cli/commands/audit.ts +29 -2
- package/src/cli/commands/build.test.ts +19 -0
- package/src/cli/commands/build.ts +3 -2
- package/src/cli/commands/carve-emit-state.test.ts +4 -0
- package/src/cli/commands/carve-emit.ts +5 -19
- package/src/cli/commands/check-lexicon.test.ts +62 -1
- package/src/cli/commands/check-lexicon.ts +36 -6
- package/src/cli/commands/import-live.test.ts +18 -0
- package/src/cli/commands/import-parser-options.test.ts +133 -0
- package/src/cli/commands/import.ts +21 -3
- package/src/cli/commands/init-lexicon/templates/project.ts +1 -1
- package/src/cli/commands/init.test.ts +8 -1
- package/src/cli/commands/init.ts +23 -8
- package/src/cli/commands/lint.test.ts +37 -0
- package/src/cli/commands/onboard.test.ts +53 -3
- package/src/cli/commands/onboard.ts +52 -4
- package/src/cli/commands/pinned-upgrade.ts +73 -33
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +2 -2
- package/src/cli/handlers/build.ts +13 -1
- package/src/cli/handlers/change-set.test.ts +56 -0
- package/src/cli/handlers/change-set.ts +44 -0
- package/src/cli/handlers/components.ts +2 -2
- package/src/cli/handlers/dev.ts +8 -6
- package/src/cli/handlers/fan-out.test.ts +221 -2
- package/src/cli/handlers/fan-out.ts +165 -75
- package/src/cli/handlers/graph.ts +3 -0
- package/src/cli/handlers/lifecycle.test.ts +67 -0
- package/src/cli/handlers/lifecycle.ts +6 -5
- package/src/cli/handlers/misc.ts +2 -0
- package/src/cli/handlers/operator.test.ts +21 -0
- package/src/cli/handlers/operator.ts +121 -6
- package/src/cli/handlers/pr.ts +373 -0
- package/src/cli/handlers/run.test.ts +111 -0
- package/src/cli/handlers/run.ts +86 -24
- package/src/cli/handlers/scenario.ts +2 -2
- package/src/cli/main.test.ts +21 -0
- package/src/cli/main.ts +246 -30
- package/src/cli/mcp/never-over-mcp.test.ts +101 -0
- package/src/cli/mcp/op-tools.ts +24 -2
- package/src/cli/mcp/workspace-tools.test.ts +5 -2
- package/src/cli/mcp/workspace-tools.ts +62 -7
- package/src/cli/registry.ts +74 -3
- package/src/codegen/pinned-upgrade-multi.test.ts +157 -0
- package/src/codegen/pinned-upgrade-tags.test.ts +112 -0
- package/src/codegen/pinned-upgrade.test.ts +104 -0
- package/src/codegen/pinned-upgrade.ts +250 -56
- package/src/codegen/testdata/postgres-tags.json +242 -0
- package/src/components/auto-release.ts +1 -1
- package/src/components/capability.ts +55 -0
- package/src/components/changed-files.ts +66 -0
- package/src/components/cli-support.ts +28 -5
- package/src/components/component.schema.json +17 -0
- package/src/components/component.ts +25 -0
- package/src/components/deploy-units.ts +3 -0
- package/src/components/driver.test.ts +52 -0
- package/src/components/driver.ts +31 -13
- package/src/components/fan-out-output.ts +42 -1
- package/src/components/fan-out-record.ts +69 -0
- package/src/components/fan-out-run.test.ts +17 -0
- package/src/components/fan-out-run.ts +304 -1
- package/src/components/fan-out-support.ts +3 -0
- package/src/components/fan-out-waves.test.ts +375 -0
- package/src/components/fan-out.ts +18 -17
- package/src/components/gated-wave-pipeline.ts +82 -0
- package/src/components/index.ts +1 -0
- package/src/components/layers.ts +30 -0
- package/src/components/pr-pipeline.ts +91 -0
- package/src/components/pr-run.test.ts +205 -0
- package/src/components/pr-run.ts +280 -0
- package/src/components/promote.ts +5 -0
- package/src/components/verbs/shell.test.ts +11 -0
- package/src/components/verbs/shell.ts +7 -3
- package/src/components/wave-plan.ts +124 -0
- package/src/config.test.ts +21 -0
- package/src/config.ts +15 -0
- package/src/declarable.test.ts +21 -0
- package/src/declarable.ts +19 -0
- package/src/discovery/fold-composite.test.ts +41 -5
- package/src/discovery/fold-import.test.ts +129 -0
- package/src/discovery/fold-import.ts +643 -131
- package/src/discovery/fold-package-composite.test.ts +264 -0
- package/src/discovery/fold-specifiers.test.ts +191 -0
- package/src/discovery/param-deps.test.ts +66 -1
- package/src/discovery/param-deps.ts +45 -0
- package/src/discovery/sandbox/bundle.ts +1 -1
- package/src/discovery/specifier-resolve.ts +344 -0
- package/src/fold/fold.test.ts +39 -1
- package/src/fold/fold.ts +83 -9
- package/src/fold-provenance.test.ts +140 -0
- package/src/gated-waves-bundle.test.ts +62 -0
- package/src/gated-waves.test.ts +118 -0
- package/src/gated-waves.ts +240 -0
- package/src/graph-ir.test.ts +83 -0
- package/src/graph-ir.ts +29 -0
- package/src/import/embedded.test.ts +20 -0
- package/src/import/embedded.ts +13 -0
- package/src/import/parser-options.ts +46 -0
- package/src/import/parser.ts +20 -0
- package/src/index.ts +1 -0
- package/src/lexicon.ts +106 -3
- package/src/lifecycle/gate-ledger.ts +23 -0
- package/src/lifecycle/git.ts +102 -16
- package/src/lifecycle/observe.test.ts +18 -0
- package/src/lifecycle/observe.ts +6 -4
- package/src/lifecycle/snapshot.ts +2 -2
- package/src/lifecycle/work-lease.test.ts +1 -1
- package/src/lifecycle/work-lease.ts +93 -2
- package/src/lint/engine.test.ts +55 -0
- package/src/lint/engine.ts +30 -4
- package/src/lint/output-docs.test.ts +59 -56
- package/src/lint/post-synth.test.ts +19 -0
- package/src/lint/post-synth.ts +19 -1
- package/src/meta/declared-imports.test.ts +1 -1
- package/src/op/activities/activity-contracts.ts +84 -0
- package/src/op/activities/apply.test.ts +189 -5
- package/src/op/activities/apply.ts +230 -8
- package/src/op/activities/change-set.ts +114 -0
- package/src/op/activities/decide.ts +3 -0
- package/src/op/activities/factory.ts +675 -0
- package/src/op/activities/index.ts +9 -0
- package/src/op/activities/lexicon-upgrade.test.ts +160 -6
- package/src/op/activities/lexicon-upgrade.ts +154 -51
- package/src/op/activity-contract.test.ts +21 -1
- package/src/op/activity-contract.ts +19 -9
- package/src/op/builders.ts +23 -0
- package/src/op/composites/apply-op.ts +12 -5
- package/src/op/composites/composites.test.ts +30 -3
- package/src/op/composites/lexicon-upgrade-op.test.ts +7 -2
- package/src/op/composites/lexicon-upgrade-op.ts +29 -8
- package/src/op/decide-backend.ts +5 -1
- package/src/op/decide-read-inputs.ts +33 -5
- package/src/op/emulator-lifecycle.test.ts +23 -0
- package/src/op/emulator-lifecycle.ts +52 -14
- package/src/op/factory.e2e.test.ts +232 -0
- package/src/op/factory.ts +118 -0
- package/src/op/gate-approval.test.ts +74 -0
- package/src/op/gate-approval.ts +5 -1
- package/src/op/gate.ts +31 -5
- package/src/op/index.ts +11 -1
- package/src/op/local-executor.test.ts +15 -0
- package/src/op/local-executor.ts +40 -12
- package/src/op/local-output.ts +1 -1
- package/src/op/op-ir.test.ts +9 -0
- package/src/op/op-ir.ts +4 -0
- package/src/op/op-verb-class.ts +3 -0
- package/src/op/operator.ts +4 -0
- package/src/op/run-context.test.ts +141 -0
- package/src/op/run-context.ts +51 -0
- package/src/op/runtimes/local.test.ts +14 -0
- package/src/op/runtimes/local.ts +2 -0
- package/src/op/steward-beside.ts +2 -0
- package/src/op/types.ts +16 -3
- package/src/op/work-lease-run.test.ts +47 -0
- package/src/op/work-lease-run.ts +76 -11
- package/src/plan-summary.test.ts +263 -0
- package/src/plan-summary.ts +845 -0
- package/src/pr-forge.test.ts +237 -0
- package/src/pr-forge.ts +332 -0
- package/src/pr-loop-bundle.test.ts +46 -0
- package/src/pr-loop.test.ts +171 -0
- package/src/pr-loop.ts +324 -0
- package/src/provenance.ts +35 -0
- package/src/telemetry-attribution.test.ts +23 -1
- package/src/telemetry-attribution.ts +51 -0
- package/src/terraform/hcl2json.test.ts +21 -0
- package/src/terraform/hcl2json.ts +81 -0
- package/src/terraform/parse.ts +11 -74
- package/src/workspace/agent-cli.ts +7 -3
- package/src/workspace/agent.schema.json +22 -0
- package/src/workspace/app-kind.test.ts +196 -0
- package/src/workspace/box-cli.ts +113 -0
- package/src/workspace/box-factory.test.ts +323 -0
- package/src/workspace/box-factory.ts +136 -0
- package/src/workspace/box-listing-write.schema.json +204 -0
- package/src/workspace/box-listing.test.ts +234 -0
- package/src/workspace/box-listing.ts +324 -0
- package/src/workspace/box-publish.schema.json +498 -0
- package/src/workspace/box-publish.test.ts +204 -0
- package/src/workspace/box-publish.ts +420 -0
- package/src/workspace/box-ship.test.ts +96 -0
- package/src/workspace/broker-protocol.schema.json +186 -0
- package/src/workspace/broker-protocol.test.ts +122 -0
- package/src/workspace/broker-protocol.ts +317 -0
- package/src/workspace/builder-tiers.test.ts +146 -0
- package/src/workspace/change-set.schema.json +460 -0
- package/src/workspace/changes.schema.json +12 -20
- package/src/workspace/changes.ts +4 -1
- package/src/workspace/chant-migrations.e2e.test.ts +17 -5
- package/src/workspace/checks/boxes.test.ts +5 -0
- package/src/workspace/checks.ts +39 -8
- package/src/workspace/component-environments.test.ts +105 -0
- package/src/workspace/compose-graph.ts +7 -0
- package/src/workspace/composites.schema.json +23 -4
- package/src/workspace/composites.test.ts +8 -8
- package/src/workspace/composites.ts +13 -2
- package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +2 -2
- package/src/workspace/conformance/__fixtures__/reference-broker.ts +207 -0
- package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/src/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/src/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/src/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/src/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/src/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/src/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/src/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/src/workspace/conformance/broker.test.ts +122 -0
- package/src/workspace/conformance/broker.ts +792 -0
- package/src/workspace/conformance/conformance.e2e.test.ts +36 -3
- package/src/workspace/conformance/index.mjs +51 -3
- package/src/workspace/conformance/index.ts +107 -15
- package/src/workspace/conformance/vitest.ts +76 -2
- package/src/workspace/conformance/writer-conformance.e2e.test.ts +177 -0
- package/src/workspace/conformance/writer.test.ts +186 -0
- package/src/workspace/conformance/writer.ts +1191 -0
- package/src/workspace/decide.test.ts +208 -4
- package/src/workspace/decide.ts +433 -73
- package/src/workspace/decision-points.schema.json +11 -4
- package/src/workspace/declaration.schema.json +383 -5
- package/src/workspace/declaration.ts +315 -10
- package/src/workspace/environments.ts +66 -14
- package/src/workspace/factory-rules.test.ts +62 -0
- package/src/workspace/factory-rules.ts +218 -0
- package/src/workspace/graph-cli.ts +6 -3
- package/src/workspace/graph.schema.json +314 -0
- package/src/workspace/identity.test.ts +219 -0
- package/src/workspace/identity.ts +186 -0
- package/src/workspace/init.ts +82 -2
- package/src/workspace/intent-cli.ts +84 -13
- package/src/workspace/intent-patch-id.test.ts +162 -0
- package/src/workspace/intent-record.schema.json +336 -1
- package/src/workspace/intent-record.ts +96 -16
- package/src/workspace/intent-reviews.test.ts +76 -0
- package/src/workspace/intent-squash.test.ts +213 -0
- package/src/workspace/intent-why.test.ts +274 -0
- package/src/workspace/intent.schema.json +950 -9
- package/src/workspace/intent.test.ts +11 -2
- package/src/workspace/intent.ts +722 -65
- package/src/workspace/json-edit.test.ts +121 -0
- package/src/workspace/json-edit.ts +142 -0
- package/src/workspace/jsonc.ts +20 -0
- package/src/workspace/kinds.ts +201 -39
- package/src/workspace/lexicon-symbols.test.ts +148 -0
- package/src/workspace/lexicon-symbols.ts +125 -0
- package/src/workspace/lineage-upgrade.test.ts +63 -0
- package/src/workspace/lineage-upgrade.ts +146 -5
- package/src/workspace/plan-summary.schema.json +155 -0
- package/src/workspace/point-answer.schema.json +42 -2
- package/src/workspace/points-cli.ts +42 -16
- package/src/workspace/points-write.schema.json +163 -4
- package/src/workspace/points.schema.json +157 -2
- package/src/workspace/points.test.ts +13 -1
- package/src/workspace/points.ts +118 -12
- package/src/workspace/pr-report.schema.json +95 -0
- package/src/workspace/principal-classes.test.ts +175 -0
- package/src/workspace/principal-classes.ts +307 -0
- package/src/workspace/profiles.test.ts +159 -0
- package/src/workspace/read-contract.test.ts +2 -2
- package/src/workspace/reason-codes.test.ts +23 -3
- package/src/workspace/reason-codes.ts +61 -4
- package/src/workspace/record-sessions.ts +9 -8
- package/src/workspace/records-amend.schema.json +80 -0
- package/src/workspace/records-checkout.ts +106 -0
- package/src/workspace/records-cli.ts +123 -17
- package/src/workspace/records-close.schema.json +79 -0
- package/src/workspace/records-close.ts +31 -7
- package/src/workspace/records-concurrent.e2e.test.ts +135 -0
- package/src/workspace/records-concurrent.test.ts +145 -0
- package/src/workspace/records-formats.test.ts +46 -10
- package/src/workspace/records-new.schema.json +9 -0
- package/src/workspace/records-review.schema.json +80 -0
- package/src/workspace/records-sessions-write.test.ts +69 -0
- package/src/workspace/records-sessions.test.ts +22 -0
- package/src/workspace/records-uncommitted.test.ts +171 -0
- package/src/workspace/records-write.ts +219 -30
- package/src/workspace/records.schema.json +88 -1
- package/src/workspace/records.ts +76 -8
- package/src/workspace/reference-kinds/app/package.json +10 -0
- package/src/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/src/workspace/run-statement.schema.json +622 -0
- package/src/workspace/runs-cli.ts +710 -0
- package/src/workspace/runs-statement.test.ts +239 -0
- package/src/workspace/runs-write.schema.json +994 -0
- package/src/workspace/runs.schema.json +1257 -0
- package/src/workspace/runs.test.ts +281 -0
- package/src/workspace/runs.ts +970 -0
- package/src/workspace/session-kinds.ts +3 -3
- package/src/workspace/squash.ts +198 -0
- package/src/workspace/status-contract.test.ts +10 -2
- package/src/workspace/status-gates.ts +25 -9
- package/src/workspace/status.schema.json +252 -4
- package/src/workspace/status.ts +110 -1
- package/src/workspace/symbols.ts +191 -0
- package/src/workspace/trailer-joins.test.ts +171 -0
- package/src/workspace/trailer-joins.ts +82 -0
- package/src/workspace/trailers.ts +148 -0
- package/src/workspace/trust/run-commits.ts +115 -0
- package/src/workspace/trust/run-statement.ts +226 -0
- package/src/workspace/trust/seal.ts +58 -1
- package/src/workspace/trust/verify-cli.ts +6 -5
- package/src/workspace/trust/verify.ts +39 -6
- package/src/workspace/wip-cli.ts +97 -0
- package/src/workspace/wip-write.schema.json +504 -0
- package/src/workspace/wip.schema.json +334 -0
- package/src/workspace/wip.test.ts +294 -0
- package/src/workspace/wip.ts +753 -0
- package/src/workspace/work-cli.e2e.test.ts +28 -1
- package/src/workspace/work-cli.ts +136 -8
- package/src/workspace/work-evidence.schema.json +5 -0
- package/src/workspace/work-history.schema.json +73 -1
- package/src/workspace/work-history.test.ts +48 -5
- package/src/workspace/work-kind-fields.test.ts +154 -0
- package/src/workspace/work-lease.schema.json +14 -1
- package/src/workspace/work-size.test.ts +77 -0
- package/src/workspace/work-size.ts +93 -0
- package/src/workspace/work.ts +82 -0
- package/src/workspace/workspace-kinds.schema.json +122 -0
- package/src/workspace/workspace-principals.schema.json +60 -0
- package/src/workspace/write-lock-cli.ts +131 -0
- package/src/workspace/write-lock.schema.json +172 -0
- package/src/workspace/write-lock.test.ts +189 -0
- package/src/workspace/write-lock.ts +474 -0
- package/src/workspace/write-scope.test.ts +144 -3
- package/src/workspace/write-scope.ts +192 -45
- package/src/yaml.test.ts +111 -1
- package/src/yaml.ts +141 -549
|
@@ -97,6 +97,19 @@ function makeBuildResult(entitiesByLexicon: Record<string, string[]>): BuildResu
|
|
|
97
97
|
} as unknown as BuildResult;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
+
/**
|
|
101
|
+
* #3001 — a build holding one resource and one property-kind declarable that
|
|
102
|
+
* the resource inlines, the shape every grafana dashboard with exported panels
|
|
103
|
+
* has. Only the resource has a live counterpart of its own.
|
|
104
|
+
*/
|
|
105
|
+
function buildWithPropertyKind(lexicon: string): BuildResult {
|
|
106
|
+
const build = makeBuildResult({ [lexicon]: ["board"] });
|
|
107
|
+
const panel = { lexicon, entityType: `${lexicon}::Panel`, kind: "property", props: { title: "CPU" } };
|
|
108
|
+
build.entities.set("board", { lexicon, entityType: `${lexicon}::Board`, kind: "resource", props: { panels: [panel] } } as never);
|
|
109
|
+
build.entities.set("cpuPanel", panel as never);
|
|
110
|
+
return build;
|
|
111
|
+
}
|
|
112
|
+
|
|
100
113
|
const meta = (overrides: Partial<ResourceMetadata> = {}): ResourceMetadata => ({
|
|
101
114
|
type: "AWS::S3::Bucket",
|
|
102
115
|
status: "CREATE_COMPLETE",
|
|
@@ -537,6 +550,37 @@ describe("runLifecycleDiff --live", () => {
|
|
|
537
550
|
});
|
|
538
551
|
|
|
539
552
|
// #1014 — property-level drift, gated purely on the deep capability.
|
|
553
|
+
test("hands only resource-kind entities to describeResources and observeResourcesDeep (#3001)", async () => {
|
|
554
|
+
buildMock.mockResolvedValue(buildWithPropertyKind("graf"));
|
|
555
|
+
fetchLifecycleMock.mockResolvedValue(undefined);
|
|
556
|
+
readSnapshotMock.mockResolvedValue(null);
|
|
557
|
+
const seen: { thin?: string[]; deep?: string[] } = {};
|
|
558
|
+
const plugins: LexiconPlugin[] = [
|
|
559
|
+
createMockPlugin({
|
|
560
|
+
name: "graf",
|
|
561
|
+
describeResources: async (opts) => {
|
|
562
|
+
seen.thin = [...opts.entities.keys()];
|
|
563
|
+
return { board: meta({ type: "graf::Board", physicalId: "uid-1" }) };
|
|
564
|
+
},
|
|
565
|
+
observeResourcesDeep: async (opts) => {
|
|
566
|
+
seen.deep = [...opts.entities.keys()];
|
|
567
|
+
return deepObservation({ board: { type: "graf::Board", properties: { panels: [{ title: "CPU" }] } } });
|
|
568
|
+
},
|
|
569
|
+
}),
|
|
570
|
+
];
|
|
571
|
+
const exit = await runLifecycleDiff({
|
|
572
|
+
args: makeArgs({ path: "diff", extraPositional: "prod", live: true }),
|
|
573
|
+
plugins,
|
|
574
|
+
serializers: plugins.map((p) => p.serializer),
|
|
575
|
+
});
|
|
576
|
+
expect(exit).toBe(0);
|
|
577
|
+
expect(seen.thin).toEqual(["board"]);
|
|
578
|
+
expect(seen.deep).toEqual(["board"]);
|
|
579
|
+
const stdout = stdoutBuf.join("\n");
|
|
580
|
+
expect(stdout).not.toContain("cpuPanel");
|
|
581
|
+
expect(stdout).toContain("0 missing");
|
|
582
|
+
});
|
|
583
|
+
|
|
540
584
|
describe("deep observation (#1014)", () => {
|
|
541
585
|
const withDeep = (over: Parameters<typeof createMockPlugin>[0] = {}) =>
|
|
542
586
|
createMockPlugin({
|
|
@@ -872,6 +916,29 @@ describe("runLifecyclePlan", () => {
|
|
|
872
916
|
expect(stdoutBuf.join("\n")).toContain("bucket");
|
|
873
917
|
});
|
|
874
918
|
|
|
919
|
+
test("proposes no create for a property-kind declarable its parent inlines (#3001)", async () => {
|
|
920
|
+
buildMock.mockResolvedValue(buildWithPropertyKind("graf"));
|
|
921
|
+
let names: string[] = [];
|
|
922
|
+
const plugins: LexiconPlugin[] = [
|
|
923
|
+
createMockPlugin({
|
|
924
|
+
name: "graf",
|
|
925
|
+
describeResources: async (opts) => {
|
|
926
|
+
names = opts.entityNames;
|
|
927
|
+
return { board: meta({ type: "graf::Board", physicalId: "uid-1" }) };
|
|
928
|
+
},
|
|
929
|
+
}),
|
|
930
|
+
];
|
|
931
|
+
const exit = await runLifecyclePlan({
|
|
932
|
+
args: makeArgs({ path: "plan", extraPositional: "prod", json: true }),
|
|
933
|
+
plugins,
|
|
934
|
+
serializers: plugins.map((p) => p.serializer),
|
|
935
|
+
});
|
|
936
|
+
expect(exit).toBe(0);
|
|
937
|
+
expect(names).toEqual(["board"]);
|
|
938
|
+
const plan = JSON.parse(stdoutBuf.join("\n"));
|
|
939
|
+
expect(plan.entries.map((e: { name: string }) => e.name)).not.toContain("cpuPanel");
|
|
940
|
+
});
|
|
941
|
+
|
|
875
942
|
// #1983 — `--report markdown` emits the reviewer-facing projection instead
|
|
876
943
|
// of the human render, same as `--report gitlab-mr` swaps in the widget JSON.
|
|
877
944
|
test("--report markdown emits the markdown projection instead of the human render", async () => {
|
|
@@ -42,7 +42,7 @@ import { unknownEnvError, isProdLikeEnvironment } from "../../env";
|
|
|
42
42
|
import { planTeardown, executeTeardown, type TeardownPlan, type TeardownReport } from "../../lifecycle/teardown";
|
|
43
43
|
import { collectBuildRootContributors } from "../plugins";
|
|
44
44
|
import { applyLiveEndpoint } from "../../live-endpoint";
|
|
45
|
-
import {
|
|
45
|
+
import { isObservableDeclarable } from "../../declarable";
|
|
46
46
|
import { formatError, formatWarning, formatSuccess, formatBold } from "../format";
|
|
47
47
|
import type { CommandContext } from "../registry";
|
|
48
48
|
import type { LifecycleSnapshot } from "../../lifecycle/types";
|
|
@@ -812,13 +812,14 @@ async function runLifecycleDiffLive(args: LiveDiffArgs): Promise<LiveDiffOutcome
|
|
|
812
812
|
}
|
|
813
813
|
|
|
814
814
|
// Build per-lexicon entity index. Resource declarables only — outputs,
|
|
815
|
-
// parameters
|
|
815
|
+
// parameters, serializer directives and property-kind declarables (read
|
|
816
|
+
// inside their parent, #3001) have no live counterpart of their own, and a
|
|
816
817
|
// declared name the reader can never resolve reads as missing (see
|
|
817
818
|
// lifecycle/observe.ts).
|
|
818
819
|
const declared = new Set<string>();
|
|
819
820
|
const entities: DeclaredEntities = new Map();
|
|
820
821
|
for (const [name, entity] of args.buildResult.entities) {
|
|
821
|
-
if (entity.lexicon === lexiconName &&
|
|
822
|
+
if (entity.lexicon === lexiconName && isObservableDeclarable(entity)) {
|
|
822
823
|
declared.add(name);
|
|
823
824
|
// Path origins are carried across explicitly (#1443): this map is plain
|
|
824
825
|
// objects, and the symbol-keyed provenance channel does not survive it.
|
|
@@ -1289,11 +1290,11 @@ export async function runLifecyclePlan(ctx: CommandContext): Promise<number> {
|
|
|
1289
1290
|
// A receipt has no `props` payload of its own but is declared, diffed,
|
|
1290
1291
|
// and observed like any resource (#1832) — it joins the declared axis
|
|
1291
1292
|
// so its lexicon's observation can confirm presence or absence.
|
|
1292
|
-
if (entity.lexicon === lexiconName && (
|
|
1293
|
+
if (entity.lexicon === lexiconName && (isObservableDeclarable(entity) || isEffectReceipt(entity))) {
|
|
1293
1294
|
declared.add(name);
|
|
1294
1295
|
entities.set(name, {
|
|
1295
1296
|
entityType: entity.entityType,
|
|
1296
|
-
props: (
|
|
1297
|
+
props: (isObservableDeclarable(entity) && entity.props != null ? entity.props : {}) as Record<string, unknown>,
|
|
1297
1298
|
});
|
|
1298
1299
|
}
|
|
1299
1300
|
}
|
package/src/cli/handlers/misc.ts
CHANGED
|
@@ -324,6 +324,7 @@ export async function runImport(ctx: CommandContext): Promise<number> {
|
|
|
324
324
|
lexicon: "k8s",
|
|
325
325
|
output: args.output,
|
|
326
326
|
force: args.force,
|
|
327
|
+
parserOptions: args.parserOption,
|
|
327
328
|
});
|
|
328
329
|
printImportResult(result);
|
|
329
330
|
return result.success ? 0 : 1;
|
|
@@ -381,6 +382,7 @@ export async function runImport(ctx: CommandContext): Promise<number> {
|
|
|
381
382
|
output: ctx.args.output,
|
|
382
383
|
force: ctx.args.force,
|
|
383
384
|
lexicon: ctx.args.lexicon,
|
|
385
|
+
parserOptions: ctx.args.parserOption,
|
|
384
386
|
});
|
|
385
387
|
|
|
386
388
|
printImportResult(result);
|
|
@@ -455,6 +455,27 @@ describe("runApprove", () => {
|
|
|
455
455
|
vi.unstubAllEnvs();
|
|
456
456
|
});
|
|
457
457
|
|
|
458
|
+
// #3402 — a relayed approval names who relayed it, typed, not in --note.
|
|
459
|
+
test("--relayed-by is recorded on the resolution line, and a blank one is refused", async () => {
|
|
460
|
+
seedPending("fountain-apply", "rollout-gate", PLAN_A);
|
|
461
|
+
appendGateResolutionMock.mockResolvedValue({
|
|
462
|
+
commit: "sha",
|
|
463
|
+
record: { version: 1, op: "fountain-apply", gate: "rollout-gate", resolvedBy: "github:alice", relayedBy: "github:hud-follower", timestamp: "2026-01-01T00:00:00.000Z" },
|
|
464
|
+
});
|
|
465
|
+
const errSpy = vi.spyOn(console, "error").mockImplementation(() => undefined);
|
|
466
|
+
|
|
467
|
+
expect(await runApprove(ctx({ path: "fountain-apply", extraPositional: "rollout-gate", actor: "github:alice", relayedBy: "github:hud-follower" }))).toBe(0);
|
|
468
|
+
expect(appendGateResolutionMock).toHaveBeenCalledWith(
|
|
469
|
+
expect.objectContaining({ resolvedBy: "github:alice", relayedBy: "github:hud-follower" }),
|
|
470
|
+
);
|
|
471
|
+
expect(errSpy.mock.calls.flat().join("\n")).toMatch(/resolved by github:alice, relayed by github:hud-follower,/);
|
|
472
|
+
|
|
473
|
+
appendGateResolutionMock.mockClear();
|
|
474
|
+
expect(await runApprove(ctx({ path: "fountain-apply", extraPositional: "rollout-gate", actor: "github:alice", relayedBy: "a\nb" }))).toBe(1);
|
|
475
|
+
expect(appendGateResolutionMock).not.toHaveBeenCalled();
|
|
476
|
+
errSpy.mockRestore();
|
|
477
|
+
});
|
|
478
|
+
|
|
458
479
|
test("without --url, the surrounding PR/MR job is itself the address", async () => {
|
|
459
480
|
vi.stubEnv("GITHUB_SERVER_URL", "https://github.com");
|
|
460
481
|
vi.stubEnv("GITHUB_REPOSITORY", "INTENTIUS/chant");
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { lexiconNames } from "../../lexicon-module";
|
|
10
10
|
import { loadChantConfig } from "../../config";
|
|
11
11
|
import { build } from "../../build";
|
|
12
|
-
import {
|
|
12
|
+
import { isObservableDeclarable } from "../../declarable";
|
|
13
13
|
import { collectBuildRootContributors, collectChangeSubscribers } from "../plugins";
|
|
14
14
|
import { discoverOps, discoverStewards } from "../../op/discover";
|
|
15
15
|
import { pickSteward, stewardBesideOf, stewardFormFor, stewardLeaseName, stewardTurnOps, DEFAULT_STEWARD_ENV } from "../../op/steward";
|
|
@@ -116,7 +116,7 @@ async function collectOperatorSubscribers(
|
|
|
116
116
|
// subscription may watch.
|
|
117
117
|
const entities = new Map<string, Map<string, { entityType: string; props: Record<string, unknown> }>>();
|
|
118
118
|
for (const [name, entity] of buildResult.entities) {
|
|
119
|
-
if (!
|
|
119
|
+
if (!isObservableDeclarable(entity)) continue;
|
|
120
120
|
let perLexicon = entities.get(entity.lexicon);
|
|
121
121
|
if (!perLexicon) entities.set(entity.lexicon, (perLexicon = new Map()));
|
|
122
122
|
perLexicon.set(name, {
|
|
@@ -134,6 +134,9 @@ async function collectOperatorSubscribers(
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
+
/** A pull request's gate op, `pr-<number>` (#3183, `prOp` in ../../pr-loop.ts). */
|
|
138
|
+
const PR_GATE_OP = /^pr-\d+$/;
|
|
139
|
+
|
|
137
140
|
// ── chant operator ──────────────────────────────────────────────────────────
|
|
138
141
|
|
|
139
142
|
/**
|
|
@@ -882,7 +885,9 @@ export async function runApprove(ctx: CommandContext): Promise<number> {
|
|
|
882
885
|
console.error(formatInfo(
|
|
883
886
|
opName === FAN_OUT_GATE_OP
|
|
884
887
|
? `The next \`chant components fan-out\` decides this gate from scratch and records a fresh pending fact.`
|
|
885
|
-
: opName
|
|
888
|
+
: PR_GATE_OP.test(opName)
|
|
889
|
+
? `The next \`chant components pr-apply\` decides this gate from scratch and records a fresh pending fact.`
|
|
890
|
+
: opName === WORKSPACE_UPGRADE_GATE_OP
|
|
886
891
|
? `The next \`chant workspace upgrade ${gate}\` decides this gate from scratch and records a fresh pending fact.`
|
|
887
892
|
: `The next \`chant run ${opName}\` decides this gate from scratch and records a fresh pending fact.`,
|
|
888
893
|
));
|
|
@@ -902,6 +907,8 @@ export async function runApprove(ctx: CommandContext): Promise<number> {
|
|
|
902
907
|
allowSameOrigin: ctx.args.allowSameOrigin,
|
|
903
908
|
...(ctx.args.roles ? { roles: ctx.args.roles } : {}),
|
|
904
909
|
...(ctx.args.agent ? { agent: true } : {}),
|
|
910
|
+
...(ctx.args.sign !== undefined ? { sign: ctx.args.sign } : {}),
|
|
911
|
+
...(ctx.args.relayedBy !== undefined ? { relayedBy: ctx.args.relayedBy } : {}),
|
|
905
912
|
});
|
|
906
913
|
if (!outcome.ok) return 1;
|
|
907
914
|
|
|
@@ -909,7 +916,9 @@ export async function runApprove(ctx: CommandContext): Promise<number> {
|
|
|
909
916
|
`This records the resolution as a fact; it does not itself re-run anything. ` +
|
|
910
917
|
(opName === FAN_OUT_GATE_OP
|
|
911
918
|
? `Repeat the \`chant components fan-out\` command and it walks through gate "${gate}".`
|
|
912
|
-
: opName
|
|
919
|
+
: PR_GATE_OP.test(opName)
|
|
920
|
+
? `The pull request's apply (\`chant components pr-apply\`) walks through gate "${gate}" when it plans this same digest.`
|
|
921
|
+
: opName === WORKSPACE_UPGRADE_GATE_OP
|
|
913
922
|
? `Repeat \`chant workspace upgrade ${gate}\` with the same target, and it applies the patch this approval names.`
|
|
914
923
|
: `Run \`chant run ${opName}\` and it walks through gate "${gate}".`),
|
|
915
924
|
));
|
|
@@ -937,6 +946,13 @@ export interface GateApprovalOptions {
|
|
|
937
946
|
actor?: string;
|
|
938
947
|
/** `--note` — free-text prose. */
|
|
939
948
|
note?: string;
|
|
949
|
+
/**
|
|
950
|
+
* `--relayed-by <principal>` (#3402): who carried this approval to chant for
|
|
951
|
+
* the approver, such as a follower program relaying a person's approval.
|
|
952
|
+
* Recorded as `relayedBy` on the resolution line and covered by `--sign`.
|
|
953
|
+
* The approver is still `--actor`; the relay is not an approver.
|
|
954
|
+
*/
|
|
955
|
+
relayedBy?: string;
|
|
940
956
|
/** `--url` — the approval surface, validated as absolute http/https. */
|
|
941
957
|
url?: string;
|
|
942
958
|
/**
|
|
@@ -959,6 +975,15 @@ export interface GateApprovalOptions {
|
|
|
959
975
|
* model-authored channel it is one whether or not this is set.
|
|
960
976
|
*/
|
|
961
977
|
agent?: boolean;
|
|
978
|
+
/**
|
|
979
|
+
* `--sign [<key file>]` (#3163, ws-080): seal the approval with an ssh key,
|
|
980
|
+
* a key file or true for git's `user.signingkey`. The seal attests the
|
|
981
|
+
* approver when the signers file at base lists the key for them, and a gate
|
|
982
|
+
* the declaration's `identity.gates` names counts only sealed approvals.
|
|
983
|
+
*/
|
|
984
|
+
sign?: string | true;
|
|
985
|
+
/** Where the workspace and the key file are looked up from. Defaults to the process's directory. */
|
|
986
|
+
cwd?: string;
|
|
962
987
|
/** Replaces the lexicon evaluator a gate policy is loaded from. For tests. */
|
|
963
988
|
evaluator?: GatePolicyEvaluator;
|
|
964
989
|
}
|
|
@@ -1091,6 +1116,16 @@ export async function recordGateApproval(
|
|
|
1091
1116
|
return { ok: false };
|
|
1092
1117
|
}
|
|
1093
1118
|
|
|
1119
|
+
// #3402: the relay is a principal, on one line (the seal's payload is LF-joined).
|
|
1120
|
+
const relayedBy = opts.relayedBy?.trim();
|
|
1121
|
+
if (opts.relayedBy !== undefined && (!relayedBy || /[\r\n]/.test(relayedBy))) {
|
|
1122
|
+
console.error(formatError({
|
|
1123
|
+
message: `--relayed-by needs one principal on one line (got ${JSON.stringify(opts.relayedBy)})`,
|
|
1124
|
+
hint: "Name who relayed the approval, such as --relayed-by github:<login> or a principal the signers file lists.",
|
|
1125
|
+
}));
|
|
1126
|
+
return { ok: false };
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1094
1129
|
const resolvedBy = opts.actor
|
|
1095
1130
|
?? (isModelAuthored(origin)
|
|
1096
1131
|
// A channel that cannot attest to a name does not get to write one down.
|
|
@@ -1107,6 +1142,81 @@ export async function recordGateApproval(
|
|
|
1107
1142
|
...(opts.roles && opts.roles.length > 0 ? { roles: [...new Set(opts.roles)] } : {}),
|
|
1108
1143
|
};
|
|
1109
1144
|
|
|
1145
|
+
// #3163, ws-080: the declaration at base may require a checkable approver
|
|
1146
|
+
// (identity.attribution "identified") and a signed approval for this gate
|
|
1147
|
+
// (identity.gates). Both are judged before anything is written.
|
|
1148
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
1149
|
+
const identity = await import("../../workspace/identity");
|
|
1150
|
+
const { scopeSource } = await import("../../workspace/write-scope");
|
|
1151
|
+
const scope = scopeSource(cwd);
|
|
1152
|
+
try {
|
|
1153
|
+
identity.refuseUnidentified(scope, [resolvedBy], opts.actor !== undefined ? "--actor" : "the approver");
|
|
1154
|
+
if (relayedBy) identity.refuseUnidentified(scope, [relayedBy], "--relayed-by");
|
|
1155
|
+
} catch (err) {
|
|
1156
|
+
if (!(err instanceof identity.IdentityError)) throw err;
|
|
1157
|
+
console.error(formatError({
|
|
1158
|
+
message: `Gate "${gate}" on "${opName}" was not approved: ${err.message}`,
|
|
1159
|
+
hint: "Pass --actor <forge identity or signer>, as the surface that signed the person in maps them, for example --actor github:<login>.",
|
|
1160
|
+
}));
|
|
1161
|
+
return { ok: false };
|
|
1162
|
+
}
|
|
1163
|
+
const rule = identity.gateAdmissionFrom(scope, gate);
|
|
1164
|
+
if (rule && opts.sign === undefined) {
|
|
1165
|
+
console.error(formatError({
|
|
1166
|
+
message:
|
|
1167
|
+
`Gate "${gate}" needs a signed approval: chant.workspace.json at base names it in identity.gates` +
|
|
1168
|
+
(rule.requirement.class !== null ? `, from the class ${rule.requirement.class}` : "") +
|
|
1169
|
+
`, and this approval is not signed`,
|
|
1170
|
+
hint: `chant approve ${opName} ${gate} --actor <principal> --sign [<key file>], with a key ${scope.policy.signersPath} at base lists for that principal.`,
|
|
1171
|
+
}));
|
|
1172
|
+
return { ok: false };
|
|
1173
|
+
}
|
|
1174
|
+
const timestamp = new Date().toISOString();
|
|
1175
|
+
let seal: GateResolutionRecord["seal"];
|
|
1176
|
+
if (opts.sign !== undefined) {
|
|
1177
|
+
const { resolveSigningKey, sealGateApproval, SealError } = await import("../../workspace/trust/seal");
|
|
1178
|
+
try {
|
|
1179
|
+
const key = resolveSigningKey(opts.sign, cwd);
|
|
1180
|
+
try {
|
|
1181
|
+
seal = sealGateApproval(key.file, {
|
|
1182
|
+
op: opName,
|
|
1183
|
+
gate,
|
|
1184
|
+
...(environment !== undefined ? { environment } : {}),
|
|
1185
|
+
...(planDigest !== undefined ? { planDigest } : {}),
|
|
1186
|
+
resolvedBy,
|
|
1187
|
+
...(relayedBy ? { relayedBy } : {}),
|
|
1188
|
+
timestamp,
|
|
1189
|
+
});
|
|
1190
|
+
} finally {
|
|
1191
|
+
key.cleanup();
|
|
1192
|
+
}
|
|
1193
|
+
} catch (err) {
|
|
1194
|
+
if (!(err instanceof SealError)) throw err;
|
|
1195
|
+
console.error(formatError({ message: `Gate "${gate}" on "${opName}" was not approved: ${err.message}` }));
|
|
1196
|
+
return { ok: false };
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
if (rule) {
|
|
1200
|
+
const why = rule.refuses({
|
|
1201
|
+
op: opName,
|
|
1202
|
+
gate,
|
|
1203
|
+
...(environment !== undefined ? { environment } : {}),
|
|
1204
|
+
...(planDigest !== undefined ? { planDigest } : {}),
|
|
1205
|
+
resolvedBy,
|
|
1206
|
+
...(relayedBy ? { relayedBy } : {}),
|
|
1207
|
+
timestamp,
|
|
1208
|
+
seal,
|
|
1209
|
+
});
|
|
1210
|
+
if (why !== null) {
|
|
1211
|
+
console.error(formatError({
|
|
1212
|
+
message: `Gate "${gate}" on "${opName}" was not approved: ${why}`,
|
|
1213
|
+
hint: `identity.gates.${gate} in chant.workspace.json at base counts only an approval signed by a key ${scope.policy.signersPath} lists for the approver` +
|
|
1214
|
+
(rule.requirement.class !== null ? `, who holds the role of the class ${rule.requirement.class}` : "") + ".",
|
|
1215
|
+
}));
|
|
1216
|
+
return { ok: false };
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1110
1220
|
// #2508: a gate with a policy has it evaluated for this approval now, while
|
|
1111
1221
|
// the approver is known, against the context the gated run recorded. The
|
|
1112
1222
|
// decision is written next to the approval, so a pass can be traced to the
|
|
@@ -1148,7 +1258,9 @@ export async function recordGateApproval(
|
|
|
1148
1258
|
op: opName,
|
|
1149
1259
|
gate,
|
|
1150
1260
|
resolvedBy,
|
|
1151
|
-
|
|
1261
|
+
...(relayedBy ? { relayedBy } : {}),
|
|
1262
|
+
timestamp,
|
|
1263
|
+
...(seal ? { seal } : {}),
|
|
1152
1264
|
approver,
|
|
1153
1265
|
...(policyDecision ? { policyDecision } : {}),
|
|
1154
1266
|
...(opts.note ? { note: opts.note } : {}),
|
|
@@ -1164,8 +1276,11 @@ export async function recordGateApproval(
|
|
|
1164
1276
|
);
|
|
1165
1277
|
|
|
1166
1278
|
console.error(formatSuccess(
|
|
1167
|
-
`Gate "${gate}" on "${opName}" resolved by ${record.resolvedBy}
|
|
1279
|
+
`Gate "${gate}" on "${opName}" resolved by ${record.resolvedBy}` +
|
|
1280
|
+
(record.relayedBy ? `, relayed by ${record.relayedBy},` : "") +
|
|
1281
|
+
` at ${record.timestamp}` +
|
|
1168
1282
|
(record.url ? ` (${record.url})` : "") +
|
|
1283
|
+
(record.seal ? `, signed with ${record.seal.key}` : "") +
|
|
1169
1284
|
(pushed ? "" : " (local only — the push did not land)"),
|
|
1170
1285
|
));
|
|
1171
1286
|
if (record.planDigest) {
|