@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
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "urn:intentius:chant:point-answer:1",
|
|
4
|
+
"title": "Decision point answer front matter",
|
|
5
|
+
"description": "The front matter of one answer to a decision point (ws-058, #2739), as `chant workspace points ask` and `points answer` write it into the records directory of a record kind with an `answers` block. One record per point, declaration and inputs: its id is the point's name and the first 12 hex digits of the inputs hash, so the same question is answered once. A table's answer is `answered`; a model's answer at or above its threshold is `proposed` until a person confirms it; a question no decider before the quorum answered is `escalated`, open for people. An answer never changes in place: `points retract` escalates the question to people again and moves the answer into `retractions` (#3351, ws-084). An ad-hoc point's answer keeps the question and candidates its ask gave as `asked`, and they are part of the inputs hash (#3403). A workspace copies this file next to its answer kind, as reference-workspace/answers/ does. Values stay within what YAML and JSON share. Fields other than these must start with x-.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"patternProperties": { "^x-": {} },
|
|
9
|
+
"required": ["id", "title", "point", "point_version", "question_type", "candidates", "inputs", "inputs_hash", "state", "decider", "asked_on"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]*-[0-9a-f]{12}$", "description": "The point's name, a hyphen, and the first 12 hex digits of inputs_hash." },
|
|
12
|
+
"title": { "type": "string", "minLength": 1 },
|
|
13
|
+
"point": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$", "description": "The point in the points file this answers." },
|
|
14
|
+
"point_version": { "$ref": "#/definitions/sha256", "description": "sha256 of the point's declaration when it was asked. Editing the question or any decider changes it." },
|
|
15
|
+
"question_type": { "enum": ["noul", "choice", "score"] },
|
|
16
|
+
"candidates": { "type": "array", "minItems": 2, "items": { "type": ["string", "boolean"] }, "description": "The answers the question allowed: true and false, a choice's options, or a score's levels." },
|
|
17
|
+
"asked": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"description": "An ad-hoc point's question as its ask gave it (`points ask --candidates`, #3403): its text, and its criteria in the point's question type's shape, from which candidates come. People's answer is one of them.",
|
|
20
|
+
"required": ["question", "criteria"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"question": { "type": "string", "minLength": 1 },
|
|
23
|
+
"criteria": {
|
|
24
|
+
"oneOf": [
|
|
25
|
+
{ "type": "object", "minProperties": 2, "maxProperties": 255, "additionalProperties": { "type": "string" } },
|
|
26
|
+
{ "type": "array", "minItems": 2, "maxItems": 10, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"additionalProperties": false
|
|
31
|
+
},
|
|
32
|
+
"inputs": { "type": "object", "description": "The state the deciders saw, input name to value." },
|
|
33
|
+
"inputs_hash": { "$ref": "#/definitions/sha256", "description": "sha256 of the point, its version and its inputs. The same hash is answered once." },
|
|
34
|
+
"constrains": { "type": "array", "items": { "type": "string", "minLength": 1 }, "description": "What the question is about, such as a work item's id." },
|
|
35
|
+
"state": { "enum": ["escalated", "proposed", "answered"] },
|
|
36
|
+
"answer": { "type": ["string", "boolean"] },
|
|
37
|
+
"decider": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": ["kind"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"kind": { "enum": ["table", "model", "quorum"] },
|
|
42
|
+
"row": { "type": "integer", "minimum": 0, "description": "table: the row that matched." },
|
|
43
|
+
"backend": { "type": "string", "minLength": 1 },
|
|
44
|
+
"model": { "type": "string", "minLength": 1, "description": "model: the model id that answered, as the backend reported it." },
|
|
45
|
+
"count": { "type": "integer", "minimum": 1 },
|
|
46
|
+
"roles": { "type": "array", "items": { "type": "string" } },
|
|
47
|
+
"by": { "type": "array", "items": { "type": "string" }, "description": "quorum: who answered." }
|
|
48
|
+
},
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
},
|
|
51
|
+
"probabilities": { "$ref": "#/definitions/probabilities" },
|
|
52
|
+
"confidence": { "$ref": "#/definitions/unit" },
|
|
53
|
+
"threshold": { "$ref": "#/definitions/unit" },
|
|
54
|
+
"reason": { "type": "string", "minLength": 1, "description": "model: the model's own explanation of its answer, when the backend gave one (#3345). Kept when a person confirms the proposal; moved into the escalations as model_reason when people answer otherwise." },
|
|
55
|
+
"escalations": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"description": "The deciders asked before the one that answered, or before the quorum, and why each did not answer.",
|
|
58
|
+
"items": { "$ref": "#/definitions/escalation" }
|
|
59
|
+
},
|
|
60
|
+
"answered_by": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 }, "description": "The people who answered or confirmed it." },
|
|
61
|
+
"note": { "type": "string", "minLength": 1, "description": "What the people who answered wrote with their answer (`points answer --note`, #3351). Moved into the retraction when the answer is retracted." },
|
|
62
|
+
"relayed_by": { "type": "string", "minLength": 1, "description": "Who carried the answer to chant for the people in answered_by (`points answer --relayed-by`, #3402), such as a follower relaying a person's answer through hud. It does not count toward the quorum. Moved into the retraction as answer_relayed_by when the answer is retracted." },
|
|
63
|
+
"retractions": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"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.",
|
|
66
|
+
"items": { "$ref": "#/definitions/retraction" }
|
|
67
|
+
},
|
|
68
|
+
"asked_on": { "$ref": "#/definitions/date" },
|
|
69
|
+
"answered_on": { "$ref": "#/definitions/date" },
|
|
70
|
+
"source": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"description": "Where the answer came from (#2708): via, client and model, the model id that answered when a model decider did."
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"allOf": [
|
|
76
|
+
{
|
|
77
|
+
"if": { "properties": { "state": { "const": "proposed" } }, "required": ["state"] },
|
|
78
|
+
"then": { "required": ["answer"], "properties": { "decider": { "properties": { "kind": { "const": "model" } } } } }
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"if": { "properties": { "state": { "const": "answered" } }, "required": ["state"] },
|
|
82
|
+
"then": { "required": ["answer", "answered_on"] }
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"if": { "properties": { "state": { "const": "escalated" } }, "required": ["state"] },
|
|
86
|
+
"then": { "not": { "required": ["answer"] }, "properties": { "decider": { "properties": { "kind": { "const": "quorum" } } } } }
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"if": { "properties": { "decider": { "properties": { "kind": { "const": "model" } }, "required": ["kind"] } }, "required": ["decider"] },
|
|
90
|
+
"then": { "required": ["probabilities", "confidence", "threshold"], "properties": { "decider": { "required": ["backend", "model"] } } }
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"if": { "properties": { "state": { "const": "answered" }, "decider": { "properties": { "kind": { "const": "quorum" } }, "required": ["kind"] } }, "required": ["state", "decider"] },
|
|
94
|
+
"then": { "required": ["answered_by"], "properties": { "decider": { "required": ["by"] } } }
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"definitions": {
|
|
98
|
+
"sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
99
|
+
"unit": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
100
|
+
"date": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
|
|
101
|
+
"probabilities": { "type": "object", "additionalProperties": { "$ref": "#/definitions/unit" } },
|
|
102
|
+
"retraction": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"required": ["answer", "decider", "by", "on"],
|
|
105
|
+
"properties": {
|
|
106
|
+
"answer": { "type": ["string", "boolean"], "description": "The answer retracted." },
|
|
107
|
+
"decider": { "type": "object", "required": ["kind"], "properties": { "kind": { "enum": ["table", "model", "quorum"] } }, "description": "Who gave it: the record's decider as it was." },
|
|
108
|
+
"answered_by": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
109
|
+
"answered_on": { "$ref": "#/definitions/date" },
|
|
110
|
+
"answer_note": { "type": "string", "minLength": 1, "description": "The note the answer carried." },
|
|
111
|
+
"answer_relayed_by": { "type": "string", "minLength": 1, "description": "Who relayed the answer (#3402)." },
|
|
112
|
+
"by": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 }, "description": "Who retracted it." },
|
|
113
|
+
"on": { "$ref": "#/definitions/date" },
|
|
114
|
+
"note": { "type": "string", "minLength": 1, "description": "Why it was retracted (`points retract --note`)." }
|
|
115
|
+
},
|
|
116
|
+
"additionalProperties": false
|
|
117
|
+
},
|
|
118
|
+
"escalation": {
|
|
119
|
+
"type": "object",
|
|
120
|
+
"required": ["kind", "reason"],
|
|
121
|
+
"properties": {
|
|
122
|
+
"kind": { "enum": ["table", "model"] },
|
|
123
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
124
|
+
"backend": { "type": "string" },
|
|
125
|
+
"model": { "type": "string" },
|
|
126
|
+
"answer": { "type": ["string", "boolean", "null"] },
|
|
127
|
+
"probabilities": { "$ref": "#/definitions/probabilities" },
|
|
128
|
+
"confidence": { "$ref": "#/definitions/unit" },
|
|
129
|
+
"threshold": { "$ref": "#/definitions/unit" },
|
|
130
|
+
"model_reason": { "type": "string", "minLength": 1, "description": "model: the model's own explanation of the answer it gave, when the backend gave one (#3345). reason is why the decider did not answer." }
|
|
131
|
+
},
|
|
132
|
+
"additionalProperties": false
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// The contract record kind (#3148, ws-082), data only: no imports, no code.
|
|
2
|
+
//
|
|
3
|
+
// chant workspace records --kind design/contracts/contract.kind.mjs --current --json
|
|
4
|
+
//
|
|
5
|
+
// A contract is an acceptance criterion made formal: what a person can do,
|
|
6
|
+
// the criteria a check proves, and the check itself, a file pinned by hash.
|
|
7
|
+
// It is drafted, approved once its reviewers agree, and retired when nothing
|
|
8
|
+
// should be built against it any more. Studio's factory builds work items
|
|
9
|
+
// against approved contracts; a work kind links an item to its contract with
|
|
10
|
+
// work.contract (#3147). Each check run's result is an evidence record
|
|
11
|
+
// (../evidence/evidence.kind.mjs) that names the contract and its criteria.
|
|
12
|
+
export const recordKind = {
|
|
13
|
+
name: "contract",
|
|
14
|
+
location: { dir: ".", match: "^C-[0-9]{3,}-.+\\.md$" },
|
|
15
|
+
format: "markdown-front-matter",
|
|
16
|
+
schema: { id: "urn:intentius:chant:contract:1", path: "contract.schema.json" },
|
|
17
|
+
idField: "id",
|
|
18
|
+
stateField: "state",
|
|
19
|
+
states: ["draft", "approved", "retired"],
|
|
20
|
+
// An approved contract changes only in its state, its check pins and its
|
|
21
|
+
// reviews: anything else is a new contract that supersedes it. A retired
|
|
22
|
+
// contract is final and sealed.
|
|
23
|
+
closedStates: ["retired"],
|
|
24
|
+
approval: { draft: 0, approved: 1, retired: 1 },
|
|
25
|
+
seal: { field: "closed_digest" },
|
|
26
|
+
// A bare id or a list of ids, as studio's contracts write it. A link takes
|
|
27
|
+
// effect from an approved or retired contract.
|
|
28
|
+
supersedes: { field: "supersedes" },
|
|
29
|
+
// The contract's checks, each a workspace file pinned by the hash of its
|
|
30
|
+
// bytes (#2549): records reports a check edited after it was pinned.
|
|
31
|
+
pins: { field: "checks" },
|
|
32
|
+
// Verdicts on the contract, given in a review session (whose subjects
|
|
33
|
+
// include this kind) or with records review, and who approved it.
|
|
34
|
+
reviews: { field: "reviews", decider: "approved_by" },
|
|
35
|
+
// records new --by names a draft's proposer here (#2756).
|
|
36
|
+
proposedBy: { field: "proposed_by" },
|
|
37
|
+
};
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "urn:intentius:chant:contract:1",
|
|
4
|
+
"title": "Contract file front matter",
|
|
5
|
+
"description": "The front matter of one contract file in design/contracts/ (#3148, ws-082): an acceptance criterion made formal, with the criteria a check proves and the check pinned by hash. The Markdown body after the front matter is the story and any detail; the criteria are listed here, so a reader never parses the body. Values stay within what YAML and JSON share.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"patternProperties": {
|
|
9
|
+
"^x-": {}
|
|
10
|
+
},
|
|
11
|
+
"required": ["schema", "id", "title", "state", "criteria", "checks", "reviews", "approved_by"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"schema": {
|
|
14
|
+
"description": "Format version of this file. Bumped only by a change to this schema.",
|
|
15
|
+
"const": 1
|
|
16
|
+
},
|
|
17
|
+
"id": {
|
|
18
|
+
"description": "Stable id: C, a dash and three or more digits, as studio numbers its contracts. Never reused, never renumbered.",
|
|
19
|
+
"$ref": "#/definitions/contractId"
|
|
20
|
+
},
|
|
21
|
+
"title": {
|
|
22
|
+
"description": "What a person can do once the contract holds, in a few words.",
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
},
|
|
26
|
+
"state": {
|
|
27
|
+
"description": "draft: being written. approved: ready to build; only its state, checks and reviews change from here, and a changed contract is a new one that supersedes it. retired: nothing is built against it any more. Sealed once retired.",
|
|
28
|
+
"enum": ["draft", "approved", "retired"]
|
|
29
|
+
},
|
|
30
|
+
"tier": {
|
|
31
|
+
"description": "The builder tier the contract is built at, when it is fixed rather than asked of the slice-tier decision point: one of the tiers the work kind declares (#3147). Null or absent to leave it to the point.",
|
|
32
|
+
"type": ["string", "null"],
|
|
33
|
+
"pattern": "^[a-z][a-z0-9-]{0,31}$"
|
|
34
|
+
},
|
|
35
|
+
"criteria": {
|
|
36
|
+
"description": "The acceptance criteria, each with an id the check's tests are named after (a test named \"a1: ...\" checks a1) and the text it states. A work item that builds the contract lists criteria with the same ids in its acceptance, and an evidence record of a check run reports each by id. An approved contract states at least one.",
|
|
37
|
+
"type": "array",
|
|
38
|
+
"items": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"additionalProperties": false,
|
|
41
|
+
"required": ["id", "text"],
|
|
42
|
+
"properties": {
|
|
43
|
+
"id": { "$ref": "#/definitions/criterionId" },
|
|
44
|
+
"text": { "type": "string", "pattern": "\\S" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"checks": {
|
|
49
|
+
"description": "The contract's checks: test files a runner runs against the app (studio runs them with node --test and APP_URL), each pinned by the hash of its bytes, so chant workspace records reports a check edited after it was pinned. Usually one. Empty while none is written; records then warns record-no-evidence, and a factory leaves the contract unchecked.",
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "$ref": "#/definitions/checkPin" }
|
|
52
|
+
},
|
|
53
|
+
"references": {
|
|
54
|
+
"description": "Design assets a criterion is checked against besides its tests, such as a section of a driver's design document (design/drivers/D-001/design.html#notes-page). Optional.",
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"additionalProperties": false,
|
|
59
|
+
"required": ["criterion", "asset"],
|
|
60
|
+
"properties": {
|
|
61
|
+
"criterion": { "$ref": "#/definitions/criterionId" },
|
|
62
|
+
"asset": {
|
|
63
|
+
"description": "A workspace path, from the workspace root, with an optional #fragment naming a section in it.",
|
|
64
|
+
"type": "string",
|
|
65
|
+
"pattern": "^(?!/)(?!(?:[^/#]*/)*\\.{1,2}(?:[/#]|$))(?!.*//)[^\\\\\\u0000-\\u001f#]*[^/\\\\\\u0000-\\u001f#](#[A-Za-z][A-Za-z0-9:._-]*)?$"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"supersedes": {
|
|
71
|
+
"description": "The contract or contracts this one replaces, by id: a bare id, as studio's contracts write it, or a list. Takes effect once this contract is approved or retired. Optional.",
|
|
72
|
+
"oneOf": [
|
|
73
|
+
{ "$ref": "#/definitions/contractId" },
|
|
74
|
+
{ "type": "array", "items": { "$ref": "#/definitions/contractId" }, "uniqueItems": true }
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"proposed_by": {
|
|
78
|
+
"description": "Who drafted the contract: the name chant workspace records new --by wrote (#2756). Null or absent when nobody named one.",
|
|
79
|
+
"type": ["string", "null"]
|
|
80
|
+
},
|
|
81
|
+
"approved_by": {
|
|
82
|
+
"description": "Who approved the contract: a forge login. A contract approved in a review session also carries the verdicts that approved it in reviews. Null while it is a draft.",
|
|
83
|
+
"type": ["string", "null"]
|
|
84
|
+
},
|
|
85
|
+
"approved_on": {
|
|
86
|
+
"description": "When it was approved, as YYYY-MM-DD. Quoted, so YAML reads it as a string. Null or absent while it is a draft.",
|
|
87
|
+
"type": ["string", "null"],
|
|
88
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
|
|
89
|
+
},
|
|
90
|
+
"reviews": {
|
|
91
|
+
"description": "Each reviewer's verdict on the contract, in the decision kind's shape: reviewer, verdict, on, and the digest of the text judged. A verdict given in a review session names it in session (chant workspace records review --session). Empty until a review happens.",
|
|
92
|
+
"type": "array",
|
|
93
|
+
"items": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"required": ["reviewer", "verdict", "on"],
|
|
97
|
+
"properties": {
|
|
98
|
+
"reviewer": { "type": "string", "minLength": 1 },
|
|
99
|
+
"verdict": { "enum": ["agree", "dissent", "abstain"] },
|
|
100
|
+
"note": { "type": ["string", "null"] },
|
|
101
|
+
"on": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
|
|
102
|
+
"digest": {
|
|
103
|
+
"description": "The digest of the contract text the verdict judged: the lowercase hex SHA-256 of the file with LF line endings and without its reviews block (#2672).",
|
|
104
|
+
"type": "string",
|
|
105
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
106
|
+
},
|
|
107
|
+
"session": {
|
|
108
|
+
"description": "The id of the review session the verdict was given in.",
|
|
109
|
+
"type": "string",
|
|
110
|
+
"minLength": 1
|
|
111
|
+
},
|
|
112
|
+
"seal": {
|
|
113
|
+
"description": "The reviewer's ssh signature over the verdict (#2687), as chant workspace records review --sign writes it.",
|
|
114
|
+
"type": "object",
|
|
115
|
+
"additionalProperties": false,
|
|
116
|
+
"required": ["signer", "key", "signature"],
|
|
117
|
+
"properties": {
|
|
118
|
+
"signer": { "type": "string", "minLength": 1 },
|
|
119
|
+
"key": { "type": "string", "pattern": "^SHA256:[A-Za-z0-9+/]+=*$" },
|
|
120
|
+
"signature": { "type": "string", "pattern": "^-----BEGIN SSH SIGNATURE-----\\n" }
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"dependencies": { "seal": ["digest"] },
|
|
125
|
+
"if": {
|
|
126
|
+
"required": ["verdict"],
|
|
127
|
+
"properties": { "verdict": { "const": "dissent" } }
|
|
128
|
+
},
|
|
129
|
+
"then": {
|
|
130
|
+
"description": "A dissent needs a reason: the dissent by {reviewer} has no note.",
|
|
131
|
+
"required": ["note"],
|
|
132
|
+
"properties": { "note": { "type": "string", "pattern": "\\S" } }
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"seal": {
|
|
137
|
+
"description": "The author's ssh signature over the contract (#2688), as chant workspace records new --sign and amend --sign write it. Optional.",
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": false,
|
|
140
|
+
"required": ["signer", "key", "signature"],
|
|
141
|
+
"properties": {
|
|
142
|
+
"signer": { "type": "string", "minLength": 1 },
|
|
143
|
+
"key": { "type": "string", "pattern": "^SHA256:[A-Za-z0-9+/]+=*$" },
|
|
144
|
+
"signature": { "type": "string", "pattern": "^-----BEGIN SSH SIGNATURE-----\\n" }
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"closed_digest": {
|
|
148
|
+
"description": "The contract's whole-file seal (#2546, ws-063), written when it is retired: sha256: and the lowercase hex SHA-256 of the JCS form of {body, core}, line endings LF. chant workspace records reports record-seal-mismatch if the file changes afterwards.",
|
|
149
|
+
"type": "string",
|
|
150
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"allOf": [
|
|
154
|
+
{
|
|
155
|
+
"if": {
|
|
156
|
+
"required": ["state"],
|
|
157
|
+
"properties": { "state": { "enum": ["approved", "retired"] } }
|
|
158
|
+
},
|
|
159
|
+
"then": {
|
|
160
|
+
"description": "An approved or retired contract names who approved it.",
|
|
161
|
+
"properties": { "approved_by": { "type": "string", "minLength": 1 } }
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"if": {
|
|
166
|
+
"required": ["state"],
|
|
167
|
+
"properties": { "state": { "const": "approved" } }
|
|
168
|
+
},
|
|
169
|
+
"then": {
|
|
170
|
+
"description": "An approved contract states at least one criterion.",
|
|
171
|
+
"properties": { "criteria": { "minItems": 1 } }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"definitions": {
|
|
176
|
+
"contractId": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"pattern": "^C-[0-9]{3,}$"
|
|
179
|
+
},
|
|
180
|
+
"criterionId": {
|
|
181
|
+
"description": "A criterion's id, such as a1, unique in its contract.",
|
|
182
|
+
"type": "string",
|
|
183
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$"
|
|
184
|
+
},
|
|
185
|
+
"workspacePath": {
|
|
186
|
+
"description": "A path from the workspace root, with / separators: no leading /, no . or .. segment, no empty segment, no backslash and no trailing /.",
|
|
187
|
+
"type": "string",
|
|
188
|
+
"pattern": "^(?!/)(?!(?:[^/]*/)*\\.{1,2}(?:/|$))(?!.*//)[^\\\\\\u0000-\\u001f]*[^/\\\\\\u0000-\\u001f]$"
|
|
189
|
+
},
|
|
190
|
+
"checkPin": {
|
|
191
|
+
"description": "A check file in the workspace, pinned by the hash of its bytes (#2549).",
|
|
192
|
+
"type": "object",
|
|
193
|
+
"additionalProperties": false,
|
|
194
|
+
"required": ["title", "path", "sha256"],
|
|
195
|
+
"properties": {
|
|
196
|
+
"title": { "type": "string", "minLength": 1 },
|
|
197
|
+
"path": {
|
|
198
|
+
"description": "The check, from the workspace root, such as design/contracts/checks/C-001.test.mjs.",
|
|
199
|
+
"$ref": "#/definitions/workspacePath"
|
|
200
|
+
},
|
|
201
|
+
"sha256": {
|
|
202
|
+
"description": "Hex SHA-256 of the check's bytes when it was pinned. chant workspace records pin <path> prints it.",
|
|
203
|
+
"type": "string",
|
|
204
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
205
|
+
},
|
|
206
|
+
"as_of": {
|
|
207
|
+
"description": "When the check was pinned, as an ISO 8601 timestamp.",
|
|
208
|
+
"type": ["string", "null"]
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://intentius.io/chant/schemas/workspace/decision-points/v1/decision-points.schema.json",
|
|
3
|
+
"points": {
|
|
4
|
+
"slice-tier": {
|
|
5
|
+
"title": "Which builder tier builds this work item",
|
|
6
|
+
"question": {
|
|
7
|
+
"type": "choice",
|
|
8
|
+
"instructions": "Pick the smallest builder tier that can build this work item. The state is how much the work item holds and whether that fits each tier's sizing limits.",
|
|
9
|
+
"criteria": {
|
|
10
|
+
"small": "A haiku-class builder. The work item fits the small limits.",
|
|
11
|
+
"medium": "A mid-size builder. The work item fits the medium limits.",
|
|
12
|
+
"large": "The largest builder. The work item is bigger than the medium limits."
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"inputs": {
|
|
16
|
+
"work-item.criteria": "acceptance criteria in the work item",
|
|
17
|
+
"work-item.files": "distinct paths the work item names",
|
|
18
|
+
"work-item.words": "words in the body outside headings",
|
|
19
|
+
"work-item.fits_small": "whether it is within the small tier's limits",
|
|
20
|
+
"work-item.fits_medium": "whether it is within the medium tier's limits"
|
|
21
|
+
},
|
|
22
|
+
"deciders": [
|
|
23
|
+
{
|
|
24
|
+
"kind": "table",
|
|
25
|
+
"rows": [
|
|
26
|
+
{ "when": { "work-item.fits_small": true }, "answer": "small" },
|
|
27
|
+
{ "when": { "work-item.fits_medium": true }, "answer": "medium" }
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{ "kind": "model", "backend": "systemone", "model": "bosun-v3.1-1.7b", "threshold": 0.8 },
|
|
31
|
+
{ "kind": "quorum", "count": 1 }
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"understand": {
|
|
35
|
+
"title": "Is this ask understood well enough to build",
|
|
36
|
+
"question": {
|
|
37
|
+
"type": "choice",
|
|
38
|
+
"instructions": "A person asked for a change, and the ask is a work item whose source names what they said and who said it. The factory asks this before it builds the item. The state is the work item: its title and state, the person's words, who asked and where, and any acceptance criteria it has so far. Pick what happens next.",
|
|
39
|
+
"criteria": {
|
|
40
|
+
"proceed": "The ask is clear enough to build. The work item opens, and the factory builds it under its lease, writing its plan as acceptance criteria first.",
|
|
41
|
+
"redraft": "What the person wants is clear, but the work item does not say it well. Someone rewrites the item, which asks this point again, before anything is built.",
|
|
42
|
+
"ask": "The ask is unclear. Someone asks the person who made it what they mean before anything is built.",
|
|
43
|
+
"refuse": "The ask will not be built. The work item is dropped, with the reason."
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"inputs": {
|
|
47
|
+
"work-item.state": "the work item's state: proposed for an ask nobody has kept yet",
|
|
48
|
+
"work-item.title": "the work item's title",
|
|
49
|
+
"work-item.source.ask.said": "what the person said, verbatim",
|
|
50
|
+
"work-item.source.ask.by": "who asked",
|
|
51
|
+
"work-item.source.ask.via": "where the ask came in, such as hud, shell or mcp",
|
|
52
|
+
"work-item.acceptance": "the acceptance criteria the item has so far"
|
|
53
|
+
},
|
|
54
|
+
"deciders": [
|
|
55
|
+
{
|
|
56
|
+
"kind": "table",
|
|
57
|
+
"rows": [
|
|
58
|
+
{ "when": { "work-item.state": "open" }, "answer": "proceed", "note": "A person opened the item already, or it did not start as a proposal." }
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{ "kind": "quorum", "count": 1 }
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"ship-skip": {
|
|
65
|
+
"title": "May this release skip the human gate",
|
|
66
|
+
"question": {
|
|
67
|
+
"type": "noul",
|
|
68
|
+
"instructions": "May this release pass the ship gate without a person approving it? The state is what the release would change. No model decider answers this point, since a model's answer may route or report and never authorizes a release.",
|
|
69
|
+
"criteria": {
|
|
70
|
+
"true": "An agent may pass the gate for this release.",
|
|
71
|
+
"false": "A person approves the release at the gate."
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"inputs": {
|
|
75
|
+
"release.first_release": "nothing has shipped yet",
|
|
76
|
+
"release.new_migrations": "migrations that would fire",
|
|
77
|
+
"release.files_changed": "files changed since the serving release",
|
|
78
|
+
"release.app_changed": "whether any file under the app directory changed",
|
|
79
|
+
"release.work_changed": "whether any work item changed",
|
|
80
|
+
"release.units": "work items the release ships"
|
|
81
|
+
},
|
|
82
|
+
"deciders": [
|
|
83
|
+
{
|
|
84
|
+
"kind": "table",
|
|
85
|
+
"rows": [{ "when": {}, "answer": false, "note": "Never, until someone adds a row above this one that says when." }]
|
|
86
|
+
},
|
|
87
|
+
{ "kind": "quorum", "count": 1, "note": "The ship gate's quorum: a gate that asks this point takes its approver count from here." }
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"finding-triage": {
|
|
91
|
+
"title": "What to do about this finding",
|
|
92
|
+
"question": {
|
|
93
|
+
"type": "choice",
|
|
94
|
+
"instructions": "A finding from chant workspace graph --intent, or from chant workspace check --changes, is a gap between what the workspace decided and what it holds. Pick what happens to it. The state is the finding and the region it fired on.",
|
|
95
|
+
"criteria": {
|
|
96
|
+
"work-item": "Someone closes the gap. It becomes a work item whose source names the finding and its region.",
|
|
97
|
+
"needs-a-decision": "The gap is a choice nobody has made. Someone writes a decision before any work starts.",
|
|
98
|
+
"leave": "Nothing happens. The finding is known, accepted or already taken."
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"inputs": {
|
|
102
|
+
"finding.code": "the finding's code",
|
|
103
|
+
"finding.message": "what the finding says",
|
|
104
|
+
"finding.addressed": "whether a work item already addresses it",
|
|
105
|
+
"region.path": "the path the finding fired on",
|
|
106
|
+
"region.member": "the member the region is in",
|
|
107
|
+
"region.generated": "whether the region is a generated file"
|
|
108
|
+
},
|
|
109
|
+
"deciders": [
|
|
110
|
+
{
|
|
111
|
+
"kind": "table",
|
|
112
|
+
"rows": [
|
|
113
|
+
{ "when": { "finding.addressed": true }, "answer": "leave", "note": "A work item already addresses it." },
|
|
114
|
+
{ "when": { "finding.code": "intent-decision-unimplemented" }, "answer": "work-item", "note": "A decided decision that nobody is carrying out is work." },
|
|
115
|
+
{
|
|
116
|
+
"when": { "finding.code": { "in": ["intent-region-unconstrained", "intent-decision-contested", "intent-decision-superseded-live"] } },
|
|
117
|
+
"answer": "needs-a-decision",
|
|
118
|
+
"note": "No current decision that everyone agrees with covers the region."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"when": { "finding.code": "change-out-of-scope" },
|
|
122
|
+
"answer": "needs-a-decision",
|
|
123
|
+
"note": "A change crossed a boundary a record draws. Someone decides whether the boundary moves or the change goes, and no model answers leave for it. change-uncovered has no row: whether an uncovered change is work, a decision or nothing depends on what the path is, which the model reads."
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
{ "kind": "model", "backend": "systemone", "model": "jev-1.13.0", "threshold": 0.8 },
|
|
128
|
+
{ "kind": "quorum", "count": 1 }
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"needs-a-decision": {
|
|
132
|
+
"title": "Does this change need a decision",
|
|
133
|
+
"question": {
|
|
134
|
+
"type": "noul",
|
|
135
|
+
"instructions": "Does the change need a decision written before it lands? The state is the commits in the change's window that changed its region, as chant workspace graph --intent reads them, and the decisions the change's work item implements.",
|
|
136
|
+
"criteria": {
|
|
137
|
+
"true": "Someone writes a decision that covers the change, or amends one, before it lands.",
|
|
138
|
+
"false": "The decisions already in the workspace cover the change."
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"inputs": {
|
|
142
|
+
"commit.count": "commits in the window that changed the region",
|
|
143
|
+
"commit.undecided": "of those, the commits no decision's path window holds",
|
|
144
|
+
"commit.decided_by_window": "of those, the commits in a decision's window that are not that decision's own work",
|
|
145
|
+
"region.path": "the path the change touches",
|
|
146
|
+
"region.generated": "whether the region is a generated file",
|
|
147
|
+
"work-item.implements": "the decisions the change's work item implements"
|
|
148
|
+
},
|
|
149
|
+
"deciders": [
|
|
150
|
+
{
|
|
151
|
+
"kind": "table",
|
|
152
|
+
"rows": [
|
|
153
|
+
{ "when": { "commit.count": 0 }, "answer": false, "note": "Nothing changed in the window." },
|
|
154
|
+
{ "when": { "commit.undecided": 0, "commit.decided_by_window": 0 }, "answer": false, "note": "Every commit in the window is a decision's own work." }
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{ "kind": "model", "backend": "systemone", "model": "jev-1.13.0", "threshold": 0.8 },
|
|
158
|
+
{ "kind": "quorum", "count": 1 }
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
"intent-origin": {
|
|
162
|
+
"title": "Where this change came from",
|
|
163
|
+
"question": {
|
|
164
|
+
"type": "choice",
|
|
165
|
+
"instructions": "An intent walk (chant workspace graph --intent) asks this at a commit no decision's window holds: was the change meant to carry out a decision? The state is the region walked and the commit's node.",
|
|
166
|
+
"criteria": {
|
|
167
|
+
"carried-out-decision": "The change carried out a decision, written down or not.",
|
|
168
|
+
"incidental": "The change was incidental: a fix, a rename or upkeep that no decision is about.",
|
|
169
|
+
"unknown": "The person walking the region does not know."
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"inputs": {
|
|
173
|
+
"region.id": "the region walked, as graph --intent names it: region:<path>, with :<start>-<end> or #<symbol>",
|
|
174
|
+
"node.id": "the node of the walk the question is asked at, as graph --intent names it"
|
|
175
|
+
},
|
|
176
|
+
"deciders": [{ "kind": "quorum", "count": 1, "note": "The person walking the region answers. No table or model answers for them." }]
|
|
177
|
+
},
|
|
178
|
+
"intent-judgment": {
|
|
179
|
+
"title": "What the gap between this decision and the code is",
|
|
180
|
+
"question": {
|
|
181
|
+
"type": "choice",
|
|
182
|
+
"instructions": "An intent walk asks this at a decision, or at a commit made inside a decision's window that is not the decision's own work: does the code do what the decision says, and if not, why? The state is the region walked and the node.",
|
|
183
|
+
"criteria": {
|
|
184
|
+
"drift": "Drift: the code moved away from a decision that still holds.",
|
|
185
|
+
"unwritten-supersession": "A decision nobody wrote down superseded it.",
|
|
186
|
+
"decision-wrong": "The decision was wrong, and is reopened.",
|
|
187
|
+
"no-gap": "There is no gap: the code does what the decision says.",
|
|
188
|
+
"not-decidable": "It can't be decided from this walk."
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"inputs": {
|
|
192
|
+
"region.id": "the region walked, as graph --intent names it: region:<path>, with :<start>-<end> or #<symbol>",
|
|
193
|
+
"node.id": "the node of the walk the question is asked at, as graph --intent names it"
|
|
194
|
+
},
|
|
195
|
+
"deciders": [{ "kind": "quorum", "count": 1, "note": "The person walking the region answers. No table or model answers for them." }]
|
|
196
|
+
},
|
|
197
|
+
"intent-disposition": {
|
|
198
|
+
"title": "What happens about this node",
|
|
199
|
+
"question": {
|
|
200
|
+
"type": "choice",
|
|
201
|
+
"instructions": "An intent walk asks this at any other node, such as a unit, contract, evidence, artifact or the region itself: what was done about the question the walk asks there? The state is the region walked and the node.",
|
|
202
|
+
"criteria": {
|
|
203
|
+
"handled": "Handled: it is done, or nothing needed doing.",
|
|
204
|
+
"skipped": "Skipped, and the note says why.",
|
|
205
|
+
"needs-discussion": "It needs a discussion or a decision first."
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"inputs": {
|
|
209
|
+
"region.id": "the region walked, as graph --intent names it: region:<path>, with :<start>-<end> or #<symbol>",
|
|
210
|
+
"node.id": "the node of the walk the question is asked at, as graph --intent names it"
|
|
211
|
+
},
|
|
212
|
+
"deciders": [{ "kind": "quorum", "count": 1, "note": "The person walking the region answers. No table or model answers for them." }]
|
|
213
|
+
},
|
|
214
|
+
"agent-question": {
|
|
215
|
+
"title": "A question an agent asked the people working with it",
|
|
216
|
+
"adhoc": true,
|
|
217
|
+
"question": {
|
|
218
|
+
"type": "choice",
|
|
219
|
+
"instructions": "An agent asked the people working with it this question, with options of its own, and acts on the one they pick. The question and its options come with each ask, as hud's hud_ask and AskUserQuestion give them."
|
|
220
|
+
},
|
|
221
|
+
"inputs": {
|
|
222
|
+
"ask.id": "the asker's own id for this ask, such as hud's request id for the question, so each ask is a question of its own",
|
|
223
|
+
"ask.by": "who asked: the agent, or the session it asked in"
|
|
224
|
+
},
|
|
225
|
+
"deciders": [{ "kind": "quorum", "count": 1, "note": "A person in the room answers. No table or model answers an agent's question for them." }]
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// The driver record kind (#3148, ws-082), data only: no imports, no code.
|
|
2
|
+
//
|
|
3
|
+
// chant workspace records --kind design/drivers/driver.kind.mjs --json
|
|
4
|
+
//
|
|
5
|
+
// A driver groups contracts under one intent: what its member contracts add
|
|
6
|
+
// up to once all of them hold. Its body is the design notes. A driver has no
|
|
7
|
+
// lifecycle of its own; its contracts carry theirs. A review session may
|
|
8
|
+
// judge a driver beside decisions and contracts, as a sign-off on the group.
|
|
9
|
+
export const recordKind = {
|
|
10
|
+
name: "driver",
|
|
11
|
+
location: { dir: ".", match: "^D-[0-9]{3,}-.+\\.md$" },
|
|
12
|
+
format: "markdown-front-matter",
|
|
13
|
+
schema: { id: "urn:intentius:chant:driver:1", path: "driver.schema.json" },
|
|
14
|
+
idField: "id",
|
|
15
|
+
};
|