@intentius/chant 0.90.0 → 0.93.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/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/handlers/components.d.ts +8 -0
- package/dist/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/operator.d.ts +20 -0
- package/dist/cli/handlers/operator.d.ts.map +1 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.d.ts +7 -4
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/plugins.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +42 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/components/verbs/vuln-scan.d.ts +72 -0
- package/dist/components/verbs/vuln-scan.d.ts.map +1 -1
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/lexicon-module.d.ts +22 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lifecycle/converge-ledger.d.ts +19 -0
- package/dist/lifecycle/converge-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +40 -5
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/lease.d.ts +72 -16
- package/dist/lifecycle/lease.d.ts.map +1 -1
- package/dist/lifecycle/member-ledger.d.ts +3 -2
- package/dist/lifecycle/member-ledger.d.ts.map +1 -1
- package/dist/lifecycle/plan-ledger.d.ts +114 -0
- package/dist/lifecycle/plan-ledger.d.ts.map +1 -0
- package/dist/lifecycle/run-ledger.d.ts +2 -0
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/symptoms.d.ts +51 -0
- package/dist/lifecycle/symptoms.d.ts.map +1 -1
- package/dist/lifecycle/work-lease.d.ts +140 -0
- package/dist/lifecycle/work-lease.d.ts.map +1 -0
- package/dist/lint/rules/index.d.ts +4 -2
- package/dist/lint/rules/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.d.ts +14 -3
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/ops014-converge-rule-refusals.d.ts.map +1 -1
- package/dist/lint/rules/op/sys010-key-over-plain-http.d.ts +29 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.d.ts.map +1 -0
- package/dist/lint/rules/sys001-no-literal-key.d.ts +3 -0
- package/dist/lint/rules/sys001-no-literal-key.d.ts.map +1 -0
- package/dist/op/__fixtures__/decide-stub-backend.d.ts +53 -0
- package/dist/op/__fixtures__/decide-stub-backend.d.ts.map +1 -0
- package/dist/op/activities/activity-contracts.d.ts +203 -2
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/apply.d.ts.map +1 -1
- package/dist/op/activities/change-coverage.d.ts +44 -0
- package/dist/op/activities/change-coverage.d.ts.map +1 -0
- package/dist/op/activities/converge.d.ts +24 -1
- package/dist/op/activities/converge.d.ts.map +1 -1
- package/dist/op/activities/decide.d.ts +107 -0
- package/dist/op/activities/decide.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +10 -0
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/shell.d.ts +32 -0
- package/dist/op/activities/shell.d.ts.map +1 -1
- package/dist/op/activities/source-release.d.ts +86 -0
- package/dist/op/activities/source-release.d.ts.map +1 -0
- package/dist/op/activities/source-rollback.d.ts +100 -0
- package/dist/op/activities/source-rollback.d.ts.map +1 -0
- package/dist/op/activities/work-evidence.d.ts +42 -0
- package/dist/op/activities/work-evidence.d.ts.map +1 -0
- package/dist/op/activity-contract.d.ts +1 -0
- package/dist/op/activity-contract.d.ts.map +1 -1
- package/dist/op/activity-profiles.d.ts +16 -0
- package/dist/op/activity-profiles.d.ts.map +1 -1
- package/dist/op/builders.d.ts +84 -2
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/composites/converge-op.d.ts +31 -4
- package/dist/op/composites/converge-op.d.ts.map +1 -1
- package/dist/op/decide-backend.d.ts +116 -0
- package/dist/op/decide-backend.d.ts.map +1 -0
- package/dist/op/decide-config.d.ts +120 -0
- package/dist/op/decide-config.d.ts.map +1 -0
- package/dist/op/decide-read-inputs.d.ts +40 -0
- package/dist/op/decide-read-inputs.d.ts.map +1 -0
- package/dist/op/discover.d.ts +25 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/gate-wait.d.ts +43 -0
- package/dist/op/gate-wait.d.ts.map +1 -0
- package/dist/op/gate.d.ts +5 -2
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/index.d.ts +18 -5
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/lifecycle-receipt-store.d.ts +34 -0
- package/dist/op/lifecycle-receipt-store.d.ts.map +1 -0
- package/dist/op/local-executor.d.ts +48 -4
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-output.d.ts +2 -0
- package/dist/op/local-output.d.ts.map +1 -1
- package/dist/op/op-ir.d.ts +12 -1
- 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 +126 -1
- package/dist/op/operator.d.ts.map +1 -1
- package/dist/op/runtime.d.ts +46 -5
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/source-archive.d.ts +63 -0
- package/dist/op/source-archive.d.ts.map +1 -0
- package/dist/op/step-output-ref.d.ts +2 -2
- package/dist/op/step-output-ref.d.ts.map +1 -1
- package/dist/op/steward-points.d.ts +136 -0
- package/dist/op/steward-points.d.ts.map +1 -0
- package/dist/op/steward-turn.d.ts +53 -0
- package/dist/op/steward-turn.d.ts.map +1 -0
- package/dist/op/steward.d.ts +161 -0
- package/dist/op/steward.d.ts.map +1 -0
- package/dist/op/types.d.ts +58 -0
- package/dist/op/types.d.ts.map +1 -1
- package/dist/op/work-lease-decl.d.ts +18 -0
- package/dist/op/work-lease-decl.d.ts.map +1 -0
- package/dist/op/work-lease-run.d.ts +173 -0
- package/dist/op/work-lease-run.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/decide-workspace.d.ts +100 -0
- package/dist/workspace/__fixtures__/decide-workspace.d.ts.map +1 -0
- package/dist/workspace/answers-ledger.d.ts +76 -0
- package/dist/workspace/answers-ledger.d.ts.map +1 -0
- package/dist/workspace/box-isolation.d.ts +99 -0
- package/dist/workspace/box-isolation.d.ts.map +1 -0
- package/dist/workspace/changes-cli.d.ts +16 -0
- package/dist/workspace/changes-cli.d.ts.map +1 -0
- package/dist/workspace/changes.d.ts +200 -0
- package/dist/workspace/changes.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.d.ts +59 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.d.ts +51 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.d.ts +26 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.d.ts +59 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.d.ts +22 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.d.ts +71 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.d.ts.map +1 -0
- package/dist/workspace/chant-migrations.d.ts +99 -0
- package/dist/workspace/chant-migrations.d.ts.map +1 -0
- package/dist/workspace/checks/box-isolation.d.ts +18 -0
- package/dist/workspace/checks/box-isolation.d.ts.map +1 -0
- package/dist/workspace/checks/boxes.d.ts +104 -0
- package/dist/workspace/checks/boxes.d.ts.map +1 -0
- package/dist/workspace/checks/diagrams.d.ts +31 -0
- package/dist/workspace/checks/diagrams.d.ts.map +1 -0
- package/dist/workspace/checks/records.d.ts +8 -0
- package/dist/workspace/checks/records.d.ts.map +1 -1
- package/dist/workspace/checks.d.ts +13 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/compose-graph.d.ts +2 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/decide.d.ts +229 -0
- package/dist/workspace/decide.d.ts.map +1 -0
- package/dist/workspace/decision-points.schema.json +137 -0
- package/dist/workspace/declaration.d.ts +103 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.schema.json +285 -0
- package/dist/workspace/declared-kinds.d.ts +32 -0
- package/dist/workspace/declared-kinds.d.ts.map +1 -1
- package/dist/workspace/generated-files.d.ts +7 -0
- package/dist/workspace/generated-files.d.ts.map +1 -1
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/lineage-check.d.ts +3 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.d.ts +6 -1
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/ls.d.ts +39 -1
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/point-answer.schema.json +95 -0
- package/dist/workspace/points-cli.d.ts +113 -0
- package/dist/workspace/points-cli.d.ts.map +1 -0
- package/dist/workspace/points.d.ts +320 -0
- package/dist/workspace/points.d.ts.map +1 -0
- package/dist/workspace/reason-codes.d.ts +38 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/record-assets.d.ts.map +1 -1
- package/dist/workspace/records-cli.d.ts +23 -1
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-close.d.ts +1 -1
- package/dist/workspace/records-close.d.ts.map +1 -1
- package/dist/workspace/records-write.d.ts +11 -5
- package/dist/workspace/records-write.d.ts.map +1 -1
- package/dist/workspace/records.d.ts +42 -6
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/status-gates.d.ts +7 -2
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status-stewards.d.ts +179 -0
- package/dist/workspace/status-stewards.d.ts.map +1 -0
- package/dist/workspace/status.d.ts +68 -1
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/work-cli.d.ts +189 -0
- package/dist/workspace/work-cli.d.ts.map +1 -0
- package/dist/workspace/work-evidence.d.ts +74 -0
- package/dist/workspace/work-evidence.d.ts.map +1 -0
- package/dist/workspace/work.d.ts +43 -1
- package/dist/workspace/work.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/audit.test.ts +9 -1
- package/src/cli/commands/build.ts +3 -2
- package/src/cli/commands/lint.ts +7 -1
- package/src/cli/handlers/components.test.ts +93 -0
- package/src/cli/handlers/components.ts +44 -3
- package/src/cli/handlers/graph.test.ts +20 -0
- package/src/cli/handlers/graph.ts +16 -2
- package/src/cli/handlers/operator.ts +141 -4
- package/src/cli/handlers/run.test.ts +173 -2
- package/src/cli/handlers/run.ts +174 -3
- package/src/cli/main.test.ts +50 -0
- package/src/cli/main.ts +97 -2
- package/src/cli/mcp/workspace-tools.test.ts +48 -19
- package/src/cli/mcp/workspace-tools.ts +110 -8
- package/src/cli/plugins.ts +11 -3
- package/src/cli/registry.ts +42 -1
- package/src/codegen/pinned-upgrade.ts +2 -1
- package/src/codegen/release-wiring.test.ts +49 -2
- package/src/components/capability-plugin-loader.ts +3 -3
- package/src/components/cli-support.ts +2 -2
- package/src/components/verbs/vuln-scan.test.ts +124 -1
- package/src/components/verbs/vuln-scan.ts +142 -1
- package/src/config.ts +11 -0
- package/src/lexicon-module.ts +56 -1
- package/src/lexicon-package.test.ts +96 -0
- package/src/lifecycle/converge-ledger.ts +20 -0
- package/src/lifecycle/git.ts +65 -15
- package/src/lifecycle/lease.test.ts +22 -0
- package/src/lifecycle/lease.ts +133 -29
- package/src/lifecycle/member-ledger.ts +3 -2
- package/src/lifecycle/plan-ledger.test.ts +148 -0
- package/src/lifecycle/plan-ledger.ts +158 -0
- package/src/lifecycle/run-ledger.ts +6 -0
- package/src/lifecycle/symptoms.ts +95 -0
- package/src/lifecycle/work-lease.test.ts +236 -0
- package/src/lifecycle/work-lease.ts +426 -0
- package/src/lint/rules/index.ts +6 -2
- package/src/lint/rules/op/index.ts +17 -4
- package/src/lint/rules/op/ops014-converge-rule-refusals.test.ts +23 -1
- package/src/lint/rules/op/ops014-converge-rule-refusals.ts +10 -6
- package/src/lint/rules/op/sys010-key-over-plain-http.test.ts +52 -0
- package/src/lint/rules/op/sys010-key-over-plain-http.ts +100 -0
- package/src/lint/rules/sys001-no-literal-key.test.ts +31 -0
- package/src/lint/rules/sys001-no-literal-key.ts +67 -0
- package/src/op/__fixtures__/decide-stub-backend.ts +143 -0
- package/src/op/activities/activity-contracts.ts +190 -1
- package/src/op/activities/apply.ts +7 -6
- package/src/op/activities/change-coverage.ts +60 -0
- package/src/op/activities/converge.test.ts +55 -1
- package/src/op/activities/converge.ts +208 -29
- package/src/op/activities/decide.live.test.ts +78 -0
- package/src/op/activities/decide.test.ts +300 -0
- package/src/op/activities/decide.ts +267 -0
- package/src/op/activities/index.ts +21 -0
- package/src/op/activities/shell.test.ts +91 -1
- package/src/op/activities/shell.ts +91 -2
- package/src/op/activities/source-release.test.ts +118 -0
- package/src/op/activities/source-release.ts +168 -0
- package/src/op/activities/source-rollback.test.ts +131 -0
- package/src/op/activities/source-rollback.ts +239 -0
- package/src/op/activities/work-evidence.ts +62 -0
- package/src/op/activity-contract-registry.test.ts +2 -0
- package/src/op/activity-contract-registry.ts +2 -2
- package/src/op/activity-contract.test.ts +12 -0
- package/src/op/activity-contract.ts +6 -1
- package/src/op/activity-profiles.ts +29 -0
- package/src/op/activity-registry.test.ts +1 -1
- package/src/op/activity-registry.ts +2 -2
- package/src/op/builders.ts +124 -5
- package/src/op/command-gate.test.ts +192 -0
- package/src/op/composites/converge-op.test.ts +27 -1
- package/src/op/composites/converge-op.ts +69 -15
- package/src/op/decide-backend.test.ts +44 -0
- package/src/op/decide-backend.ts +212 -0
- package/src/op/decide-config.test.ts +52 -0
- package/src/op/decide-config.ts +80 -0
- package/src/op/decide-read-inputs.ts +117 -0
- package/src/op/discover.ts +71 -0
- package/src/op/gate-approval.ts +2 -2
- package/src/op/gate-wait.ts +57 -0
- package/src/op/gate.ts +8 -3
- package/src/op/generate-pipeline.ts +2 -2
- package/src/op/index.ts +34 -6
- package/src/op/lifecycle-receipt-store.test.ts +60 -0
- package/src/op/lifecycle-receipt-store.ts +61 -0
- package/src/op/local-executor.ts +367 -33
- package/src/op/local-output.test.ts +33 -0
- package/src/op/local-output.ts +33 -2
- package/src/op/op-ir.test.ts +10 -0
- package/src/op/op-ir.ts +18 -0
- package/src/op/op-verb-class.ts +1 -0
- package/src/op/operator.ts +360 -10
- package/src/op/runtime.ts +37 -8
- package/src/op/runtimes/local.ts +6 -1
- package/src/op/source-archive.ts +161 -0
- package/src/op/step-output-ref.ts +6 -2
- package/src/op/steward-points.test.ts +313 -0
- package/src/op/steward-points.ts +194 -0
- package/src/op/steward-turn.ts +79 -0
- package/src/op/steward.test.ts +296 -0
- package/src/op/steward.ts +277 -0
- package/src/op/types.ts +60 -0
- package/src/op/work-lease-decl.ts +80 -0
- package/src/op/work-lease-run.test.ts +345 -0
- package/src/op/work-lease-run.ts +395 -0
- package/src/workspace/__fixtures__/decide-workspace.ts +129 -0
- package/src/workspace/__fixtures__/studio-template-84c8b21.json +67 -0
- package/src/workspace/answers-ledger.ts +118 -0
- package/src/workspace/box-isolation.test.ts +261 -0
- package/src/workspace/box-isolation.ts +205 -0
- package/src/workspace/changes-cli.ts +56 -0
- package/src/workspace/changes.schema.json +472 -0
- package/src/workspace/changes.test.ts +315 -0
- package/src/workspace/changes.ts +512 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit-fly-site.ts +234 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit-live-names.ts +164 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit-rollback.ts +223 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.ts +195 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit-ship-policy.ts +108 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +882 -0
- package/src/workspace/chant-migrations.e2e.test.ts +1089 -0
- package/src/workspace/chant-migrations.ts +164 -0
- package/src/workspace/check-contract.test.ts +5 -1
- package/src/workspace/check.schema.json +25 -7
- package/src/workspace/checks/box-isolation.ts +68 -0
- package/src/workspace/checks/boxes.test.ts +276 -0
- package/src/workspace/checks/boxes.ts +442 -0
- package/src/workspace/checks/diagrams.test.ts +134 -0
- package/src/workspace/checks/diagrams.ts +108 -0
- package/src/workspace/checks/records.ts +72 -0
- package/src/workspace/checks.test.ts +7 -0
- package/src/workspace/checks.ts +27 -3
- package/src/workspace/compose-graph.ts +2 -0
- package/src/workspace/conformance/__fixture__/decisions/decision.kind.mjs +10 -0
- package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +26 -0
- package/src/workspace/conformance/index.ts +5 -0
- package/src/workspace/decide.test.ts +224 -0
- package/src/workspace/decide.ts +709 -0
- package/src/workspace/decision-points.schema.json +137 -0
- package/src/workspace/declaration.schema.json +285 -0
- package/src/workspace/declaration.test.ts +58 -0
- package/src/workspace/declaration.ts +241 -0
- package/src/workspace/declared-kinds.test.ts +5 -5
- package/src/workspace/declared-kinds.ts +71 -3
- package/src/workspace/generated-files.ts +14 -0
- package/src/workspace/graph-cli.ts +1 -1
- package/src/workspace/graph.schema.json +9 -1
- package/src/workspace/intent.schema.json +12 -3
- package/src/workspace/intent.ts +3 -10
- package/src/workspace/lineage-check.ts +16 -1
- package/src/workspace/lineage-upgrade-cli.ts +1 -1
- package/src/workspace/lineage-upgrade.test.ts +70 -0
- package/src/workspace/lineage-upgrade.ts +81 -10
- package/src/workspace/ls-contract.test.ts +57 -0
- package/src/workspace/ls.schema.json +46 -1
- package/src/workspace/ls.ts +62 -3
- package/src/workspace/point-answer.schema.json +95 -0
- package/src/workspace/points-cli.ts +284 -0
- package/src/workspace/points-write.schema.json +499 -0
- package/src/workspace/points.schema.json +743 -0
- package/src/workspace/points.test.ts +264 -0
- package/src/workspace/points.ts +564 -0
- package/src/workspace/read-contract.test.ts +18 -1
- package/src/workspace/reason-codes.test.ts +24 -1
- package/src/workspace/reason-codes.ts +49 -0
- package/src/workspace/record-assets.test.ts +3 -2
- package/src/workspace/record-assets.ts +4 -1
- package/src/workspace/records-amend.schema.json +2 -0
- package/src/workspace/records-cli.ts +28 -5
- package/src/workspace/records-close.schema.json +2 -0
- package/src/workspace/records-contract.test.ts +3 -2
- package/src/workspace/records-new.schema.json +2 -0
- package/src/workspace/records-review.schema.json +2 -0
- package/src/workspace/records-sessions-write.e2e.test.ts +77 -0
- package/src/workspace/records-sessions-write.test.ts +2 -34
- package/src/workspace/records-write.e2e.test.ts +108 -0
- package/src/workspace/records-write.test.ts +32 -41
- package/src/workspace/records-write.ts +33 -15
- package/src/workspace/records.schema.json +53 -2
- package/src/workspace/records.test.ts +48 -3
- package/src/workspace/records.ts +142 -6
- package/src/workspace/status-contract.test.ts +189 -6
- package/src/workspace/status-gates.ts +9 -4
- package/src/workspace/status-stewards.ts +329 -0
- package/src/workspace/status.schema.json +335 -5
- package/src/workspace/status.ts +142 -6
- package/src/workspace/work-acceptance.test.ts +274 -0
- package/src/workspace/work-cli.e2e.test.ts +180 -0
- package/src/workspace/work-cli.ts +429 -0
- package/src/workspace/work-evidence.schema.json +212 -0
- package/src/workspace/work-evidence.ts +169 -0
- package/src/workspace/work-history.schema.json +349 -0
- package/src/workspace/work-history.test.ts +156 -0
- package/src/workspace/work-lease.schema.json +233 -0
- package/src/workspace/work-readiness-chud.test.ts +145 -0
- package/src/workspace/work.test.ts +3 -2
- package/src/workspace/work.ts +100 -1
- /package/src/cli/{discovery-skip.test.ts → discovery-skip.e2e.test.ts} +0 -0
- /package/src/workspace/conformance/{conformance.test.ts → conformance.e2e.test.ts} +0 -0
- /package/src/workspace/{which-chant.test.ts → which-chant.e2e.test.ts} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://intentius.io/chant/schemas/workspace/status/v1/status.schema.json",
|
|
4
4
|
"title": "chant workspace status output",
|
|
5
|
-
"description": "What `chant workspace status <env> --json` prints, version 1 of the read contract for releases across members (#2524 D15, D19, #2544). Readers ignore fields they do not know; a field is only ever added within a version. The reason and error codes are closed lists: a new code is a new contract version. Contract version 1 is written by chant 0.81.0 and newer; a reader that needs it refuses output whose `contract` it doesn't know. Every code is in the one closed list of `reason-codes.ts`. Each member's gates, read from its gate ledger on the same branch, are in the JSON only (#2674).",
|
|
5
|
+
"description": "What `chant workspace status <env> --json` prints, version 1 of the read contract for releases across members (#2524 D15, D19, #2544). Readers ignore fields they do not know; a field is only ever added within a version. The reason and error codes are closed lists: a new code is a new contract version. Contract version 1 is written by chant 0.81.0 and newer; a reader that needs it refuses output whose `contract` it doesn't know. Every code is in the one closed list of `reason-codes.ts`. Each member's gates, read from its gate ledger on the same branch, are in the JSON only (#2674), and so is each member's box block, from the declaration (#2726), with its isolation resolved (#2727). So are its stewards, their Ops and each Op's last run (#2731), the work lease each Op's turn holds (#2748), and the open decision points a steward waits on (#2749).",
|
|
6
6
|
"oneOf": [{ "$ref": "#/$defs/result" }, { "$ref": "#/$defs/failure" }],
|
|
7
7
|
"$defs": {
|
|
8
8
|
"result": {
|
|
@@ -45,6 +45,16 @@
|
|
|
45
45
|
"type": "array",
|
|
46
46
|
"items": { "$ref": "#/$defs/member" }
|
|
47
47
|
},
|
|
48
|
+
"leases": {
|
|
49
|
+
"description": "Added in contract 1 by #2732. Every work lease (chant workspace work claim) in the flat ledger and each member's, active and expired, by member (flat first) and then item. Read from the local lease refs, refs/chant/lease/[_members/<member>/]work/<id> and the remote's as last fetched; the command never fetches. A released lease has no ref and is not listed; its history is _leases/<id>.jsonl on chant/lifecycle.",
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "$ref": "#/$defs/lease" }
|
|
52
|
+
},
|
|
53
|
+
"acceptance": {
|
|
54
|
+
"description": "Added in contract 1 by #2772. Each current work item of a declared work kind whose work block names acceptance criteria, when the item lists some, by declared kind and then item, read in the working tree: how many of its criteria passing evidence meets. Empty when no declared work kind has criteria. A done item with a criterion unmet is what chant workspace check fails on (WSP117).",
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": { "$ref": "#/$defs/acceptance" }
|
|
57
|
+
},
|
|
48
58
|
"summary": {
|
|
49
59
|
"type": "object",
|
|
50
60
|
"required": ["members", "released", "unreadable", "differing"],
|
|
@@ -61,13 +71,39 @@
|
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
73
|
},
|
|
74
|
+
"acceptance": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"required": ["member", "kind", "item", "state", "met", "total"],
|
|
77
|
+
"properties": {
|
|
78
|
+
"member": { "type": ["string", "null"], "description": "The member that declares the work kind, or null for the workspace's own." },
|
|
79
|
+
"kind": { "type": "string", "description": "The work kind file, from the workspace root." },
|
|
80
|
+
"item": { "type": "string", "description": "The work item's id." },
|
|
81
|
+
"state": { "type": ["string", "null"], "description": "The item's state." },
|
|
82
|
+
"met": { "type": "integer", "minimum": 0, "description": "Criteria met by evidence naming them, with result pass and the criterion's verification; a manual verdict counts only from someone other than the implementer." },
|
|
83
|
+
"total": { "type": "integer", "minimum": 0, "description": "Criteria the item lists." }
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"lease": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"required": ["item", "member", "ref", "holder", "token", "acquiredAt", "expiresAt", "state"],
|
|
89
|
+
"properties": {
|
|
90
|
+
"item": { "type": "string", "description": "The work item's id." },
|
|
91
|
+
"member": { "type": ["string", "null"], "description": "The member whose ledger holds the lease: the one owning the work kind file, or null for the flat ledger." },
|
|
92
|
+
"ref": { "type": "string", "description": "The lease ref, refs/chant/lease/work/<id> or refs/chant/lease/_members/<member>/work/<id>." },
|
|
93
|
+
"holder": { "type": "string" },
|
|
94
|
+
"token": { "type": "string", "description": "The fencing token: new on every claim, kept by every renew." },
|
|
95
|
+
"acquiredAt": { "type": "string" },
|
|
96
|
+
"expiresAt": { "type": "string" },
|
|
97
|
+
"state": { "enum": ["active", "expired"], "description": "expired once expiresAt has passed: the item can be claimed again, with a new token." }
|
|
98
|
+
}
|
|
99
|
+
},
|
|
64
100
|
"env": {
|
|
65
101
|
"type": "string",
|
|
66
102
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$"
|
|
67
103
|
},
|
|
68
104
|
"member": {
|
|
69
105
|
"type": "object",
|
|
70
|
-
"required": ["name", "dir", "kind", "environments", "compare", "readable", "gateLedger", "gates"],
|
|
106
|
+
"required": ["name", "dir", "kind", "environments", "compare", "readable", "gateLedger", "gates", "box", "stewards", "stewardReasons"],
|
|
71
107
|
"properties": {
|
|
72
108
|
"name": { "type": "string" },
|
|
73
109
|
"dir": { "type": "string", "description": "Relative to the workspace root, with / separators; \".\" is the root member." },
|
|
@@ -85,10 +121,300 @@
|
|
|
85
121
|
},
|
|
86
122
|
"readable": { "type": "boolean", "description": "True exactly when no environment has a reason. A gate ledger reason doesn't change it." },
|
|
87
123
|
"gateLedger": { "$ref": "#/$defs/gateLedger" },
|
|
124
|
+
"box": {
|
|
125
|
+
"description": "The member's box block from the declaration (#2726), or null when it declares none. A broker reads the scopes it enforces here, and chant workspace check fails on a capability with a null broker (WSP122).",
|
|
126
|
+
"oneOf": [{ "type": "null" }, { "$ref": "#/$defs/box" }]
|
|
127
|
+
},
|
|
88
128
|
"gates": {
|
|
89
129
|
"description": "Each gate the member's gate ledger records, one per gate and environment, for env and compareTo. A gate that records no environment (an Op gate) is listed whatever the environment. Sorted by component, then gate. Empty when gateLedger has a reason.",
|
|
90
130
|
"type": "array",
|
|
91
131
|
"items": { "$ref": "#/$defs/gate" }
|
|
132
|
+
},
|
|
133
|
+
"stewards": {
|
|
134
|
+
"description": "The stewards the member declares in its *.op.ts files (#2731), sorted by name. Empty for a member that is not of kind chant, or has no chant.config.ts or .json in its own directory.",
|
|
135
|
+
"type": "array",
|
|
136
|
+
"items": { "$ref": "#/$defs/steward" }
|
|
137
|
+
},
|
|
138
|
+
"stewardReasons": {
|
|
139
|
+
"description": "Why a steward or an Op's last run may be missing from stewards. Empty when every one was read.",
|
|
140
|
+
"type": "array",
|
|
141
|
+
"items": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"required": ["code", "message"],
|
|
144
|
+
"properties": {
|
|
145
|
+
"code": { "enum": ["stewards-unreadable", "stewards-conflict", "steward-runs-unreadable"] },
|
|
146
|
+
"message": { "type": "string" }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"stewardForm": { "enum": ["local", "fountain"] },
|
|
153
|
+
"steward": {
|
|
154
|
+
"type": "object",
|
|
155
|
+
"required": ["name", "file", "form", "forms", "vault", "capabilities", "lease", "ops", "waiting"],
|
|
156
|
+
"properties": {
|
|
157
|
+
"name": { "type": "string", "description": "The steward's name; on Fountain, its Agent's and Teammate's." },
|
|
158
|
+
"file": { "type": "string", "description": "The *.op.ts file that declares it, relative to the member's directory." },
|
|
159
|
+
"form": { "$ref": "#/$defs/stewardForm", "description": "Its form in env: fountain (the fountain lexicon's Agent and Teammate) or local (chant operator --steward in the box)." },
|
|
160
|
+
"forms": {
|
|
161
|
+
"type": "object",
|
|
162
|
+
"required": ["default", "environments"],
|
|
163
|
+
"properties": {
|
|
164
|
+
"default": { "$ref": "#/$defs/stewardForm" },
|
|
165
|
+
"environments": {
|
|
166
|
+
"description": "The environments whose form differs from default.",
|
|
167
|
+
"type": "object",
|
|
168
|
+
"additionalProperties": { "$ref": "#/$defs/stewardForm" }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"vault": { "type": ["string", "null"], "description": "The vault the steward holds on Fountain, by name, or null. Never set when capabilities is non-empty." },
|
|
173
|
+
"capabilities": {
|
|
174
|
+
"description": "The box capabilities the steward reaches through a broker (#2726), in declaration order, joined with the member's box block. broker is the block's; declared is false when the block doesn't list the capability or the member has no block.",
|
|
175
|
+
"type": "array",
|
|
176
|
+
"items": {
|
|
177
|
+
"type": "object",
|
|
178
|
+
"required": ["name", "broker", "declared"],
|
|
179
|
+
"properties": {
|
|
180
|
+
"name": { "type": "string" },
|
|
181
|
+
"broker": { "type": ["string", "null"] },
|
|
182
|
+
"declared": { "type": "boolean" }
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"lease": {
|
|
187
|
+
"description": "The local steward's own lease ref, read locally and never fetched, or null when no local operator has held it. live is false once expiresAt has passed.",
|
|
188
|
+
"oneOf": [
|
|
189
|
+
{ "type": "null" },
|
|
190
|
+
{
|
|
191
|
+
"type": "object",
|
|
192
|
+
"required": ["holder", "acquiredAt", "expiresAt", "live"],
|
|
193
|
+
"properties": {
|
|
194
|
+
"holder": { "type": "string" },
|
|
195
|
+
"acquiredAt": { "type": "string" },
|
|
196
|
+
"expiresAt": { "type": "string" },
|
|
197
|
+
"live": { "type": "boolean" }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"ops": {
|
|
203
|
+
"description": "The Ops it runs, in declaration order.",
|
|
204
|
+
"type": "array",
|
|
205
|
+
"items": {
|
|
206
|
+
"type": "object",
|
|
207
|
+
"required": ["name", "schedule", "env", "lastRun", "lastTick", "changesCheckout", "workLease"],
|
|
208
|
+
"properties": {
|
|
209
|
+
"name": { "type": "string" },
|
|
210
|
+
"schedule": {
|
|
211
|
+
"description": "The Op's cadence, or null for an Op the steward runs only when asked.",
|
|
212
|
+
"oneOf": [
|
|
213
|
+
{ "type": "null" },
|
|
214
|
+
{
|
|
215
|
+
"type": "object",
|
|
216
|
+
"required": ["cron", "overlap"],
|
|
217
|
+
"properties": { "cron": { "type": "string" }, "overlap": { "const": "skip" } }
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"env": { "type": "string", "description": "The environment its runs are recorded under: its labels.Env, or local." },
|
|
222
|
+
"lastRun": {
|
|
223
|
+
"description": "The newest record in the Op's run ledger on chant/lifecycle, or null when it has none.",
|
|
224
|
+
"oneOf": [
|
|
225
|
+
{ "type": "null" },
|
|
226
|
+
{
|
|
227
|
+
"type": "object",
|
|
228
|
+
"required": ["id", "status", "started", "ended", "gate", "point"],
|
|
229
|
+
"properties": {
|
|
230
|
+
"id": { "type": "string" },
|
|
231
|
+
"status": { "enum": ["ok", "fail", "gated", "waiting"], "description": "waiting: an activity asked a decision point that is still open (#2749), and the run stopped there." },
|
|
232
|
+
"started": { "type": "string" },
|
|
233
|
+
"ended": { "type": "string" },
|
|
234
|
+
"gate": {
|
|
235
|
+
"oneOf": [
|
|
236
|
+
{ "type": "null" },
|
|
237
|
+
{
|
|
238
|
+
"type": "object",
|
|
239
|
+
"required": ["name", "since"],
|
|
240
|
+
"properties": {
|
|
241
|
+
"name": { "type": "string" },
|
|
242
|
+
"since": { "type": "string" },
|
|
243
|
+
"op": { "type": "string", "description": "The op the gate is recorded under: the Op's own, or the command's when a step's command stopped at a gate of its own (#2779), such as workspace-upgrade." },
|
|
244
|
+
"approve": { "type": "string", "description": "The command that approves the gate, run in the member's directory." }
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
]
|
|
248
|
+
},
|
|
249
|
+
"point": {
|
|
250
|
+
"description": "The open decision point a waiting run stopped on (#2749), as the run ledger records it, or null.",
|
|
251
|
+
"oneOf": [{ "type": "null" }, { "$ref": "#/$defs/stewardWait" }]
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"lastTick": {
|
|
258
|
+
"description": "For a ConvergeOp, its newest tick on the converge ledger (#2778): the rules that fired, what each did and for which resource, and what its observer step reported. null for any other Op, or before its first tick.",
|
|
259
|
+
"oneOf": [
|
|
260
|
+
{ "type": "null" },
|
|
261
|
+
{
|
|
262
|
+
"type": "object",
|
|
263
|
+
"required": ["id", "timestamp", "log", "firedRuleIds", "outcomes", "resources"],
|
|
264
|
+
"properties": {
|
|
265
|
+
"id": { "type": ["string", "null"] },
|
|
266
|
+
"timestamp": { "type": "string" },
|
|
267
|
+
"log": { "type": "string" },
|
|
268
|
+
"firedRuleIds": { "type": "array", "items": { "type": "string" } },
|
|
269
|
+
"outcomes": {
|
|
270
|
+
"type": "array",
|
|
271
|
+
"items": {
|
|
272
|
+
"type": "object",
|
|
273
|
+
"required": ["ruleId", "action", "op", "resource", "reason"],
|
|
274
|
+
"properties": {
|
|
275
|
+
"ruleId": { "type": "string" },
|
|
276
|
+
"action": { "enum": ["ran", "reported", "skipped-budget", "skipped-flap", "gated"] },
|
|
277
|
+
"op": { "type": ["string", "null"] },
|
|
278
|
+
"resource": { "type": ["string", "null"], "description": "The resource the rule fired for, on a ConvergeOp with an observer step." },
|
|
279
|
+
"reason": { "type": ["string", "null"] }
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
"resources": {
|
|
284
|
+
"description": "What the observer step reported, or null for a ConvergeOp that observes a lexicon environment.",
|
|
285
|
+
"oneOf": [
|
|
286
|
+
{ "type": "null" },
|
|
287
|
+
{
|
|
288
|
+
"type": "array",
|
|
289
|
+
"items": {
|
|
290
|
+
"type": "object",
|
|
291
|
+
"required": ["name", "status", "detail"],
|
|
292
|
+
"properties": {
|
|
293
|
+
"name": { "type": "string" },
|
|
294
|
+
"status": { "enum": ["in-sync", "drifted", "unknown"] },
|
|
295
|
+
"detail": { "type": ["string", "null"] }
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
]
|
|
304
|
+
},
|
|
305
|
+
"changesCheckout": { "type": "boolean", "description": "Whether the Op changes the checkout, and so runs under a work lease on a branch of its own, chant/work/<item> (#2748)." },
|
|
306
|
+
"workLease": {
|
|
307
|
+
"description": "The Op's work lease (#2748), or null when it declares none. kind is the work kind file whose ledger holds it, relative to the member, or null for the member's own ledger. held is the work leases the steward's turns of this Op hold (holder <steward>/<op>@<process>), read locally and never fetched: an active one while a turn runs, an expired one left by a turn that stopped renewing.",
|
|
308
|
+
"oneOf": [
|
|
309
|
+
{ "type": "null" },
|
|
310
|
+
{
|
|
311
|
+
"type": "object",
|
|
312
|
+
"required": ["kind", "held"],
|
|
313
|
+
"properties": {
|
|
314
|
+
"kind": { "type": ["string", "null"] },
|
|
315
|
+
"held": {
|
|
316
|
+
"type": "array",
|
|
317
|
+
"items": {
|
|
318
|
+
"type": "object",
|
|
319
|
+
"required": ["item", "holder", "token", "acquiredAt", "expiresAt", "state"],
|
|
320
|
+
"properties": {
|
|
321
|
+
"item": { "type": "string" },
|
|
322
|
+
"holder": { "type": "string" },
|
|
323
|
+
"token": { "type": "string" },
|
|
324
|
+
"acquiredAt": { "type": "string" },
|
|
325
|
+
"expiresAt": { "type": "string" },
|
|
326
|
+
"state": { "enum": ["active", "expired"] }
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"waiting": {
|
|
338
|
+
"description": "The open decision points the steward waits on (#2749): one for each of its Ops whose newest run is the steward's own and stopped on a question, in ops order. The state is the question's when the run stopped; `chant workspace points --open` has its state now, and hud asks a person there. The steward never answers one, and runs the Op again on the first round after it is answered.",
|
|
339
|
+
"type": "array",
|
|
340
|
+
"items": {
|
|
341
|
+
"allOf": [
|
|
342
|
+
{ "$ref": "#/$defs/stewardWait" },
|
|
343
|
+
{
|
|
344
|
+
"type": "object",
|
|
345
|
+
"required": ["op", "run"],
|
|
346
|
+
"properties": { "op": { "type": "string" }, "run": { "type": "string", "description": "The waiting run's id." } }
|
|
347
|
+
}
|
|
348
|
+
]
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"stewardWait": {
|
|
354
|
+
"type": "object",
|
|
355
|
+
"required": ["id", "point", "state", "path", "subject", "since"],
|
|
356
|
+
"properties": {
|
|
357
|
+
"id": { "type": "string", "description": "The answer record's id, as `points` lists the question and `points answer` names it." },
|
|
358
|
+
"point": { "type": "string" },
|
|
359
|
+
"state": { "enum": ["escalated", "proposed"] },
|
|
360
|
+
"path": { "type": "string", "description": "The answer record, from the repository root." },
|
|
361
|
+
"subject": { "type": ["string", "null"] },
|
|
362
|
+
"since": { "type": "string", "description": "When the run stopped on it." }
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
"box": {
|
|
366
|
+
"type": "object",
|
|
367
|
+
"required": ["capabilities", "isolation"],
|
|
368
|
+
"properties": {
|
|
369
|
+
"isolation": {
|
|
370
|
+
"description": "The box's isolation resolved from its identity, its host, the member's name and its slot (#2727), or null when the block declares no host. A runtime that plants or starts the box sets these values instead of choosing its own. The same for every environment.",
|
|
371
|
+
"oneOf": [{ "type": "null" }, { "$ref": "#/$defs/isolation" }]
|
|
372
|
+
},
|
|
373
|
+
"capabilities": {
|
|
374
|
+
"description": "Each capability the box reaches through a broker, in declaration order.",
|
|
375
|
+
"type": "array",
|
|
376
|
+
"items": {
|
|
377
|
+
"type": "object",
|
|
378
|
+
"required": ["name", "broker", "scope"],
|
|
379
|
+
"properties": {
|
|
380
|
+
"name": { "type": "string", "description": "The capability, such as inference or fountain." },
|
|
381
|
+
"broker": { "type": ["string", "null"], "description": "What brokers it, such as lobby, or null when the declaration names none." },
|
|
382
|
+
"scope": { "type": "array", "items": { "type": "string" }, "description": "What of the box's own the broker lets it reach, such as agent, vault, conversations and sandboxes. Empty when none is declared." }
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
"isolation": {
|
|
389
|
+
"type": "object",
|
|
390
|
+
"required": ["host", "slot", "portRange", "ports", "stateDir", "state", "cookies"],
|
|
391
|
+
"properties": {
|
|
392
|
+
"host": { "type": "string", "description": "The host the box runs on. Boxes on different hosts share nothing." },
|
|
393
|
+
"slot": { "type": "integer", "minimum": 0 },
|
|
394
|
+
"portRange": {
|
|
395
|
+
"type": "object",
|
|
396
|
+
"description": "The box's block of its host's range, inclusive: from + slot * perBox to from + (slot + 1) * perBox - 1.",
|
|
397
|
+
"required": ["from", "to"],
|
|
398
|
+
"properties": {
|
|
399
|
+
"from": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
400
|
+
"to": { "type": "integer", "minimum": 1, "maximum": 65535 }
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
"ports": {
|
|
404
|
+
"type": "object",
|
|
405
|
+
"description": "Each declared port's number: the block's first port plus the port's offset.",
|
|
406
|
+
"additionalProperties": { "type": "integer", "minimum": 1, "maximum": 65535 }
|
|
407
|
+
},
|
|
408
|
+
"stateDir": { "type": "string", "description": "<stateRoot>/<member name>. Its environment reference, such as ${XDG_STATE_HOME}, is left for the runtime to expand." },
|
|
409
|
+
"state": {
|
|
410
|
+
"type": "object",
|
|
411
|
+
"description": "Each declared state entry's path under stateDir, keyed as declared, such as HUD_IDENTITY_PATH.",
|
|
412
|
+
"additionalProperties": { "type": "string" }
|
|
413
|
+
},
|
|
414
|
+
"cookies": {
|
|
415
|
+
"type": "object",
|
|
416
|
+
"description": "Each declared cookie's name for this box: <cookie>_<member name>.",
|
|
417
|
+
"additionalProperties": { "type": "string" }
|
|
92
418
|
}
|
|
93
419
|
}
|
|
94
420
|
},
|
|
@@ -149,7 +475,7 @@
|
|
|
149
475
|
}
|
|
150
476
|
},
|
|
151
477
|
"needed": { "type": "integer", "minimum": 1, "description": "The human approvals the gate needs: its quorum's count, 1 without one." },
|
|
152
|
-
"approve": { "type": "string", "description": "The chant approve line for the gate, run in the member's directory: chant approve <component> <gate>, with --env <env> when env is not null." }
|
|
478
|
+
"approve": { "type": "string", "description": "The chant approve line for the gate, run in the member's directory: chant approve <component> <gate>, with --env <env> when env is not null and --plan <planDigest> when planDigest is not null (#2832), so the line approves the plan this read showed." }
|
|
153
479
|
}
|
|
154
480
|
},
|
|
155
481
|
"environment": {
|
|
@@ -191,7 +517,7 @@
|
|
|
191
517
|
},
|
|
192
518
|
"release": {
|
|
193
519
|
"type": "object",
|
|
194
|
-
"required": ["component", "digest", "gitSha", "inputDigest", "runId", "timestamp", "actor", "flags"],
|
|
520
|
+
"required": ["component", "digest", "gitSha", "inputDigest", "runId", "timestamp", "actor", "flags", "plan"],
|
|
195
521
|
"properties": {
|
|
196
522
|
"component": { "type": "string" },
|
|
197
523
|
"digest": { "type": "string", "description": "The artifact digest the release deployed." },
|
|
@@ -200,7 +526,11 @@
|
|
|
200
526
|
"runId": { "type": "string" },
|
|
201
527
|
"timestamp": { "type": "string" },
|
|
202
528
|
"actor": { "type": "string" },
|
|
203
|
-
"flags": { "type": "array", "items": { "enum": ["legacy-digest"] } }
|
|
529
|
+
"flags": { "type": "array", "items": { "enum": ["legacy-digest"] } },
|
|
530
|
+
"plan": {
|
|
531
|
+
"type": ["object", "null"],
|
|
532
|
+
"description": "The release plan digest names, read from _plans/<digest>.json on chant/lifecycle (ws-055, #2733): the work items and evidence this release shipped. Null when this checkout has no plan stored under that digest — most releases carry no plan, and a plan not yet fetched also reads null."
|
|
533
|
+
}
|
|
204
534
|
}
|
|
205
535
|
},
|
|
206
536
|
"compare": {
|