@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
|
@@ -402,6 +402,19 @@
|
|
|
402
402
|
"$ref": "#/$defs/recordRef"
|
|
403
403
|
},
|
|
404
404
|
"description": "Each other decision whose window holds the commit and whose path: entries cover one of the commit's files."
|
|
405
|
+
},
|
|
406
|
+
"joins": {
|
|
407
|
+
"$ref": "#/$defs/trailerJoins"
|
|
408
|
+
},
|
|
409
|
+
"runs": {
|
|
410
|
+
"type": "array",
|
|
411
|
+
"items": {
|
|
412
|
+
"$ref": "#/$defs/runRef"
|
|
413
|
+
},
|
|
414
|
+
"description": "The agent runs that made the commit (#3033). Added within version 1, so an older document may lack it."
|
|
415
|
+
},
|
|
416
|
+
"squash": {
|
|
417
|
+
"$ref": "#/$defs/squash"
|
|
405
418
|
}
|
|
406
419
|
}
|
|
407
420
|
},
|
|
@@ -463,7 +476,8 @@
|
|
|
463
476
|
"code": {
|
|
464
477
|
"enum": [
|
|
465
478
|
"intent-history-shallow",
|
|
466
|
-
"intent-plugin-failed"
|
|
479
|
+
"intent-plugin-failed",
|
|
480
|
+
"squash-unfollowed"
|
|
467
481
|
]
|
|
468
482
|
},
|
|
469
483
|
"message": {
|
|
@@ -524,6 +538,327 @@
|
|
|
524
538
|
},
|
|
525
539
|
"commits": false
|
|
526
540
|
}
|
|
541
|
+
},
|
|
542
|
+
"trailerJoins": {
|
|
543
|
+
"type": "object",
|
|
544
|
+
"description": "What chant's own commit trailers join the commit to (#3149, ws-075). Added within version 1, so an older document may lack it.",
|
|
545
|
+
"required": [
|
|
546
|
+
"agent",
|
|
547
|
+
"lease",
|
|
548
|
+
"run",
|
|
549
|
+
"records",
|
|
550
|
+
"applied"
|
|
551
|
+
],
|
|
552
|
+
"properties": {
|
|
553
|
+
"agent": {
|
|
554
|
+
"type": [
|
|
555
|
+
"string",
|
|
556
|
+
"null"
|
|
557
|
+
],
|
|
558
|
+
"description": "Chant-Agent: the agent session that wrote the commit (ws-067)."
|
|
559
|
+
},
|
|
560
|
+
"lease": {
|
|
561
|
+
"oneOf": [
|
|
562
|
+
{
|
|
563
|
+
"type": "null"
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"type": "object",
|
|
567
|
+
"required": [
|
|
568
|
+
"token",
|
|
569
|
+
"item"
|
|
570
|
+
],
|
|
571
|
+
"properties": {
|
|
572
|
+
"token": {
|
|
573
|
+
"type": "string",
|
|
574
|
+
"description": "Chant-Lease: the work lease's fencing token."
|
|
575
|
+
},
|
|
576
|
+
"item": {
|
|
577
|
+
"type": [
|
|
578
|
+
"string",
|
|
579
|
+
"null"
|
|
580
|
+
],
|
|
581
|
+
"description": "The work item a lease history on the local chant/lifecycle branch names for the token, or null when none does."
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
]
|
|
586
|
+
},
|
|
587
|
+
"run": {
|
|
588
|
+
"type": [
|
|
589
|
+
"string",
|
|
590
|
+
"null"
|
|
591
|
+
],
|
|
592
|
+
"description": "Chant-Run: the agent run that made the commit (#3033)."
|
|
593
|
+
},
|
|
594
|
+
"records": {
|
|
595
|
+
"type": "array",
|
|
596
|
+
"description": "Each well-formed Chant-Record value, <kind>:<id>, in order.",
|
|
597
|
+
"items": {
|
|
598
|
+
"type": "object",
|
|
599
|
+
"required": [
|
|
600
|
+
"kind",
|
|
601
|
+
"id",
|
|
602
|
+
"node"
|
|
603
|
+
],
|
|
604
|
+
"properties": {
|
|
605
|
+
"kind": {
|
|
606
|
+
"type": "string",
|
|
607
|
+
"description": "The record kind's name."
|
|
608
|
+
},
|
|
609
|
+
"id": {
|
|
610
|
+
"type": "string"
|
|
611
|
+
},
|
|
612
|
+
"node": {
|
|
613
|
+
"type": [
|
|
614
|
+
"string",
|
|
615
|
+
"null"
|
|
616
|
+
],
|
|
617
|
+
"description": "The id of the record's node, record:<kind>/<id>, when a kind read has the record; null otherwise."
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
},
|
|
622
|
+
"applied": {
|
|
623
|
+
"oneOf": [
|
|
624
|
+
{
|
|
625
|
+
"type": "null"
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"type": "object",
|
|
629
|
+
"required": [
|
|
630
|
+
"by",
|
|
631
|
+
"at",
|
|
632
|
+
"commit"
|
|
633
|
+
],
|
|
634
|
+
"properties": {
|
|
635
|
+
"by": {
|
|
636
|
+
"type": "string",
|
|
637
|
+
"description": "Chant-Applied-By: who applied the branch."
|
|
638
|
+
},
|
|
639
|
+
"at": {
|
|
640
|
+
"type": [
|
|
641
|
+
"string",
|
|
642
|
+
"null"
|
|
643
|
+
],
|
|
644
|
+
"description": "Chant-Applied-At, ISO 8601, or null when it is missing."
|
|
645
|
+
},
|
|
646
|
+
"commit": {
|
|
647
|
+
"type": [
|
|
648
|
+
"string",
|
|
649
|
+
"null"
|
|
650
|
+
],
|
|
651
|
+
"description": "Chant-Applied-Commit: the applied branch's tip, or null when it is missing or not a commit id."
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
]
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
"runRef": {
|
|
660
|
+
"type": "object",
|
|
661
|
+
"description": "An agent run that made the commit (#3033).",
|
|
662
|
+
"required": [
|
|
663
|
+
"id",
|
|
664
|
+
"recorded",
|
|
665
|
+
"state",
|
|
666
|
+
"harness",
|
|
667
|
+
"model",
|
|
668
|
+
"provider",
|
|
669
|
+
"by",
|
|
670
|
+
"agent",
|
|
671
|
+
"unit",
|
|
672
|
+
"joinedBy"
|
|
673
|
+
],
|
|
674
|
+
"properties": {
|
|
675
|
+
"id": {
|
|
676
|
+
"type": "string"
|
|
677
|
+
},
|
|
678
|
+
"recorded": {
|
|
679
|
+
"type": "boolean",
|
|
680
|
+
"description": "Whether the run ledger on the local chant/lifecycle branch has the run. When false, only the id is known."
|
|
681
|
+
},
|
|
682
|
+
"state": {
|
|
683
|
+
"enum": [
|
|
684
|
+
"running",
|
|
685
|
+
"ended",
|
|
686
|
+
null
|
|
687
|
+
]
|
|
688
|
+
},
|
|
689
|
+
"harness": {
|
|
690
|
+
"type": [
|
|
691
|
+
"string",
|
|
692
|
+
"null"
|
|
693
|
+
]
|
|
694
|
+
},
|
|
695
|
+
"model": {
|
|
696
|
+
"type": [
|
|
697
|
+
"string",
|
|
698
|
+
"null"
|
|
699
|
+
]
|
|
700
|
+
},
|
|
701
|
+
"provider": {
|
|
702
|
+
"type": [
|
|
703
|
+
"string",
|
|
704
|
+
"null"
|
|
705
|
+
]
|
|
706
|
+
},
|
|
707
|
+
"by": {
|
|
708
|
+
"type": [
|
|
709
|
+
"string",
|
|
710
|
+
"null"
|
|
711
|
+
],
|
|
712
|
+
"description": "The principal the run worked for."
|
|
713
|
+
},
|
|
714
|
+
"agent": {
|
|
715
|
+
"type": [
|
|
716
|
+
"string",
|
|
717
|
+
"null"
|
|
718
|
+
]
|
|
719
|
+
},
|
|
720
|
+
"unit": {
|
|
721
|
+
"type": [
|
|
722
|
+
"string",
|
|
723
|
+
"null"
|
|
724
|
+
],
|
|
725
|
+
"description": "The work item it worked on."
|
|
726
|
+
},
|
|
727
|
+
"joinedBy": {
|
|
728
|
+
"type": "array",
|
|
729
|
+
"minItems": 1,
|
|
730
|
+
"items": {
|
|
731
|
+
"enum": [
|
|
732
|
+
"trailer",
|
|
733
|
+
"record",
|
|
734
|
+
"patch-id",
|
|
735
|
+
"squash"
|
|
736
|
+
]
|
|
737
|
+
},
|
|
738
|
+
"description": "trailer: the commit carries Chant-Run with the run's id. record: the run's end lists the commit. patch-id: neither holds, and the commit's git patch-id --stable equals a commit's the run's end recorded, as after a rebase or a cherry-pick that dropped the trailer (#3036); never alongside the others. Added within version 1. squash: the commit squashes a pull request whose original commits join the run one of those ways, and the read was asked to follow squashes (#3035); via names them. Added within version 1."
|
|
739
|
+
},
|
|
740
|
+
"recordedAs": {
|
|
741
|
+
"type": "string",
|
|
742
|
+
"pattern": "^[0-9a-f]{40,64}$",
|
|
743
|
+
"description": "For a patch-id join (#3036): the commit the run's end recorded with the same patch-id, which this one rewrites. Added within version 1."
|
|
744
|
+
},
|
|
745
|
+
"via": {
|
|
746
|
+
"type": "array",
|
|
747
|
+
"items": {
|
|
748
|
+
"type": "string",
|
|
749
|
+
"pattern": "^[0-9a-f]{40,64}$"
|
|
750
|
+
},
|
|
751
|
+
"description": "For a squash join (#3035): the pull request's original commits through which the commit joins the run, oldest first. Added within version 1."
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
"squash": {
|
|
756
|
+
"type": "object",
|
|
757
|
+
"description": "Present only when the read follows squashes (--follow-squash, #3035) and the commit squashes a pull request: its subject ends with (#<n>), it has one parent, and the pull request's head is not in its history. The commit carries what the original commits' trailers carry and joins their runs. Added within version 1.",
|
|
758
|
+
"required": [
|
|
759
|
+
"pullRequest",
|
|
760
|
+
"forge",
|
|
761
|
+
"ref",
|
|
762
|
+
"head",
|
|
763
|
+
"fetched",
|
|
764
|
+
"followed",
|
|
765
|
+
"commits"
|
|
766
|
+
],
|
|
767
|
+
"properties": {
|
|
768
|
+
"pullRequest": {
|
|
769
|
+
"type": "integer",
|
|
770
|
+
"minimum": 1
|
|
771
|
+
},
|
|
772
|
+
"forge": {
|
|
773
|
+
"enum": [
|
|
774
|
+
"github",
|
|
775
|
+
"forgejo",
|
|
776
|
+
null
|
|
777
|
+
],
|
|
778
|
+
"description": "The forge origin points at, from its URL, or null for one chant doesn't know or no origin. Both keep the pull request's head at refs/pull/<n>/head."
|
|
779
|
+
},
|
|
780
|
+
"ref": {
|
|
781
|
+
"type": [
|
|
782
|
+
"string",
|
|
783
|
+
"null"
|
|
784
|
+
],
|
|
785
|
+
"description": "The local ref the head was read from: refs/chant/pull/<n>/head where a read fetched it, refs/pull/<n>/head, or refs/remotes/origin/pr/<n>. Null when none could be read."
|
|
786
|
+
},
|
|
787
|
+
"head": {
|
|
788
|
+
"oneOf": [
|
|
789
|
+
{
|
|
790
|
+
"type": "string",
|
|
791
|
+
"pattern": "^[0-9a-f]{40,64}$"
|
|
792
|
+
},
|
|
793
|
+
{
|
|
794
|
+
"type": "null"
|
|
795
|
+
}
|
|
796
|
+
],
|
|
797
|
+
"description": "The pull request's head commit, or null."
|
|
798
|
+
},
|
|
799
|
+
"fetched": {
|
|
800
|
+
"type": "boolean",
|
|
801
|
+
"description": "Whether this read fetched the ref from origin."
|
|
802
|
+
},
|
|
803
|
+
"followed": {
|
|
804
|
+
"type": "boolean",
|
|
805
|
+
"description": "Whether the original commits were read. When false, squash-unfollowed in reasons says why, and commits is empty."
|
|
806
|
+
},
|
|
807
|
+
"commits": {
|
|
808
|
+
"type": "array",
|
|
809
|
+
"items": {
|
|
810
|
+
"type": "object",
|
|
811
|
+
"required": [
|
|
812
|
+
"sha",
|
|
813
|
+
"subject",
|
|
814
|
+
"author",
|
|
815
|
+
"date",
|
|
816
|
+
"trailers",
|
|
817
|
+
"joins"
|
|
818
|
+
],
|
|
819
|
+
"properties": {
|
|
820
|
+
"sha": {
|
|
821
|
+
"type": "string",
|
|
822
|
+
"pattern": "^[0-9a-f]{40,64}$"
|
|
823
|
+
},
|
|
824
|
+
"subject": {
|
|
825
|
+
"type": "string"
|
|
826
|
+
},
|
|
827
|
+
"author": {
|
|
828
|
+
"type": "object",
|
|
829
|
+
"required": [
|
|
830
|
+
"name",
|
|
831
|
+
"email"
|
|
832
|
+
],
|
|
833
|
+
"properties": {
|
|
834
|
+
"name": {
|
|
835
|
+
"type": "string"
|
|
836
|
+
},
|
|
837
|
+
"email": {
|
|
838
|
+
"type": "string"
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
},
|
|
842
|
+
"date": {
|
|
843
|
+
"type": "string"
|
|
844
|
+
},
|
|
845
|
+
"trailers": {
|
|
846
|
+
"type": "object",
|
|
847
|
+
"additionalProperties": {
|
|
848
|
+
"type": "array",
|
|
849
|
+
"items": {
|
|
850
|
+
"type": "string"
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
},
|
|
854
|
+
"joins": {
|
|
855
|
+
"$ref": "#/$defs/trailerJoins"
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
},
|
|
859
|
+
"description": "The original commits, oldest first: the head's commits the squash's parent doesn't have, merges left out."
|
|
860
|
+
}
|
|
861
|
+
}
|
|
527
862
|
}
|
|
528
863
|
}
|
|
529
864
|
}
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
*
|
|
18
18
|
* - `own`: the record's own work, as the region walk judges it: a commit a
|
|
19
19
|
* plugin joins to a unit whose unit or contract names the record, or that
|
|
20
|
-
* serves a contract the record constrains
|
|
20
|
+
* serves a contract the record constrains; or a commit whose own trailers
|
|
21
|
+
* (#3149) name the record, or a work item that implements it.
|
|
21
22
|
* - `worked`: inside the window of a work item that is not dropped and that
|
|
22
23
|
* implements the record, or whose `path:` entries cover a file the commit
|
|
23
24
|
* changed in the record's region.
|
|
@@ -28,12 +29,16 @@
|
|
|
28
29
|
* `workedBy` and `alsoWithin` list every work item and other decision that
|
|
29
30
|
* matched, whatever the bucket. `issue` and `contract` entries are listed and
|
|
30
31
|
* not walked: they name no path. Git is read through a local `git`
|
|
31
|
-
* subprocess only: no fetch, no network
|
|
32
|
+
* subprocess only: no fetch, no network, unless the walk is asked to follow
|
|
33
|
+
* squashes (#3035). Then a squash commit lists its pull request's original
|
|
34
|
+
* commits, joins their runs and counts as the record's own work when one of
|
|
35
|
+
* them carries it, and a pull request ref the clone lacks is fetched from
|
|
36
|
+
* `origin`.
|
|
32
37
|
*/
|
|
33
38
|
|
|
34
39
|
import { declaredRecordKinds, readDeclaration, readerVersion, WorkspaceReadError } from "./declaration";
|
|
35
40
|
import { declaredKindFile } from "./declared-kinds";
|
|
36
|
-
import { entityDecisions, runCommitJoins } from "./intent-joins";
|
|
41
|
+
import { entityDecisions, runCommitJoins, type IntentCommit } from "./intent-joins";
|
|
37
42
|
import {
|
|
38
43
|
addingCommit,
|
|
39
44
|
closingCommit,
|
|
@@ -52,6 +57,9 @@ import { constraintCovers, isWorkspacePath, memberHolding } from "./record-asset
|
|
|
52
57
|
import type { DecidedIn } from "./record-decided";
|
|
53
58
|
import { RecordReadError } from "./records";
|
|
54
59
|
import type { RecordView } from "./records-cli";
|
|
60
|
+
import { addSquashRuns, runsForCommits, type RunRef } from "./runs";
|
|
61
|
+
import { followSquashes, type Forge, type SquashFollow } from "./squash";
|
|
62
|
+
import { readTrailerJoins, type CommitTrailerJoins } from "./trailer-joins";
|
|
55
63
|
import { joinPath } from "./tree";
|
|
56
64
|
import { locateWorkspace } from "./which-chant";
|
|
57
65
|
import { idList } from "./work";
|
|
@@ -91,6 +99,20 @@ export interface RecordCommit {
|
|
|
91
99
|
pullRequest: number | null;
|
|
92
100
|
/** The unit a plugin joined the commit to, or null. */
|
|
93
101
|
unit: string | null;
|
|
102
|
+
/** What chant's own trailers join the commit to (#3149), as a commit node in `graph --intent` reports it. */
|
|
103
|
+
joins: CommitTrailerJoins;
|
|
104
|
+
/** The agent runs that made the commit (#3033): the one its Chant-Run names, and any whose record lists it. */
|
|
105
|
+
runs: RunRef[];
|
|
106
|
+
/** Only when the walk follows squashes (#3035) and the commit squashes a pull request: its original commits and what their trailers join. */
|
|
107
|
+
squash?: {
|
|
108
|
+
pullRequest: number;
|
|
109
|
+
forge: Forge | null;
|
|
110
|
+
ref: string | null;
|
|
111
|
+
head: string | null;
|
|
112
|
+
fetched: boolean;
|
|
113
|
+
followed: boolean;
|
|
114
|
+
commits: { sha: string; subject: string; author: { name: string; email: string }; date: string; trailers: Record<string, string[]>; joins: CommitTrailerJoins }[];
|
|
115
|
+
};
|
|
94
116
|
/** The record's constrains entries whose history listed the commit. */
|
|
95
117
|
entries: string[];
|
|
96
118
|
/** The files the commit changed in the record's region, from the workspace root. Empty when git lists none, as for a merge that changed nothing against its first parent there. */
|
|
@@ -139,6 +161,8 @@ export interface IntentRecordQuery {
|
|
|
139
161
|
record: string;
|
|
140
162
|
at?: string;
|
|
141
163
|
kinds?: string[];
|
|
164
|
+
/** Follow squash merges to their pull requests' original commits, fetching a missing pull request ref from `origin` (#3035). */
|
|
165
|
+
followSquash?: boolean;
|
|
142
166
|
}
|
|
143
167
|
|
|
144
168
|
export interface IntentRecordResult {
|
|
@@ -241,6 +265,13 @@ async function walk(query: IntentRecordQuery, head: Head): Promise<IntentRecordR
|
|
|
241
265
|
const own = decisionWindow(hit.kind, view);
|
|
242
266
|
const shas = [...listed.keys()].filter((sha) => inWindow(own, sha));
|
|
243
267
|
const details = commitDetails(top, shas);
|
|
268
|
+
// Squash merges, followed to the pull request's original commits when asked (#3035).
|
|
269
|
+
const follows = query.followSquash ? followSquashes(top, [...details.values()], { fetchMissing: true }) : new Map<string, SquashFollow>();
|
|
270
|
+
for (const f of follows.values()) {
|
|
271
|
+
if (f.problem) reasons.push({ code: "squash-unfollowed", message: `${f.sha.slice(0, 8)} squashes pull request #${f.pullRequest}, and ${f.problem}, so its original commits are not followed` });
|
|
272
|
+
}
|
|
273
|
+
const originalDetails = commitDetails(top, [...new Set([...follows.values()].flatMap((f) => f.commits))]);
|
|
274
|
+
const originalsOf = (sha: string): IntentCommit[] => (follows.get(sha)?.commits ?? []).map((o) => originalDetails.get(o)).filter((x): x is IntentCommit => x !== undefined);
|
|
244
275
|
// Newest first by commit date, as git log lists them.
|
|
245
276
|
const order = (shas.length > 0 ? tryGit(top, ["rev-list", "--no-walk=sorted", "--stdin"], `${shas.join("\n")}\n`) : "")?.split("\n").map((s) => s.trim()).filter(Boolean) ?? shas;
|
|
246
277
|
shas.sort((a, b) => order.indexOf(a) - order.indexOf(b));
|
|
@@ -299,28 +330,62 @@ async function walk(query: IntentRecordQuery, head: Head): Promise<IntentRecordR
|
|
|
299
330
|
const failedPlugins = new Set<string>();
|
|
300
331
|
const constrainedContracts = constrains.filter((c) => c.granularity === "contract").map((c) => c.entry);
|
|
301
332
|
const commits: RecordCommit[] = [];
|
|
333
|
+
// chant's own trailers (#3149): the record named outright, or a work item that implements it.
|
|
334
|
+
const trailerJoins = readTrailerJoins(top, [...details.values(), ...originalDetails.values()]);
|
|
335
|
+
const recordKinds = new Map(kinds.filter((k) => k.records).map((k) => [k.records!.loaded.kind.name, k]));
|
|
336
|
+
const workKinds = kinds.filter((k) => k.records?.loaded.kind.work);
|
|
337
|
+
const runJoins = await runsForCommits(
|
|
338
|
+
top,
|
|
339
|
+
located.rootOnDisk,
|
|
340
|
+
[...new Set([...shas, ...originalDetails.keys()])].map((sha) => ({ sha, run: trailerJoins.get(sha)?.joins.run ?? null })),
|
|
341
|
+
);
|
|
342
|
+
addSquashRuns(runJoins.refs, follows);
|
|
343
|
+
const workImplements = (k: LoadedKind, id: string): boolean | undefined => {
|
|
344
|
+
const v = k.records!.views.find((x) => x.id === id);
|
|
345
|
+
return v ? idList(v.data, k.records!.loaded.kind.work!.implements).includes(view.id!) : undefined;
|
|
346
|
+
};
|
|
302
347
|
for (const sha of shas) {
|
|
303
348
|
const c = details.get(sha);
|
|
304
349
|
if (!c) continue;
|
|
305
350
|
let unit: string | null = null;
|
|
306
351
|
let isOwn = false;
|
|
352
|
+
const joins = trailerJoins.get(sha)!.joins;
|
|
353
|
+
const originals = originalsOf(sha);
|
|
354
|
+
// The commit's own trailers, and a followed squash's original commits' (#3035).
|
|
355
|
+
for (const j of [joins, ...originals.map((o) => trailerJoins.get(o.sha)!.joins)]) {
|
|
356
|
+
for (const r of j.records) {
|
|
357
|
+
const k = recordKinds.get(r.kind);
|
|
358
|
+
if (!k || !k.records!.views.some((v) => v.id === r.id)) continue;
|
|
359
|
+
r.node = `record:${r.kind}/${r.id}`;
|
|
360
|
+
if (k.records!.loaded.kind.work ? workImplements(k, r.id) : r.kind === kind.name && r.id === view.id) isOwn = true;
|
|
361
|
+
}
|
|
362
|
+
const item = j.lease?.item;
|
|
363
|
+
if (item) {
|
|
364
|
+
const holding = workKinds.filter((k) => k.records!.views.some((v) => v.id === item));
|
|
365
|
+
if (holding.length === 1 && workImplements(holding[0], item)) isOwn = true;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const subjects: IntentCommit[] = [c, ...originals];
|
|
307
369
|
for (const k of kinds) {
|
|
308
370
|
if (!k.joins) continue;
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
371
|
+
for (const subject of subjects) {
|
|
372
|
+
let result;
|
|
373
|
+
try {
|
|
374
|
+
result = await runCommitJoins(k.joins, subject, { read: readAt, list: listAt, at: located.at }, k.name);
|
|
375
|
+
} catch (err) {
|
|
376
|
+
const message = `${k.display}: commitJoins failed for ${subject.sha.slice(0, 8)}: ${err instanceof Error ? err.message : String(err)}`;
|
|
377
|
+
if (!failedPlugins.has(message)) reasons.push({ code: "intent-plugin-failed", message });
|
|
378
|
+
failedPlugins.add(message);
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
381
|
+
if (!result.unit) continue;
|
|
382
|
+
unit ??= result.unit.id;
|
|
383
|
+
const named = [...entityDecisions(result.unit), ...entityDecisions(result.contract)];
|
|
384
|
+
if (named.some((x) => x === view.id || x === `${kind.name}/${view.id}`)) isOwn = true;
|
|
385
|
+
if (result.contract && constrainedContracts.includes(result.contract.id)) isOwn = true;
|
|
317
386
|
}
|
|
318
|
-
if (!result.unit) continue;
|
|
319
|
-
unit ??= result.unit.id;
|
|
320
|
-
const named = [...entityDecisions(result.unit), ...entityDecisions(result.contract)];
|
|
321
|
-
if (named.some((x) => x === view.id || x === `${kind.name}/${view.id}`)) isOwn = true;
|
|
322
|
-
if (result.contract && constrainedContracts.includes(result.contract.id)) isOwn = true;
|
|
323
387
|
}
|
|
388
|
+
const f = follows.get(sha);
|
|
324
389
|
const changed = (files.get(sha) ?? []).map((f) => joinPath(workspacePrefix, f));
|
|
325
390
|
const covers = (paths: string[]) => paths.some((p) => changed.some((f) => constraintCovers(p, f)));
|
|
326
391
|
const workedBy = works.filter((w) => inWindow(w.window, sha) && (w.implementsRecord || covers(w.paths))).map((w) => w.ref);
|
|
@@ -334,6 +399,21 @@ async function walk(query: IntentRecordQuery, head: Head): Promise<IntentRecordR
|
|
|
334
399
|
trailers: c.trailers,
|
|
335
400
|
pullRequest: pr ? Number(pr[1]) : null,
|
|
336
401
|
unit,
|
|
402
|
+
joins,
|
|
403
|
+
runs: runJoins.refs.get(sha) ?? [],
|
|
404
|
+
...(f
|
|
405
|
+
? {
|
|
406
|
+
squash: {
|
|
407
|
+
pullRequest: f.pullRequest,
|
|
408
|
+
forge: f.forge,
|
|
409
|
+
ref: f.ref,
|
|
410
|
+
head: f.head,
|
|
411
|
+
fetched: f.fetched,
|
|
412
|
+
followed: f.followed,
|
|
413
|
+
commits: originals.map((o) => ({ sha: o.sha, subject: o.subject, author: o.author, date: o.date, trailers: o.trailers, joins: trailerJoins.get(o.sha)!.joins })),
|
|
414
|
+
},
|
|
415
|
+
}
|
|
416
|
+
: {}),
|
|
337
417
|
entries: listed.get(sha)!,
|
|
338
418
|
files: files.get(sha) ?? [],
|
|
339
419
|
bucket: isOwn ? "own" : workedBy.length > 0 ? "worked" : alsoWithin.length > 0 ? "within-other" : "unexplained",
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* From a commit back to the review that asked for it (#3154, E21 in
|
|
3
|
+
* arugula-salad/hud#823): a review session's comments[].follow_ups name a
|
|
4
|
+
* work item, a builder's commit carries that item with `Chant-Record:
|
|
5
|
+
* work:<id>`, and `graph --intent` lists the session on the work node.
|
|
6
|
+
*
|
|
7
|
+
* The workspace is a copy of the reference workspace, where W-001
|
|
8
|
+
* constrains design/screens/home.json, with one open review session added.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { cpSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { afterAll, describe, expect, test } from "vitest";
|
|
14
|
+
import { cleanScratch, contract, git, REPO, scratchDir } from "./__fixtures__/contract-repo";
|
|
15
|
+
import { intentGraph, type CommitNode, type WorkNode } from "./intent";
|
|
16
|
+
import intentSchema from "./intent.schema.json";
|
|
17
|
+
|
|
18
|
+
afterAll(cleanScratch);
|
|
19
|
+
|
|
20
|
+
const intent = contract(intentSchema);
|
|
21
|
+
|
|
22
|
+
const SESSION = `---
|
|
23
|
+
${JSON.stringify(
|
|
24
|
+
{
|
|
25
|
+
schema: 1,
|
|
26
|
+
id: "S-0002",
|
|
27
|
+
title: "Review of the home page",
|
|
28
|
+
state: "open",
|
|
29
|
+
agenda: [{ text: "The home page as built" }],
|
|
30
|
+
attendance: [{ principal: "alice", class: "person" }],
|
|
31
|
+
opened: "2026-10-03T10:00:00Z",
|
|
32
|
+
closed: null,
|
|
33
|
+
verdicts: [],
|
|
34
|
+
comments: [
|
|
35
|
+
{ text: "The header is cut off." },
|
|
36
|
+
{ text: "The hero image should follow the spec.", follow_ups: ["work:W-001"] },
|
|
37
|
+
{ text: "Same for the footer.", follow_ups: ["work:W-001", "work:W-404"] },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
null,
|
|
41
|
+
2,
|
|
42
|
+
)}
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
# Review of the home page
|
|
46
|
+
`;
|
|
47
|
+
|
|
48
|
+
function workspace(): string {
|
|
49
|
+
const root = scratchDir("chant-intent-reviews-");
|
|
50
|
+
cpSync(join(REPO, "reference-workspace"), root, { recursive: true, filter: (src) => !/[\\/](node_modules|dist)$/.test(src) });
|
|
51
|
+
writeFileSync(join(root, "design", "sessions", "S-0002-review-of-the-home-page.md"), SESSION);
|
|
52
|
+
const g = (...a: string[]) => git(root, ...a);
|
|
53
|
+
g("init", "-q");
|
|
54
|
+
g("add", "-A");
|
|
55
|
+
g("commit", "-q", "-m", "the workspace");
|
|
56
|
+
g("branch", "-M", "main");
|
|
57
|
+
writeFileSync(join(root, "design", "screens", "home.json"), `${JSON.stringify({ regions: ["header", "hero", "footer"] }, null, 2)}\n`);
|
|
58
|
+
g("add", "-A");
|
|
59
|
+
g("commit", "-q", "-m", "the hero follows the spec", "-m", "Chant-Record: work:W-001");
|
|
60
|
+
return root;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
describe("graph --intent joins a work item back to the review that asked for it (#3154, E21)", () => {
|
|
64
|
+
test("the work node lists the session and the comments whose follow_ups name it, and the builder's commit carries the item", async () => {
|
|
65
|
+
const root = workspace();
|
|
66
|
+
const head = git(root, "rev-parse", "HEAD");
|
|
67
|
+
const { doc } = await intentGraph({ cwd: root, region: "design/screens/home.json" });
|
|
68
|
+
intent.expectValid(doc);
|
|
69
|
+
if ("error" in doc) throw new Error(`${doc.error.code}: ${doc.error.message}`);
|
|
70
|
+
const w = doc.nodes.find((n) => n.id === "record:work/W-001") as WorkNode;
|
|
71
|
+
expect(w.reviews).toEqual([{ id: "record:session/S-0002", recordKind: "session", record: "S-0002", path: "design/sessions/S-0002-review-of-the-home-page.md", state: "open", comments: [2, 3] }]);
|
|
72
|
+
const c = doc.nodes.find((n) => n.id === `commit:${head}`) as CommitNode;
|
|
73
|
+
expect(c).toBeDefined();
|
|
74
|
+
expect(doc.edges).toContainEqual({ kind: "carries", from: c.id, to: w.id });
|
|
75
|
+
});
|
|
76
|
+
});
|