@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
|
@@ -238,7 +238,7 @@
|
|
|
238
238
|
}
|
|
239
239
|
},
|
|
240
240
|
"criteria": {
|
|
241
|
-
"description": "What each candidate means, as the points file declares it: noul and choice give an object of strings keyed by candidate, score an array of ordered level descriptions.",
|
|
241
|
+
"description": "What each candidate means, as the points file declares it: noul and choice give an object of strings keyed by candidate, score an array of ordered level descriptions. Empty for an ad-hoc point (#3403).",
|
|
242
242
|
"oneOf": [
|
|
243
243
|
{
|
|
244
244
|
"type": "object",
|
|
@@ -254,6 +254,10 @@
|
|
|
254
254
|
}
|
|
255
255
|
]
|
|
256
256
|
},
|
|
257
|
+
"adhoc": {
|
|
258
|
+
"type": "boolean",
|
|
259
|
+
"description": "An ad-hoc point (#3403): the question's text and candidates come with each ask, and each question lists them as asked. Its candidates are empty and its criteria an empty object, or an empty array for a score. Absent from a chant before it."
|
|
260
|
+
},
|
|
257
261
|
"inputs": {
|
|
258
262
|
"type": "array",
|
|
259
263
|
"items": {
|
|
@@ -269,7 +273,7 @@
|
|
|
269
273
|
},
|
|
270
274
|
"output": {
|
|
271
275
|
"type": "string",
|
|
272
|
-
"description": "The read-contract output the input names: record, decision, work-item, finding, region, commit, member, gate, release, environment or
|
|
276
|
+
"description": "The read-contract output the input names: record, decision, work-item, finding, region, commit, node, member, gate, release, environment, component or ask."
|
|
273
277
|
},
|
|
274
278
|
"description": {
|
|
275
279
|
"type": "string"
|
|
@@ -464,6 +468,13 @@
|
|
|
464
468
|
}
|
|
465
469
|
]
|
|
466
470
|
},
|
|
471
|
+
"reason": {
|
|
472
|
+
"type": [
|
|
473
|
+
"string",
|
|
474
|
+
"null"
|
|
475
|
+
],
|
|
476
|
+
"description": "The model's own explanation of the recorded answer, a proposal or a confirmed proposal, when the backend gave one (#3345). null otherwise, and from a chant before it."
|
|
477
|
+
},
|
|
467
478
|
"model": {
|
|
468
479
|
"description": "Any model answer: the proposal (observed), or the last answer below a model decider's threshold (not observed). null when no model answered.",
|
|
469
480
|
"oneOf": [
|
|
@@ -532,6 +543,13 @@
|
|
|
532
543
|
},
|
|
533
544
|
"observed": {
|
|
534
545
|
"type": "boolean"
|
|
546
|
+
},
|
|
547
|
+
"reason": {
|
|
548
|
+
"type": [
|
|
549
|
+
"string",
|
|
550
|
+
"null"
|
|
551
|
+
],
|
|
552
|
+
"description": "The model's explanation of this answer, when the backend gave one (#3345)."
|
|
535
553
|
}
|
|
536
554
|
}
|
|
537
555
|
}
|
|
@@ -591,6 +609,10 @@
|
|
|
591
609
|
"type": "number",
|
|
592
610
|
"minimum": 0,
|
|
593
611
|
"maximum": 1
|
|
612
|
+
},
|
|
613
|
+
"model_reason": {
|
|
614
|
+
"type": "string",
|
|
615
|
+
"description": "A model decider's own explanation of the answer it gave, when the backend gave one (#3345). reason is why the decider did not answer."
|
|
594
616
|
}
|
|
595
617
|
}
|
|
596
618
|
}
|
|
@@ -646,6 +668,139 @@
|
|
|
646
668
|
"null"
|
|
647
669
|
]
|
|
648
670
|
},
|
|
671
|
+
"note": {
|
|
672
|
+
"type": [
|
|
673
|
+
"string",
|
|
674
|
+
"null"
|
|
675
|
+
],
|
|
676
|
+
"description": "What the people who answered wrote with their answer (points answer --note, #3351). null when they wrote nothing, and from a chant before it."
|
|
677
|
+
},
|
|
678
|
+
"relayedBy": {
|
|
679
|
+
"type": [
|
|
680
|
+
"string",
|
|
681
|
+
"null"
|
|
682
|
+
],
|
|
683
|
+
"description": "Who relayed the answer to chant for the people who gave it (points answer --relayed-by, #3402), such as a follower relaying a person's answer through hud. null when nobody did, and from a chant before it."
|
|
684
|
+
},
|
|
685
|
+
"retractions": {
|
|
686
|
+
"type": "array",
|
|
687
|
+
"description": "Answers people took back, oldest first (points retract, #3351): each answer as it was and who retracted it, when and why. A retracted question is escalated to people again. Empty when none was, and absent from a chant before it.",
|
|
688
|
+
"items": {
|
|
689
|
+
"type": "object",
|
|
690
|
+
"required": [
|
|
691
|
+
"answer",
|
|
692
|
+
"decider",
|
|
693
|
+
"answeredBy",
|
|
694
|
+
"answeredOn",
|
|
695
|
+
"answerNote",
|
|
696
|
+
"answerRelayedBy",
|
|
697
|
+
"by",
|
|
698
|
+
"on",
|
|
699
|
+
"note"
|
|
700
|
+
],
|
|
701
|
+
"properties": {
|
|
702
|
+
"answer": {
|
|
703
|
+
"oneOf": [
|
|
704
|
+
{
|
|
705
|
+
"type": "string"
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"type": "boolean"
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
"type": "null"
|
|
712
|
+
}
|
|
713
|
+
]
|
|
714
|
+
},
|
|
715
|
+
"decider": {
|
|
716
|
+
"type": "object",
|
|
717
|
+
"description": "Who gave the answer: the record's decider as it was."
|
|
718
|
+
},
|
|
719
|
+
"answeredBy": {
|
|
720
|
+
"type": "array",
|
|
721
|
+
"items": {
|
|
722
|
+
"type": "string"
|
|
723
|
+
}
|
|
724
|
+
},
|
|
725
|
+
"answeredOn": {
|
|
726
|
+
"type": [
|
|
727
|
+
"string",
|
|
728
|
+
"null"
|
|
729
|
+
]
|
|
730
|
+
},
|
|
731
|
+
"answerNote": {
|
|
732
|
+
"type": [
|
|
733
|
+
"string",
|
|
734
|
+
"null"
|
|
735
|
+
],
|
|
736
|
+
"description": "The note the answer carried."
|
|
737
|
+
},
|
|
738
|
+
"answerRelayedBy": {
|
|
739
|
+
"type": [
|
|
740
|
+
"string",
|
|
741
|
+
"null"
|
|
742
|
+
],
|
|
743
|
+
"description": "Who relayed the answer (#3402)."
|
|
744
|
+
},
|
|
745
|
+
"by": {
|
|
746
|
+
"type": "array",
|
|
747
|
+
"items": {
|
|
748
|
+
"type": "string"
|
|
749
|
+
},
|
|
750
|
+
"description": "Who retracted it."
|
|
751
|
+
},
|
|
752
|
+
"on": {
|
|
753
|
+
"type": [
|
|
754
|
+
"string",
|
|
755
|
+
"null"
|
|
756
|
+
]
|
|
757
|
+
},
|
|
758
|
+
"note": {
|
|
759
|
+
"type": [
|
|
760
|
+
"string",
|
|
761
|
+
"null"
|
|
762
|
+
],
|
|
763
|
+
"description": "Why it was retracted (points retract --note)."
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
},
|
|
768
|
+
"asked": {
|
|
769
|
+
"description": "An ad-hoc point's question as its ask gave it (points ask --candidates, #3403): the question's text, and its criteria, what each candidate means, in the point's question type's shape. People's answer is one of the candidates. null for a declared point's question, and absent from a chant before it.",
|
|
770
|
+
"oneOf": [
|
|
771
|
+
{
|
|
772
|
+
"type": "null"
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"type": "object",
|
|
776
|
+
"required": [
|
|
777
|
+
"question",
|
|
778
|
+
"criteria"
|
|
779
|
+
],
|
|
780
|
+
"properties": {
|
|
781
|
+
"question": {
|
|
782
|
+
"type": "string"
|
|
783
|
+
},
|
|
784
|
+
"criteria": {
|
|
785
|
+
"oneOf": [
|
|
786
|
+
{
|
|
787
|
+
"type": "object",
|
|
788
|
+
"additionalProperties": {
|
|
789
|
+
"type": "string"
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"type": "array",
|
|
794
|
+
"items": {
|
|
795
|
+
"type": "string"
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
]
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
]
|
|
803
|
+
},
|
|
649
804
|
"valid": {
|
|
650
805
|
"type": "boolean"
|
|
651
806
|
},
|
|
@@ -143,7 +143,7 @@ describe("the decision points schema (#2738)", () => {
|
|
|
143
143
|
|
|
144
144
|
test("the reference workspace's points validate", () => {
|
|
145
145
|
const points = parsePoints(readFileSync(join(REPO, "reference-workspace", "decisions", "points.json"), "utf-8"), "decisions/points.json");
|
|
146
|
-
expect(Object.keys(points)).toEqual(["slice-tier", "ship-skip", "finding-triage", "needs-a-decision"]);
|
|
146
|
+
expect(Object.keys(points)).toEqual(["slice-tier", "understand", "ship-skip", "finding-triage", "needs-a-decision", "intent-origin", "intent-judgment", "intent-disposition", "agent-question"]);
|
|
147
147
|
});
|
|
148
148
|
|
|
149
149
|
test("a point whose chain does not end in a quorum is refused", () => {
|
|
@@ -232,6 +232,18 @@ describe("the decider chain (#2739)", () => {
|
|
|
232
232
|
expect(r.escalations[1]).toMatchObject({ kind: "model", answer: "medium", confidence: 0.25, threshold: 0.8, reason: "not observed: confidence 0.25 is below the threshold 0.8" });
|
|
233
233
|
});
|
|
234
234
|
|
|
235
|
+
test("the model's reason is kept with a proposal, and in the escalation of an answer below the threshold (#3345)", async () => {
|
|
236
|
+
const proposed = await runChain("slice-tier", SLICE, big, stub({ type: "choice", choice: "large", probabilities: { large: 0.9 }, confidence: 0.9, reason: " Nine criteria across three services.\n" }));
|
|
237
|
+
expect(proposed).toMatchObject({ status: "proposed", reason: "Nine criteria across three services." });
|
|
238
|
+
const low = await runChain("n", NOUL, {}, stub({ type: "noul", noul: 0.6, reason: "Probably, but the diff is small." }));
|
|
239
|
+
expect(low.escalations[0]).toMatchObject({ kind: "model", answer: true, reason: "not observed: confidence 0.6 is below the threshold 0.8", model_reason: "Probably, but the diff is small." });
|
|
240
|
+
// A blank or non-string reason is no reason.
|
|
241
|
+
const blank = await runChain("slice-tier", SLICE, big, stub({ type: "choice", choice: "large", confidence: 0.9, reason: " " }));
|
|
242
|
+
expect(blank).not.toHaveProperty("reason");
|
|
243
|
+
const odd = await runChain("slice-tier", SLICE, big, stub({ type: "choice", choice: "large", confidence: 0.9, reason: 3 } as unknown as WireAnswer));
|
|
244
|
+
expect(odd).not.toHaveProperty("reason");
|
|
245
|
+
});
|
|
246
|
+
|
|
235
247
|
test("without a backend, or with an unpinned model answering, the model is not asked or not observed", async () => {
|
|
236
248
|
expect((await runChain("slice-tier", SLICE, big)).escalations[1].reason).toBe("not asked: no model backend was given to this ask");
|
|
237
249
|
const r = await runChain("slice-tier", SLICE, big, stub({ type: "choice", choice: "large", confidence: 0.99 }, "bosun-latest"));
|
package/src/workspace/points.ts
CHANGED
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
* proposal a person confirms; below it, the next decider is asked.
|
|
16
16
|
* quorum people. Always last: the question escalates to them.
|
|
17
17
|
*
|
|
18
|
+
* A point declared `adhoc` (#3403) has no candidates of its own: its
|
|
19
|
+
* question's text and candidates come with each ask, as an agent's question
|
|
20
|
+
* to the room does, and the answer record keeps them as `asked`, so people's
|
|
21
|
+
* answer is checked against the candidates the question was asked with. Only
|
|
22
|
+
* people decide it: its chain is one quorum.
|
|
23
|
+
*
|
|
18
24
|
* chant never calls a model (ws-052). {@link runChain} takes the model call
|
|
19
25
|
* as a function, {@link ModelAsk}, which the decide Op activity (#2740), a
|
|
20
26
|
* runtime's decider or a test's stub supplies. Without one, a model decider is
|
|
@@ -51,6 +57,8 @@ export const POINT_INPUT_OUTPUTS = {
|
|
|
51
57
|
finding: { schema: "intent", def: "finding", description: "a finding of graph --intent, or of check --changes (#2794)" },
|
|
52
58
|
region: { schema: "intent", def: "region", description: "the region an intent graph covers" },
|
|
53
59
|
commit: { schema: "intent", def: "commit", description: "a commit in an intent graph's window" },
|
|
60
|
+
node: { schema: "intent", def: "node", description: "any node of an intent graph, by its id and kind: a commit, decision, unit, artifact or the region itself, as an intent walk asks of it (#3351)" },
|
|
61
|
+
ask: { schema: "points", def: "question", description: "an ad-hoc question as its asker knows it (#3403): the asker's own id for the ask, such as hud's request id for an agent's question, and who asked" },
|
|
54
62
|
member: { schema: "ls", def: "member", description: "a member, as ls lists it" },
|
|
55
63
|
gate: { schema: "status", def: "gate", description: "a gate, as status lists it" },
|
|
56
64
|
release: { schema: "status", def: "release", description: "a release, as status lists it; a release plan's fields until the lifecycle ledger lists plans (#2717)" },
|
|
@@ -73,7 +81,8 @@ export type QuestionType = "noul" | "choice" | "score";
|
|
|
73
81
|
export interface Question {
|
|
74
82
|
type: QuestionType;
|
|
75
83
|
instructions: string;
|
|
76
|
-
|
|
84
|
+
/** The candidates and what each means. Absent only from an ad-hoc point's declaration, whose candidates come with each ask (#3403). */
|
|
85
|
+
criteria?: Record<string, string> | string[];
|
|
77
86
|
}
|
|
78
87
|
|
|
79
88
|
export type Scalar = string | number | boolean | null;
|
|
@@ -92,6 +101,8 @@ export type Decider =
|
|
|
92
101
|
|
|
93
102
|
export interface Point {
|
|
94
103
|
title: string;
|
|
104
|
+
/** The question's text and candidates come with each ask, not the declaration (#3403). */
|
|
105
|
+
adhoc?: boolean;
|
|
95
106
|
question: Question;
|
|
96
107
|
inputs: Record<string, string>;
|
|
97
108
|
deciders: Decider[];
|
|
@@ -116,8 +127,8 @@ export class PointsError extends Error {
|
|
|
116
127
|
/** A question's candidate answers: true and false, a choice's options, or a score's levels. */
|
|
117
128
|
export function candidates(question: Question): (string | boolean)[] {
|
|
118
129
|
if (question.type === "noul") return [true, false];
|
|
119
|
-
if (question.type === "choice") return Object.keys(question.criteria);
|
|
120
|
-
return [...(question.criteria as string[])];
|
|
130
|
+
if (question.type === "choice") return Object.keys(question.criteria ?? {});
|
|
131
|
+
return [...((question.criteria as string[] | undefined) ?? [])];
|
|
121
132
|
}
|
|
122
133
|
|
|
123
134
|
const ONLY: Record<Decider["kind"], string[]> = { table: ["rows"], model: ["backend", "model", "threshold", "unreachable"], quorum: ["count", "roles"] };
|
|
@@ -140,6 +151,12 @@ function pointProblems(points: Record<string, Point>): PointProblem[] {
|
|
|
140
151
|
});
|
|
141
152
|
}
|
|
142
153
|
}
|
|
154
|
+
if (point.adhoc && (point.deciders.length !== 1 || point.deciders[0].kind !== "quorum")) {
|
|
155
|
+
problems.push({
|
|
156
|
+
field: at("deciders"),
|
|
157
|
+
message: "is an ad-hoc point's chain, and an ad-hoc point is decided by people alone: its chain is one quorum, since no table row or model can know candidates that come with the ask",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
143
160
|
const allowed = candidates(point.question);
|
|
144
161
|
const last = point.deciders.length - 1;
|
|
145
162
|
point.deciders.forEach((d, i) => {
|
|
@@ -210,7 +227,9 @@ export function schemaProblems(data: unknown): PointProblem[] {
|
|
|
210
227
|
? `is missing ${JSON.stringify(e.params.missingProperty)}`
|
|
211
228
|
: e.keyword === "propertyNames"
|
|
212
229
|
? `has a name that is not allowed: ${JSON.stringify(e.params.propertyName)}`
|
|
213
|
-
:
|
|
230
|
+
: e.keyword === "not"
|
|
231
|
+
? "has criteria, and an ad-hoc point's candidates come with each ask (#3403): leave criteria out"
|
|
232
|
+
: (e.message ?? "is invalid");
|
|
214
233
|
const key = `${field}\0${message}`;
|
|
215
234
|
if (seen.has(key)) continue;
|
|
216
235
|
seen.add(key);
|
|
@@ -262,8 +281,71 @@ const sha256 = (text: string): string => createHash("sha256").update(text, "utf8
|
|
|
262
281
|
/** The version of a point: the sha256 of its declaration. Editing the question or any decider changes it. */
|
|
263
282
|
export const pointVersion = (point: Point): string => sha256(canonical(point));
|
|
264
283
|
|
|
265
|
-
/**
|
|
266
|
-
|
|
284
|
+
/**
|
|
285
|
+
* What is answered once: the point, its version and the inputs, and for an
|
|
286
|
+
* ad-hoc point the question and candidates it was asked with (#3403).
|
|
287
|
+
*/
|
|
288
|
+
export const inputsHash = (name: string, version: string, inputs: Record<string, unknown>, asked?: Asked): string => sha256(canonical({ point: name, version, inputs, asked }));
|
|
289
|
+
|
|
290
|
+
// ── Ad-hoc questions (#3403) ─────────────────────────────────────────────────
|
|
291
|
+
|
|
292
|
+
/** An ad-hoc point's question as one ask gave it: its text and its candidates, in the point's question type's shape. */
|
|
293
|
+
export interface Asked {
|
|
294
|
+
question: string;
|
|
295
|
+
criteria: Record<string, string> | string[];
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** The question an answer asks: the point's own, or for an ad-hoc point the one the ask gave. */
|
|
299
|
+
export function askedQuestion(point: Point, asked: Asked | undefined): Question {
|
|
300
|
+
return asked ? { type: point.question.type, instructions: asked.question, criteria: asked.criteria } : point.question;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const nonEmpty = (v: unknown): v is string => typeof v === "string" && v.trim() !== "";
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* An ad-hoc ask's question and candidates (`points ask --candidates`), checked
|
|
307
|
+
* against the point's question type as a declaration's criteria are: noul
|
|
308
|
+
* describes true and false, choice gives 2 to 255 options, each with what it
|
|
309
|
+
* means, and score 2 to 10 distinct ordered levels. Returns the problems, or
|
|
310
|
+
* the question.
|
|
311
|
+
*/
|
|
312
|
+
export function parseAsked(point: Point, value: unknown): { asked: Asked } | { problems: string[] } {
|
|
313
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return { problems: ["the candidates must be a JSON object with question and criteria"] };
|
|
314
|
+
const v = value as Record<string, unknown>;
|
|
315
|
+
const problems: string[] = [];
|
|
316
|
+
const extra = Object.keys(v).filter((k) => k !== "question" && k !== "criteria");
|
|
317
|
+
if (extra.length > 0) problems.push(`the candidates take question and criteria, not ${extra.join(", ")}`);
|
|
318
|
+
if (!nonEmpty(v.question)) problems.push("question must be the question's text");
|
|
319
|
+
const c = v.criteria;
|
|
320
|
+
const type = point.question.type;
|
|
321
|
+
if (type === "score") {
|
|
322
|
+
if (!Array.isArray(c) || c.length < 2 || c.length > 10 || !c.every(nonEmpty) || new Set(c).size !== c.length) problems.push("criteria must be 2 to 10 distinct levels, in order, for a score question");
|
|
323
|
+
} else if (c === null || typeof c !== "object" || Array.isArray(c)) {
|
|
324
|
+
problems.push(`criteria must be an object of ${type === "noul" ? "true and false" : "options"}, each with what it means`);
|
|
325
|
+
} else {
|
|
326
|
+
const entries = Object.entries(c as Record<string, unknown>);
|
|
327
|
+
if (!entries.every(([k, d]) => k !== "" && typeof d === "string")) problems.push("each criterion must be a non-empty name with what it means as a string");
|
|
328
|
+
if (type === "noul") {
|
|
329
|
+
const keys = entries.map(([k]) => k).sort();
|
|
330
|
+
if (keys.length !== 2 || keys[0] !== "false" || keys[1] !== "true") problems.push("criteria must describe true and false, and nothing else, for a noul question");
|
|
331
|
+
} else if (entries.length < 2 || entries.length > 255) {
|
|
332
|
+
problems.push("criteria must give 2 to 255 options for a choice question");
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (problems.length > 0) return { problems };
|
|
336
|
+
const criteria = Array.isArray(c) ? [...(c as string[])] : { ...(c as Record<string, string>) };
|
|
337
|
+
return { asked: { question: (v.question as string).trim(), criteria } };
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/** An answer record's `asked`, when it has one. */
|
|
341
|
+
export function askedOf(data: Record<string, unknown>): Asked | undefined {
|
|
342
|
+
const a = data.asked as Record<string, unknown> | undefined;
|
|
343
|
+
if (a === null || typeof a !== "object" || Array.isArray(a) || typeof a.question !== "string") return undefined;
|
|
344
|
+
const c = a.criteria;
|
|
345
|
+
if (Array.isArray(c)) return { question: a.question, criteria: c.filter((x): x is string => typeof x === "string") };
|
|
346
|
+
if (c !== null && typeof c === "object") return { question: a.question, criteria: Object.fromEntries(Object.entries(c as Record<string, unknown>).filter(([, d]) => typeof d === "string")) as Record<string, string> };
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
267
349
|
|
|
268
350
|
/** The id of the answer to `name` for inputs hashing to `hash`: the name and the hash's first 12 hex digits. */
|
|
269
351
|
export const answerId = (name: string, hash: string): string => `${name}-${hash.slice(0, 12)}`;
|
|
@@ -311,15 +393,28 @@ export interface WireQuestion {
|
|
|
311
393
|
criteria: Record<string, string> | string[];
|
|
312
394
|
}
|
|
313
395
|
|
|
314
|
-
/**
|
|
396
|
+
/**
|
|
397
|
+
* One answer in the wire format's shape. `reason` is the model's own
|
|
398
|
+
* explanation of its answer, when the backend gives one (#3345): kept in the
|
|
399
|
+
* answer record beside a proposal, or in the escalation entry of an answer
|
|
400
|
+
* below the threshold, so a person sees why the model chose.
|
|
401
|
+
*/
|
|
315
402
|
export type WireAnswer =
|
|
316
|
-
| { type: "noul"; noul: number }
|
|
317
|
-
| { type: "choice"; choice: string; probabilities?: Record<string, number>; confidence?: number }
|
|
318
|
-
| { type: "score"; score?: number; legend?: unknown; probabilities?: Record<string, number>; confidence?: number }
|
|
403
|
+
| { type: "noul"; noul: number; reason?: string }
|
|
404
|
+
| { type: "choice"; choice: string; probabilities?: Record<string, number>; confidence?: number; reason?: string }
|
|
405
|
+
| { type: "score"; score?: number; legend?: unknown; probabilities?: Record<string, number>; confidence?: number; reason?: string }
|
|
319
406
|
| { type: "unsupported" };
|
|
320
407
|
|
|
408
|
+
/** A wire answer's reason, trimmed, or undefined when it gives none (or not a string). */
|
|
409
|
+
export function answerReason(answer: WireAnswer | undefined): string | undefined {
|
|
410
|
+
const raw = (answer as { reason?: unknown } | undefined)?.reason;
|
|
411
|
+
if (typeof raw !== "string") return undefined;
|
|
412
|
+
const reason = raw.trim();
|
|
413
|
+
return reason === "" ? undefined : reason;
|
|
414
|
+
}
|
|
415
|
+
|
|
321
416
|
export function wireQuestion(question: Question): WireQuestion {
|
|
322
|
-
return { type: question.type, instructions: question.instructions, criteria: question.criteria };
|
|
417
|
+
return { type: question.type, instructions: question.instructions, criteria: question.criteria ?? {} };
|
|
323
418
|
}
|
|
324
419
|
|
|
325
420
|
/** What a model decider is asked. */
|
|
@@ -388,7 +483,12 @@ export function observe(question: Question, answer: WireAnswer | undefined, thre
|
|
|
388
483
|
return { observed: false, answer: choice, probabilities, confidence, reason: `confidence ${confidence} is below the threshold ${threshold}` };
|
|
389
484
|
}
|
|
390
485
|
|
|
391
|
-
/**
|
|
486
|
+
/**
|
|
487
|
+
* A decider that was asked and did not answer, and why: `reason` is chant's
|
|
488
|
+
* account of why it did not answer. `model_reason` is the model's own
|
|
489
|
+
* explanation of the answer it gave (#3345), when it gave one; it is not named
|
|
490
|
+
* `reason` because that field already says why the decider escalated.
|
|
491
|
+
*/
|
|
392
492
|
export interface Escalation {
|
|
393
493
|
kind: "table" | "model";
|
|
394
494
|
reason: string;
|
|
@@ -398,6 +498,7 @@ export interface Escalation {
|
|
|
398
498
|
probabilities?: Record<string, number>;
|
|
399
499
|
confidence?: number;
|
|
400
500
|
threshold?: number;
|
|
501
|
+
model_reason?: string;
|
|
401
502
|
}
|
|
402
503
|
|
|
403
504
|
export type ChainResult =
|
|
@@ -409,6 +510,8 @@ export type ChainResult =
|
|
|
409
510
|
probabilities: Record<string, number>;
|
|
410
511
|
confidence: number;
|
|
411
512
|
threshold: number;
|
|
513
|
+
/** The model's explanation of its answer, when the backend gave one (#3345). */
|
|
514
|
+
reason?: string;
|
|
412
515
|
escalations: Escalation[];
|
|
413
516
|
}
|
|
414
517
|
| { status: "escalated"; decider: { kind: "quorum"; count: number; roles?: string[] }; escalations: Escalation[] };
|
|
@@ -455,6 +558,7 @@ export async function runChain(name: string, point: Point, inputs: Record<string
|
|
|
455
558
|
continue;
|
|
456
559
|
}
|
|
457
560
|
const seen = observe(point.question, reply.answer, d.threshold);
|
|
561
|
+
const why = answerReason(reply.answer);
|
|
458
562
|
if (seen.observed) {
|
|
459
563
|
return {
|
|
460
564
|
status: "proposed",
|
|
@@ -463,6 +567,7 @@ export async function runChain(name: string, point: Point, inputs: Record<string
|
|
|
463
567
|
probabilities: seen.probabilities,
|
|
464
568
|
confidence: seen.confidence,
|
|
465
569
|
threshold: d.threshold,
|
|
570
|
+
...(why !== undefined ? { reason: why } : {}),
|
|
466
571
|
escalations,
|
|
467
572
|
};
|
|
468
573
|
}
|
|
@@ -475,6 +580,7 @@ export async function runChain(name: string, point: Point, inputs: Record<string
|
|
|
475
580
|
...(seen.confidence !== undefined ? { confidence: seen.confidence } : {}),
|
|
476
581
|
threshold: d.threshold,
|
|
477
582
|
reason: `not observed: ${seen.reason}`,
|
|
583
|
+
...(why !== undefined ? { model_reason: why } : {}),
|
|
478
584
|
});
|
|
479
585
|
} else {
|
|
480
586
|
return { status: "escalated", decider: { kind: "quorum", count: d.count, ...(d.roles ? { roles: d.roles } : {}) }, escalations };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://intentius.io/chant/schemas/workspace/pr-report/v1/pr-report.schema.json",
|
|
4
|
+
"title": "pull-request report",
|
|
5
|
+
"description": "What one stage of the pull-request loop (#3183) planned or applied: the members a change reaches, the digest the gate binds, where the approval stands and how the stage ended. Written by `chant components pr-plan` (pr-plan.json) and `chant components pr-apply` (pr-apply.json), and built by prReport in @intentius/chant/components/pr-run. The pull-request note is rendered from it by renderPrNote in @intentius/chant/pr-loop. Version 1 of the workspace read contract. Readers ignore fields they do not know; a field is only ever added within a version.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["$schema", "contract", "stage", "pr", "env", "base", "head", "op", "gate", "digest", "status", "approval", "selection", "members", "changeSet"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "const": "https://intentius.io/chant/schemas/workspace/pr-report/v1/pr-report.schema.json" },
|
|
10
|
+
"contract": { "const": 1 },
|
|
11
|
+
"stage": { "enum": ["plan", "apply"] },
|
|
12
|
+
"pr": {
|
|
13
|
+
"type": ["integer", "null"],
|
|
14
|
+
"minimum": 1,
|
|
15
|
+
"description": "The pull or merge request number. null when an apply found no pull request that merged its commit."
|
|
16
|
+
},
|
|
17
|
+
"env": { "type": "string" },
|
|
18
|
+
"base": { "type": "string", "pattern": "^[0-9a-f]{40,64}$", "description": "The commit the change is measured from: the merge base of the given base and head." },
|
|
19
|
+
"head": { "type": "string", "pattern": "^[0-9a-f]{40,64}$" },
|
|
20
|
+
"op": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "The gate's op, pr-<number>. Its ledger is _gates/<op>.jsonl on chant/lifecycle. pr-unknown when no pull request was found."
|
|
23
|
+
},
|
|
24
|
+
"gate": { "type": "string", "description": "The gate the apply waits on, pr-apply unless the pipeline names another." },
|
|
25
|
+
"digest": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^(?:jcs1-)?sha256:[0-9a-f]{64}$",
|
|
28
|
+
"description": "The change-set digest of what this stage planned: computePlanDigest(\"change-set\", ...) over every member's { member, planDigest }. What the gate binds."
|
|
29
|
+
},
|
|
30
|
+
"status": {
|
|
31
|
+
"enum": ["planned", "plan-failed", "nothing", "applied", "failed", "refused"],
|
|
32
|
+
"description": "planned: every member planned (plan stage). plan-failed: a member failed to plan, so nothing can apply. nothing: no component deploys what the change touches. applied: every member applied. failed: a member failed to apply and its dependents did not run. refused: nothing applied, see refusal."
|
|
33
|
+
},
|
|
34
|
+
"refusal": {
|
|
35
|
+
"enum": ["not-approved", "plan-changed", "not-a-reviewer", "no-pull-request"],
|
|
36
|
+
"description": "Why an apply refused. plan-changed: an approval stands for another digest, so the plan changed after review."
|
|
37
|
+
},
|
|
38
|
+
"message": { "type": "string", "description": "The refusal or failure as printed." },
|
|
39
|
+
"approval": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"required": ["status"],
|
|
42
|
+
"properties": {
|
|
43
|
+
"status": { "enum": ["approved", "changed", "pending"], "description": "approved: an approval stands for digest. changed: one stands for another digest. pending: none stands." },
|
|
44
|
+
"approvedBy": { "type": "array", "items": { "type": "string" }, "description": "Who approved digest, as the approval names them (github:<login>, gitlab:<login>, <forge>@<host>:<login>, or a signer)." },
|
|
45
|
+
"approved": { "type": "string", "pattern": "^(?:jcs1-)?sha256:[0-9a-f]{64}$", "description": "With changed: the digest that was approved." }
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"selection": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"required": ["changed", "dependents", "unclaimed", "indeterminate", "waves"],
|
|
51
|
+
"description": "Component names. The fan-out derivation the change gives (#2417).",
|
|
52
|
+
"properties": {
|
|
53
|
+
"changed": { "type": "array", "items": { "type": "string" }, "description": "Components deploying a unit the change touched, in dependency order." },
|
|
54
|
+
"dependents": { "type": "array", "items": { "type": "string" }, "description": "Components selected because they depend on a changed one, in dependency order." },
|
|
55
|
+
"unclaimed": { "type": "array", "items": { "type": "string" }, "description": "Units the change touched that no component deploys." },
|
|
56
|
+
"indeterminate": { "type": "array", "items": { "type": "string" }, "description": "Components a source diff cannot judge that the walk did not reach." },
|
|
57
|
+
"waves": { "type": "array", "items": { "type": "array", "items": { "type": "string" } }, "description": "The selected components in parallel-safe waves, in apply order." }
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"members": {
|
|
61
|
+
"type": "array",
|
|
62
|
+
"description": "One entry per change-set member, sorted by member.",
|
|
63
|
+
"items": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"required": ["member", "component", "planDigest", "status", "counts"],
|
|
66
|
+
"properties": {
|
|
67
|
+
"member": { "type": "string", "description": "The member's name in the change set: the root, for a terraform-family step." },
|
|
68
|
+
"component": { "type": "string" },
|
|
69
|
+
"planDigest": { "type": ["string", "null"], "description": "What a gate on this member alone binds. null when it failed to plan." },
|
|
70
|
+
"status": { "enum": ["planned", "plan-failed", "applied", "failed", "blocked"] },
|
|
71
|
+
"counts": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"required": ["create", "update", "replace", "delete"],
|
|
74
|
+
"properties": {
|
|
75
|
+
"create": { "type": "integer", "minimum": 0 },
|
|
76
|
+
"update": { "type": "integer", "minimum": 0 },
|
|
77
|
+
"replace": { "type": "integer", "minimum": 0 },
|
|
78
|
+
"delete": { "type": "integer", "minimum": 0 }
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"error": { "type": "string" },
|
|
82
|
+
"inputsMoved": {
|
|
83
|
+
"type": "array",
|
|
84
|
+
"items": { "type": "string" },
|
|
85
|
+
"description": "Apply stage: components this one depends on whose outputs changed when they applied. It applied the plan it was approved with; the next run plans it against the new values."
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"changeSet": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"description": "The change-set document over every member (change-set.schema.json). Its digest equals digest."
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|