@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
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* ships.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import { execFileSync } from "node:child_process";
|
|
8
9
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
9
10
|
import { join, resolve } from "node:path";
|
|
10
11
|
import { afterAll, beforeAll, describe, expect, test } from "vitest";
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
checkReaderRead,
|
|
13
14
|
CONFORMANCE_FIXTURE_DIR,
|
|
14
15
|
createConformanceWorkspace,
|
|
16
|
+
UNCOMMITTED_DECISION,
|
|
15
17
|
READ_CONTRACT_COMMANDS,
|
|
16
18
|
REFERENCE_READS,
|
|
17
19
|
runWorkspaceReaderConformance,
|
|
@@ -32,8 +34,11 @@ const JSON_FLAG: Record<ReadContractCommand, string[]> = {
|
|
|
32
34
|
check: ["--format", "json"],
|
|
33
35
|
status: ["--json"],
|
|
34
36
|
records: ["--json"],
|
|
37
|
+
"records --uncommitted": ["--json"],
|
|
35
38
|
"graph --intent": ["--json"],
|
|
36
39
|
"graph --composites": ["--json"],
|
|
40
|
+
runs: ["--json"],
|
|
41
|
+
wip: ["--json"],
|
|
37
42
|
};
|
|
38
43
|
|
|
39
44
|
/** The smallest reader that conforms, with a hook to misbehave. */
|
|
@@ -48,7 +53,7 @@ function reader(twist: (doc: Record<string, unknown>, chant: ChantTransport) =>
|
|
|
48
53
|
|
|
49
54
|
let ws: ConformanceWorkspace;
|
|
50
55
|
beforeAll(() => {
|
|
51
|
-
ws = createConformanceWorkspace();
|
|
56
|
+
ws = createConformanceWorkspace({ uncommitted: true });
|
|
52
57
|
}, 300_000);
|
|
53
58
|
afterAll(() => ws?.dispose());
|
|
54
59
|
|
|
@@ -72,9 +77,37 @@ describe("the generated conformance workspace (#2679)", () => {
|
|
|
72
77
|
test("the decision record and the region the intent read names are in the workspace", async () => {
|
|
73
78
|
const docs: Record<string, unknown>[] = [];
|
|
74
79
|
await runWorkspaceReaderConformance(reader((doc) => (docs.push(doc), doc)), { workspaceDir: ws.dir, commands: ["records", "graph --intent"] });
|
|
75
|
-
expect((docs[0].records as { id: string }[]).map((r) => r.id)).toEqual([
|
|
80
|
+
expect((docs[0].records as { id: string; worktree: string }[]).map((r) => [r.id, r.worktree])).toEqual([
|
|
81
|
+
["fix-001", "committed"],
|
|
82
|
+
["fix-002", "new"],
|
|
83
|
+
]);
|
|
76
84
|
expect(docs[1].region).toBe(`region:${REFERENCE_READS["graph --intent"][0]}`);
|
|
77
85
|
}, 300_000);
|
|
86
|
+
|
|
87
|
+
test("records --uncommitted lists the decision the workspace leaves uncommitted, with the branch, head and base (#3160)", async () => {
|
|
88
|
+
const docs: Record<string, unknown>[] = [];
|
|
89
|
+
const report = await runWorkspaceReaderConformance(reader((doc) => (docs.push(doc), doc)), { workspaceDir: ws.dir, commands: ["records --uncommitted"] });
|
|
90
|
+
expect(report.problems).toEqual([]);
|
|
91
|
+
const head = execFileSync("git", ["rev-parse", "HEAD"], { cwd: ws.dir, encoding: "utf-8" }).trim();
|
|
92
|
+
expect(docs[0]).toMatchObject({
|
|
93
|
+
uncommitted: true,
|
|
94
|
+
checkout: { branch: "main", head, base: head, baseFrom: "main", deleted: [] },
|
|
95
|
+
records: [{ id: "fix-002", path: UNCOMMITTED_DECISION.path, worktree: "new", state: "proposed", valid: true }],
|
|
96
|
+
summary: { total: 1, valid: 1, invalid: 0 },
|
|
97
|
+
});
|
|
98
|
+
}, 300_000);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe("the generated workspace's agent run (#3033)", () => {
|
|
102
|
+
test("runs reads the run the workspace commit names, joined by its trailer and its record", async () => {
|
|
103
|
+
const docs: Record<string, unknown>[] = [];
|
|
104
|
+
const report = await runWorkspaceReaderConformance(reader((doc) => (docs.push(doc), doc)), { workspaceDir: ws.dir, commands: ["runs"] });
|
|
105
|
+
expect(report.problems).toEqual([]);
|
|
106
|
+
expect(docs[0]).toMatchObject({
|
|
107
|
+
runs: [{ id: "conformance-run", state: "ended", by: "conformance", cost: { amount: 0.01, currency: "USD" }, commits: [{ joinedBy: ["record", "trailer"] }] }],
|
|
108
|
+
totals: { all: { runs: 1, unpriced: [] } },
|
|
109
|
+
});
|
|
110
|
+
}, 300_000);
|
|
78
111
|
});
|
|
79
112
|
|
|
80
113
|
describe("commands (#2679)", () => {
|
|
@@ -87,7 +120,7 @@ describe("commands (#2679)", () => {
|
|
|
87
120
|
expect(report.problems).toEqual([]);
|
|
88
121
|
expect(read).toEqual(["ls", "status", "graph --composites"]);
|
|
89
122
|
expect(report.checked).toEqual(["ls", "status", "graph --composites"]);
|
|
90
|
-
expect(report.skipped).toEqual(["graph", "check", "records", "graph --intent"]);
|
|
123
|
+
expect(report.skipped).toEqual(["graph", "check", "records", "records --uncommitted", "graph --intent", "runs", "wip"]);
|
|
91
124
|
}, 300_000);
|
|
92
125
|
|
|
93
126
|
test("a name that is not a contract command, or an empty list, is refused", () => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// The entry of `@intentius/chant/workspace/conformance` for plain Node
|
|
2
|
-
// (#2679)
|
|
3
|
-
//
|
|
4
|
-
//
|
|
2
|
+
// (#2679): the reader suite, the writer suite (#3159), and the broker suite (#3164). The suites are
|
|
3
|
+
// written in TypeScript like the rest of the package, and Node does not
|
|
4
|
+
// strip types under node_modules, so this file loads them through tsx, a
|
|
5
|
+
// dependency of this package. `node --test` runs a reader's or a writer's
|
|
5
6
|
// test file that imports it with no loader flag. Types come from
|
|
6
7
|
// dist/workspace/conformance/index.d.ts.
|
|
7
8
|
|
|
@@ -15,6 +16,7 @@ export const {
|
|
|
15
16
|
READ_CONTRACT_JSON_FLAGS,
|
|
16
17
|
REFERENCE_READS,
|
|
17
18
|
CONFORMANCE_FIXTURE_DIR,
|
|
19
|
+
UNCOMMITTED_DECISION,
|
|
18
20
|
defaultChantCommand,
|
|
19
21
|
referenceWorkspaceDir,
|
|
20
22
|
readContractSchema,
|
|
@@ -32,4 +34,50 @@ export const {
|
|
|
32
34
|
recordingTransport,
|
|
33
35
|
readAndCheck,
|
|
34
36
|
runWorkspaceReaderConformance,
|
|
37
|
+
runChant,
|
|
38
|
+
WRITE_CONTRACT_ACTIONS,
|
|
39
|
+
WRITE_CONTRACT_SCHEMAS,
|
|
40
|
+
WRITE_CONTRACT_JSON_FLAGS,
|
|
41
|
+
WRITER_KINDS,
|
|
42
|
+
WRITER_PRINCIPALS,
|
|
43
|
+
WRITER_SCRIPT,
|
|
44
|
+
WRITER_FIXTURE_DIR,
|
|
45
|
+
WRITER_BOX,
|
|
46
|
+
WRITER_INPUTS,
|
|
47
|
+
writeWriterInputs,
|
|
48
|
+
readListing,
|
|
49
|
+
readWip,
|
|
50
|
+
PRIVATE_STATE_CATEGORIES,
|
|
51
|
+
writeArgv,
|
|
52
|
+
writeContractSchema,
|
|
53
|
+
worktreeDigest,
|
|
54
|
+
gitRefs,
|
|
55
|
+
refChanges,
|
|
56
|
+
isReadCall,
|
|
57
|
+
writerCallProblems,
|
|
58
|
+
writerDocumentProblems,
|
|
59
|
+
reportedWrites,
|
|
60
|
+
unreportedChanges,
|
|
61
|
+
buildStep,
|
|
62
|
+
referenceWriter,
|
|
63
|
+
createWriterConformanceWorkspace,
|
|
64
|
+
selectActions,
|
|
65
|
+
undeclaredState,
|
|
66
|
+
runWorkspaceWriterConformance,
|
|
67
|
+
CONCURRENT_AMENDS,
|
|
68
|
+
concurrentAmendStep,
|
|
69
|
+
concurrentAmends,
|
|
70
|
+
BROKER_CONFORMANCE_CAPABILITIES,
|
|
71
|
+
LOBBY_CAPABILITIES,
|
|
72
|
+
CONFORMANCE_BOXES,
|
|
73
|
+
CONFORMANCE_SECRET,
|
|
74
|
+
CONFORMANCE_UNHELD_SECRET,
|
|
75
|
+
BROKER_CHECKS,
|
|
76
|
+
brokerChecks,
|
|
77
|
+
brokerSchemaValidator,
|
|
78
|
+
schemaInstance,
|
|
79
|
+
startBrokerConformance,
|
|
80
|
+
runBrokerCheck,
|
|
81
|
+
runBrokerConformance,
|
|
82
|
+
upstreamHandlers,
|
|
35
83
|
} = suite;
|
|
@@ -35,6 +35,14 @@
|
|
|
35
35
|
* app, and a chant member with one composite and one component), declared
|
|
36
36
|
* by `chant workspace init --yes`, so {@link REFERENCE_READS} resolve in
|
|
37
37
|
* both. `workspaceDir` names another workspace with the same files.
|
|
38
|
+
*
|
|
39
|
+
* The workspace the suite generates for a run also holds one decision,
|
|
40
|
+
* proposed and never committed ({@link UNCOMMITTED_DECISION}), so
|
|
41
|
+
* `records --uncommitted` (#3160) has a record to list with its `worktree`.
|
|
42
|
+
* {@link createConformanceWorkspace} called directly leaves it out unless
|
|
43
|
+
* asked, so a test that writes records there allocates the ids it always
|
|
44
|
+
* did. In the chant repository the reference workspace holds whatever the
|
|
45
|
+
* checkout does, often nothing uncommitted.
|
|
38
46
|
*/
|
|
39
47
|
|
|
40
48
|
import { execFileSync, spawn } from "node:child_process";
|
|
@@ -48,7 +56,7 @@ import { isDeepStrictEqual } from "node:util";
|
|
|
48
56
|
import { READ_CONTRACT_VERSION } from "../reason-codes";
|
|
49
57
|
|
|
50
58
|
/** The read-contract commands, as a reader names them. */
|
|
51
|
-
export const READ_CONTRACT_COMMANDS = ["ls", "graph", "check", "status", "records", "graph --intent", "graph --composites"] as const;
|
|
59
|
+
export const READ_CONTRACT_COMMANDS = ["ls", "graph", "check", "status", "records", "records --uncommitted", "graph --intent", "graph --composites", "runs", "wip"] as const;
|
|
52
60
|
export type ReadContractCommand = (typeof READ_CONTRACT_COMMANDS)[number];
|
|
53
61
|
|
|
54
62
|
/**
|
|
@@ -62,8 +70,11 @@ export const READ_CONTRACT_SCHEMAS: Record<ReadContractCommand, string> = {
|
|
|
62
70
|
check: "check.schema.json",
|
|
63
71
|
status: "status.schema.json",
|
|
64
72
|
records: "records.schema.json",
|
|
73
|
+
"records --uncommitted": "records.schema.json",
|
|
65
74
|
"graph --intent": "intent.schema.json",
|
|
66
75
|
"graph --composites": "composites.schema.json",
|
|
76
|
+
runs: "runs.schema.json",
|
|
77
|
+
wip: "wip.schema.json",
|
|
67
78
|
};
|
|
68
79
|
|
|
69
80
|
/** The flags that ask each command for its JSON document. A reader adds one of these and nothing else. */
|
|
@@ -73,8 +84,11 @@ export const READ_CONTRACT_JSON_FLAGS: Record<ReadContractCommand, readonly (rea
|
|
|
73
84
|
check: [["--format", "json"]],
|
|
74
85
|
status: [["--json"]],
|
|
75
86
|
records: [["--json"]],
|
|
87
|
+
"records --uncommitted": [["--json"]],
|
|
76
88
|
"graph --intent": [["--json"]],
|
|
77
89
|
"graph --composites": [[], ["--json"]],
|
|
90
|
+
runs: [["--json"]],
|
|
91
|
+
wip: [["--json"]],
|
|
78
92
|
};
|
|
79
93
|
|
|
80
94
|
/** The arguments the suite passes each read, on the reference workspace or the generated one. */
|
|
@@ -84,21 +98,31 @@ export const REFERENCE_READS: Record<ReadContractCommand, string[]> = {
|
|
|
84
98
|
check: [],
|
|
85
99
|
status: ["dev"],
|
|
86
100
|
records: ["--kind", "decisions/decision.kind.mjs"],
|
|
101
|
+
"records --uncommitted": ["--kind", "decisions/decision.kind.mjs"],
|
|
87
102
|
"graph --intent": ["app/src/server.mjs:19", "--kind", "decisions/decision.kind.mjs"],
|
|
88
103
|
"graph --composites": [],
|
|
104
|
+
runs: [],
|
|
105
|
+
wip: [],
|
|
89
106
|
};
|
|
90
107
|
|
|
91
|
-
/** One chant run: the arguments after `chant`, and what it printed. */
|
|
108
|
+
/** One chant run: the arguments after `chant`, what it was given on stdin, and what it printed. */
|
|
92
109
|
export interface ChantRun {
|
|
93
110
|
argv: string[];
|
|
111
|
+
/** What the caller gave chant on stdin, such as a record's fields for `--from -` (#3159). Absent when nothing was. */
|
|
112
|
+
input?: string;
|
|
94
113
|
status: number | null;
|
|
95
114
|
stdout: string;
|
|
96
115
|
stderr: string;
|
|
97
116
|
}
|
|
98
117
|
|
|
99
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* How a reader or a writer runs chant. It runs in the workspace; the caller
|
|
120
|
+
* never sees the path. A writer passes `input` for a command that reads its
|
|
121
|
+
* fields from stdin (`--from -`, `--set -`, `--inputs -`, #3159); a reader
|
|
122
|
+
* never needs it.
|
|
123
|
+
*/
|
|
100
124
|
export interface ChantTransport {
|
|
101
|
-
run(argv: string[]): Promise<ChantRun>;
|
|
125
|
+
run(argv: string[], options?: { input?: string }): Promise<ChantRun>;
|
|
102
126
|
}
|
|
103
127
|
|
|
104
128
|
export interface WorkspaceReader {
|
|
@@ -316,8 +340,10 @@ export const MCP_READ_TOOLS: Partial<Record<ReadContractCommand, string>> = {
|
|
|
316
340
|
graph: "workspace-graph",
|
|
317
341
|
status: "workspace-status",
|
|
318
342
|
records: "workspace-records",
|
|
343
|
+
"records --uncommitted": "workspace-records",
|
|
319
344
|
"graph --intent": "workspace-graph",
|
|
320
345
|
"graph --composites": "workspace-graph",
|
|
346
|
+
runs: "workspace-runs",
|
|
321
347
|
};
|
|
322
348
|
|
|
323
349
|
/**
|
|
@@ -350,6 +376,10 @@ export function mcpToolCall(argv: readonly string[]): { name: string; arguments:
|
|
|
350
376
|
else if (a === "--work") args.work = value();
|
|
351
377
|
else if (a === "--severity") args.severity = value();
|
|
352
378
|
else if (a === "--current") args.current = true;
|
|
379
|
+
else if (a === "--unit") args.unit = value();
|
|
380
|
+
else if (a === "--decision") args.decision = value();
|
|
381
|
+
else if (a === "--by") args.by = value();
|
|
382
|
+
else if (a === "--uncommitted") args.uncommitted = true;
|
|
353
383
|
else if (a === "--composites") args.composites = true;
|
|
354
384
|
else if (a.startsWith("-")) return undefined;
|
|
355
385
|
else positional.push(a);
|
|
@@ -365,6 +395,8 @@ export function mcpToolCall(argv: readonly string[]): { name: string; arguments:
|
|
|
365
395
|
return positional.length === 0 && args.range !== undefined ? { name: "workspace-changes", arguments: { ...args, ...(kinds.length ? { kind: kinds } : {}) } } : undefined;
|
|
366
396
|
case "graph":
|
|
367
397
|
return positional.length === 0 ? { name: "workspace-graph", arguments: { ...args, ...(kinds.length ? { kind: kinds } : {}) } } : undefined;
|
|
398
|
+
case "runs":
|
|
399
|
+
return positional.length === 0 && kinds.length === 0 ? { name: "workspace-runs", arguments: args } : undefined;
|
|
368
400
|
default:
|
|
369
401
|
return undefined;
|
|
370
402
|
}
|
|
@@ -457,6 +489,47 @@ function git(cwd: string, ...args: string[]): void {
|
|
|
457
489
|
});
|
|
458
490
|
}
|
|
459
491
|
|
|
492
|
+
/**
|
|
493
|
+
* The decision the generated workspace leaves uncommitted (#3160): proposed,
|
|
494
|
+
* about the delivery member only, so the app region the intent read walks
|
|
495
|
+
* is unchanged. Its path from the workspace root, and its text.
|
|
496
|
+
*/
|
|
497
|
+
export const UNCOMMITTED_DECISION = {
|
|
498
|
+
path: "decisions/fix-002-where-kept-records-wait.md",
|
|
499
|
+
text: `---
|
|
500
|
+
schema: 1
|
|
501
|
+
id: "fix-002"
|
|
502
|
+
title: "Where kept records wait"
|
|
503
|
+
state: "proposed"
|
|
504
|
+
area: "delivery"
|
|
505
|
+
source:
|
|
506
|
+
kind: "workspace"
|
|
507
|
+
member: "delivery"
|
|
508
|
+
question: "Where does a record wait between being kept and being applied?"
|
|
509
|
+
options:
|
|
510
|
+
- id: "a"
|
|
511
|
+
label: "uncommitted in the working tree"
|
|
512
|
+
how: "The record stays a file in the checkout until it is committed or applied."
|
|
513
|
+
tradeoff: "A reader lists it with records --uncommitted, and nothing else holds it."
|
|
514
|
+
choice: null
|
|
515
|
+
rejected: []
|
|
516
|
+
supersedes: []
|
|
517
|
+
evidence:
|
|
518
|
+
- title: "INTENTIUS/chant#3160, uncommitted records in the read contract"
|
|
519
|
+
url: "https://github.com/INTENTIUS/chant/issues/3160"
|
|
520
|
+
decided_by: null
|
|
521
|
+
decided_on: null
|
|
522
|
+
reviews: []
|
|
523
|
+
constrains:
|
|
524
|
+
- "member:delivery"
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
# Where kept records wait
|
|
528
|
+
|
|
529
|
+
The reader conformance workspace leaves this decision uncommitted, so \`records --uncommitted\` has one record to list.
|
|
530
|
+
`,
|
|
531
|
+
} as const;
|
|
532
|
+
|
|
460
533
|
/** A workspace generated for a conformance run, and how to remove it. */
|
|
461
534
|
export interface ConformanceWorkspace {
|
|
462
535
|
dir: string;
|
|
@@ -468,9 +541,10 @@ export interface ConformanceWorkspace {
|
|
|
468
541
|
* `__fixture__/`, link this package in as `node_modules/@intentius/chant`
|
|
469
542
|
* so the chant member resolves it, declare the workspace with
|
|
470
543
|
* `chant workspace init --yes --name conformance` and commit it all to a new
|
|
471
|
-
* git repository on `main`.
|
|
544
|
+
* git repository on `main`. With `uncommitted`, then write
|
|
545
|
+
* {@link UNCOMMITTED_DECISION} and leave it uncommitted (#3160).
|
|
472
546
|
*/
|
|
473
|
-
export function createConformanceWorkspace(options: { chantCommand?: string[]; timeoutMs?: number } = {}): ConformanceWorkspace {
|
|
547
|
+
export function createConformanceWorkspace(options: { chantCommand?: string[]; timeoutMs?: number; uncommitted?: boolean } = {}): ConformanceWorkspace {
|
|
474
548
|
const chant = options.chantCommand ?? defaultChantCommand();
|
|
475
549
|
const scratch = realpathSync(mkdtempSync(join(tmpdir(), "chant-reader-conformance-")));
|
|
476
550
|
const dispose = () => rmSync(scratch, { recursive: true, force: true });
|
|
@@ -489,7 +563,18 @@ export function createConformanceWorkspace(options: { chantCommand?: string[]; t
|
|
|
489
563
|
timeout: options.timeoutMs ?? 120_000,
|
|
490
564
|
});
|
|
491
565
|
git(dir, "add", "-A");
|
|
492
|
-
git(dir, "commit", "--quiet", "-m", "the reader conformance workspace");
|
|
566
|
+
git(dir, "commit", "--quiet", "-m", "the reader conformance workspace", "-m", "Chant-Run: conformance-run");
|
|
567
|
+
// One agent run in the run ledger (#3033), which made that commit, so `runs` reads a run with every field.
|
|
568
|
+
const head = execFileSync("git", ["rev-parse", "HEAD"], { cwd: dir, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
569
|
+
const run = { id: "conformance-run", harness: { name: "conformance", version: "1" }, model: "none", provider: "none", by: "conformance", startedAt: "2026-01-01T00:00:00Z", endedAt: "2026-01-01T00:01:00Z", outcome: "done", usage: { turns: 1, inputTokens: 10, outputTokens: 5 }, cost: { amount: 0.01, currency: "USD", source: "conformance" }, transcript: { sha256: "0".repeat(64), ref: "conformance" }, commits: [head] };
|
|
570
|
+
execFileSync(chant[0], [...chant.slice(1), "workspace", "runs", "record", "--from", "-"], {
|
|
571
|
+
cwd: dir,
|
|
572
|
+
input: JSON.stringify(run),
|
|
573
|
+
env: { ...process.env, ...GIT_ENV, NO_COLOR: "1" },
|
|
574
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
575
|
+
timeout: options.timeoutMs ?? 120_000,
|
|
576
|
+
});
|
|
577
|
+
if (options.uncommitted) writeFileSync(join(dir, ...UNCOMMITTED_DECISION.path.split("/")), UNCOMMITTED_DECISION.text);
|
|
493
578
|
return { dir, dispose };
|
|
494
579
|
} catch (e) {
|
|
495
580
|
dispose();
|
|
@@ -503,14 +588,17 @@ export function conformanceTarget(options: WorkspaceReaderConformanceOptions = {
|
|
|
503
588
|
const chantCommand = options.chantCommand ?? defaultChantCommand();
|
|
504
589
|
const given = options.workspaceDir ?? referenceWorkspaceDir();
|
|
505
590
|
if (given) return { workspaceDir: given, chantCommand, dispose: () => {} };
|
|
506
|
-
const ws = createConformanceWorkspace({ chantCommand, timeoutMs: options.timeoutMs });
|
|
591
|
+
const ws = createConformanceWorkspace({ chantCommand, timeoutMs: options.timeoutMs, uncommitted: true });
|
|
507
592
|
return { workspaceDir: ws.dir, chantCommand, dispose: ws.dispose };
|
|
508
593
|
}
|
|
509
594
|
|
|
510
|
-
/** Run `command` in `cwd`, collecting what it printed. Resolves, never rejects. */
|
|
511
|
-
function runChant(command: string[], argv: string[], cwd: string, timeoutMs: number): Promise<ChantRun> {
|
|
595
|
+
/** Run `command` in `cwd`, with `input` on stdin when given, collecting what it printed. Resolves, never rejects. */
|
|
596
|
+
export function runChant(command: string[], argv: string[], cwd: string, timeoutMs: number, input?: string): Promise<ChantRun> {
|
|
512
597
|
return new Promise((settle) => {
|
|
513
|
-
const child = spawn(command[0], [...command.slice(1), ...argv], { cwd, env: { ...process.env, NO_COLOR: "1" }, stdio: ["
|
|
598
|
+
const child = spawn(command[0], [...command.slice(1), ...argv], { cwd, env: { ...process.env, NO_COLOR: "1" }, stdio: ["pipe", "pipe", "pipe"] });
|
|
599
|
+
const given = input === undefined ? {} : { input };
|
|
600
|
+
// Without input, stdin is closed at once, as it was when it was ignored.
|
|
601
|
+
child.stdin.on("error", () => {}).end(input ?? "");
|
|
514
602
|
let stdout = "";
|
|
515
603
|
let stderr = "";
|
|
516
604
|
child.stdout.setEncoding("utf-8").on("data", (s: string) => (stdout += s));
|
|
@@ -518,11 +606,11 @@ function runChant(command: string[], argv: string[], cwd: string, timeoutMs: num
|
|
|
518
606
|
const timer = setTimeout(() => child.kill("SIGKILL"), timeoutMs);
|
|
519
607
|
child.on("error", (e) => {
|
|
520
608
|
clearTimeout(timer);
|
|
521
|
-
settle({ argv: [...argv], status: null, stdout, stderr: `${stderr}${e.message}` });
|
|
609
|
+
settle({ argv: [...argv], ...given, status: null, stdout, stderr: `${stderr}${e.message}` });
|
|
522
610
|
});
|
|
523
611
|
child.on("close", (status) => {
|
|
524
612
|
clearTimeout(timer);
|
|
525
|
-
settle({ argv: [...argv], status, stdout, stderr });
|
|
613
|
+
settle({ argv: [...argv], ...given, status, stdout, stderr });
|
|
526
614
|
});
|
|
527
615
|
});
|
|
528
616
|
}
|
|
@@ -582,10 +670,10 @@ export function recordingTransport(target: () => { workspaceDir: string; chantCo
|
|
|
582
670
|
return { argv: [...argv], status: 0, stdout: JSON.stringify(doc), stderr: "" };
|
|
583
671
|
};
|
|
584
672
|
const transport: ChantTransport = {
|
|
585
|
-
async run(argv) {
|
|
673
|
+
async run(argv, options) {
|
|
586
674
|
calls.push([...argv]);
|
|
587
675
|
const t = target();
|
|
588
|
-
const run = over === "mcp" ? await viaMcp(argv) : await runChant(t.chantCommand, argv, t.workspaceDir, timeoutMs);
|
|
676
|
+
const run = over === "mcp" ? await viaMcp(argv) : await runChant(t.chantCommand, argv, t.workspaceDir, timeoutMs, options?.input);
|
|
589
677
|
printed.push(run);
|
|
590
678
|
return run;
|
|
591
679
|
},
|
|
@@ -656,3 +744,7 @@ export async function runWorkspaceReaderConformance(reader: WorkspaceReaderFacto
|
|
|
656
744
|
target.dispose();
|
|
657
745
|
}
|
|
658
746
|
}
|
|
747
|
+
|
|
748
|
+
// The writer suite (#3159), published from this same entry.
|
|
749
|
+
export * from "./writer";
|
|
750
|
+
export * from "./broker";
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
* The workspace reader conformance suite for vitest (#2657, #2679):
|
|
3
3
|
* {@link describeWorkspaceReaderConformance} wraps the runner-neutral checks
|
|
4
4
|
* of `./index` in `describe` and `it`, one test per listed command and one
|
|
5
|
-
* for the workspace's files.
|
|
6
|
-
*
|
|
5
|
+
* for the workspace's files. {@link describeWorkspaceWriterConformance}
|
|
6
|
+
* (#3159) does the same for the writer suite: one test per step of the
|
|
7
|
+
* script, and one per check after it. This is the only module of the suite
|
|
8
|
+
* that imports vitest; `@intentius/chant/workspace/conformance` imports no
|
|
9
|
+
* runner. {@link describeBrokerConformance} (#3164) makes one test per check
|
|
10
|
+
* of the broker suite.
|
|
7
11
|
*/
|
|
8
12
|
|
|
9
13
|
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
@@ -17,7 +21,16 @@ import {
|
|
|
17
21
|
selectCommands,
|
|
18
22
|
treeChanges,
|
|
19
23
|
treeDigest,
|
|
24
|
+
runWorkspaceWriterConformance,
|
|
25
|
+
selectActions,
|
|
26
|
+
WRITER_SCRIPT,
|
|
20
27
|
type WorkspaceReaderConformanceConfig,
|
|
28
|
+
type WorkspaceWriterConformanceConfig,
|
|
29
|
+
type WorkspaceWriterConformanceReport,
|
|
30
|
+
brokerChecks,
|
|
31
|
+
runBrokerCheck,
|
|
32
|
+
startBrokerConformance,
|
|
33
|
+
type BrokerConformanceConfig,
|
|
21
34
|
} from "./index";
|
|
22
35
|
|
|
23
36
|
export function describeWorkspaceReaderConformance(config: WorkspaceReaderConformanceConfig): void {
|
|
@@ -68,4 +81,65 @@ export function describeWorkspaceReaderConformance(config: WorkspaceReaderConfor
|
|
|
68
81
|
});
|
|
69
82
|
}
|
|
70
83
|
|
|
84
|
+
/**
|
|
85
|
+
* The writer suite in vitest: the runner-neutral run happens once, before the
|
|
86
|
+
* tests, and each test reports its part of it. A step whose action the writer
|
|
87
|
+
* does not list is skipped, as not applicable; the suite still performed it.
|
|
88
|
+
*/
|
|
89
|
+
export function describeWorkspaceWriterConformance(config: WorkspaceWriterConformanceConfig): void {
|
|
90
|
+
const { checked } = selectActions(config.actions);
|
|
91
|
+
describe(`workspace writer conformance (#3159): ${config.name}`, () => {
|
|
92
|
+
let report: WorkspaceWriterConformanceReport | undefined;
|
|
93
|
+
beforeAll(async () => {
|
|
94
|
+
report = await runWorkspaceWriterConformance(config.writer, config);
|
|
95
|
+
}, 900_000);
|
|
96
|
+
const ran = () => {
|
|
97
|
+
expect(report, "the writer suite did not run").toBeDefined();
|
|
98
|
+
return report!;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
for (const s of WRITER_SCRIPT) {
|
|
102
|
+
if (!checked.includes(s.action)) {
|
|
103
|
+
it.skip(`${s.id}: ${s.action} is not applicable, the writer does not list it in actions`, () => {});
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
it(`${s.id}: writes through chant workspace ${s.action} alone, and every change it made is one chant reports`, () => {
|
|
107
|
+
expect(ran().results.find((r) => r.id === s.id)?.problems).toEqual([]);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
it("facts() reads only through the read contract and changes nothing", () => expect(ran().after.facts).toEqual([]));
|
|
111
|
+
it("the state directory holds only what privateState declares", () => expect(ran().after.state).toEqual([]));
|
|
112
|
+
it("amnesia: with its private state deleted, the writer shows the same facts", () => expect(ran().after.amnesia).toEqual([]));
|
|
113
|
+
it("everything the writer holds is in the repository, or one of ws-074's four exceptions", () => expect(ran().after.holds).toEqual([]));
|
|
114
|
+
it("every fact the script produced reads back through the read contract, uncommitted ones included", () => expect(ran().after.readBack).toEqual([]));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The broker suite in vitest (#3164): the upstreams and the broker start
|
|
120
|
+
* before the tests, and each check is one test, run in order. A check of a
|
|
121
|
+
* capability the broker does not serve is skipped.
|
|
122
|
+
*/
|
|
123
|
+
export function describeBrokerConformance(config: BrokerConformanceConfig): void {
|
|
124
|
+
describe(`broker conformance (#3164): ${config.name}`, () => {
|
|
125
|
+
let run: Awaited<ReturnType<typeof startBrokerConformance>> | undefined;
|
|
126
|
+
beforeAll(async () => {
|
|
127
|
+
run = await startBrokerConformance(config);
|
|
128
|
+
}, 120_000);
|
|
129
|
+
afterAll(async () => {
|
|
130
|
+
await run?.close();
|
|
131
|
+
});
|
|
132
|
+
for (const { check, skipped } of brokerChecks(config)) {
|
|
133
|
+
if (skipped) {
|
|
134
|
+
it.skip(`${check.id}: not applicable, ${skipped}`, () => {});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
it(`${check.id}: ${check.title}`, async () => {
|
|
138
|
+
expect(run, "the broker did not start").toBeDefined();
|
|
139
|
+
expect(await runBrokerCheck(run!.ctx, check)).toEqual([]);
|
|
140
|
+
}, 60_000);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
71
145
|
export * from "./index";
|