@tacuchi/agent-workflow-cli 25.7.0 → 25.9.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/CHANGELOG.md +110 -0
- package/README.md +5 -1
- package/dist/adapters/git-cli.js +311 -24
- package/dist/adapters/git-cli.js.map +1 -1
- package/dist/adapters/node-file-system.js +48 -0
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/amend-service.js +51 -14
- package/dist/application/amend-service.js.map +1 -1
- package/dist/application/branch-resolver.js +6 -3
- package/dist/application/branch-resolver.js.map +1 -1
- package/dist/application/capability/design-handler.js +124 -43
- package/dist/application/capability/design-handler.js.map +1 -1
- package/dist/application/capability/dispatcher.js +4 -1
- package/dist/application/capability/dispatcher.js.map +1 -1
- package/dist/application/capability/durable-effect.js +3 -0
- package/dist/application/capability/durable-effect.js.map +1 -1
- package/dist/application/capability/readiness.js +26 -10
- package/dist/application/capability/readiness.js.map +1 -1
- package/dist/application/capability/wrapper.js +10 -3
- package/dist/application/capability/wrapper.js.map +1 -1
- package/dist/application/check-branch-service.js +158 -19
- package/dist/application/check-branch-service.js.map +1 -1
- package/dist/application/checkpoint/markdown.js +2 -2
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint/state-reader.js +12 -0
- package/dist/application/checkpoint/state-reader.js.map +1 -1
- package/dist/application/checkpoint-service.js +12 -4
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +91 -17
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/claims-ledger.js +137 -11
- package/dist/application/claims-ledger.js.map +1 -1
- package/dist/application/claims-recovery.js +85 -44
- package/dist/application/claims-recovery.js.map +1 -1
- package/dist/application/database-tool-catalog.js +33 -0
- package/dist/application/database-tool-catalog.js.map +1 -1
- package/dist/application/design/consumer-document.js +2 -2
- package/dist/application/design/consumer-document.js.map +1 -1
- package/dist/application/design/design-content-gate-service.js +20 -2
- package/dist/application/design/design-content-gate-service.js.map +1 -1
- package/dist/application/design/design-gate-service.js +2 -0
- package/dist/application/design/design-gate-service.js.map +1 -1
- package/dist/application/design/design-index-service.js +4 -0
- package/dist/application/design/design-index-service.js.map +1 -1
- package/dist/application/design/design-publish-service.js +1 -4
- package/dist/application/design/design-publish-service.js.map +1 -1
- package/dist/application/design/design-record-service.js +13 -7
- package/dist/application/design/design-record-service.js.map +1 -1
- package/dist/application/design/design-resolver-service.js +22 -3
- package/dist/application/design/design-resolver-service.js.map +1 -1
- package/dist/application/design/design-simple-service.js +24 -5
- package/dist/application/design/design-simple-service.js.map +1 -1
- package/dist/application/design/digest.js +41 -0
- package/dist/application/design/digest.js.map +1 -0
- package/dist/application/dev-only-services.js +171 -27
- package/dist/application/dev-only-services.js.map +1 -1
- package/dist/application/doc-branch-ledger.js +145 -0
- package/dist/application/doc-branch-ledger.js.map +1 -0
- package/dist/application/docs-canon-service.js +1 -1
- package/dist/application/docs-canon-service.js.map +1 -1
- package/dist/application/doctor/dist-integrity.js +113 -0
- package/dist/application/doctor/dist-integrity.js.map +1 -0
- package/dist/application/doctor/hosts.js +5 -2
- package/dist/application/doctor/hosts.js.map +1 -1
- package/dist/application/doctor/prepare.js +4 -1
- package/dist/application/doctor/prepare.js.map +1 -1
- package/dist/application/doctor/provider-installation.js +39 -19
- package/dist/application/doctor/provider-installation.js.map +1 -1
- package/dist/application/doctor/provider-mcps.js +10 -2
- package/dist/application/doctor/provider-mcps.js.map +1 -1
- package/dist/application/doctor/provider-skills.js +25 -0
- package/dist/application/doctor/provider-skills.js.map +1 -1
- package/dist/application/doctor/provider-visibility.js +76 -3
- package/dist/application/doctor/provider-visibility.js.map +1 -1
- package/dist/application/doctor/provider-workspace-block.js +156 -0
- package/dist/application/doctor/provider-workspace-block.js.map +1 -0
- package/dist/application/doctor/repair-runner.js +47 -3
- package/dist/application/doctor/repair-runner.js.map +1 -1
- package/dist/application/doctor/report.js +24 -4
- package/dist/application/doctor/report.js.map +1 -1
- package/dist/application/doctor/skills-toml-migrate.js +76 -0
- package/dist/application/doctor/skills-toml-migrate.js.map +1 -0
- package/dist/application/export-catalog-check.js +200 -0
- package/dist/application/export-catalog-check.js.map +1 -0
- package/dist/application/export-service.js +716 -79
- package/dist/application/export-service.js.map +1 -1
- package/dist/application/fix-git-service.js +285 -64
- package/dist/application/fix-git-service.js.map +1 -1
- package/dist/application/flow/advance.js +241 -30
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/annul-service.js +3 -1
- package/dist/application/flow/annul-service.js.map +1 -1
- package/dist/application/flow/batch-commit.js +189 -0
- package/dist/application/flow/batch-commit.js.map +1 -0
- package/dist/application/flow/checkout-observation.js +110 -8
- package/dist/application/flow/checkout-observation.js.map +1 -1
- package/dist/application/flow/close-artifacts.js +105 -0
- package/dist/application/flow/close-artifacts.js.map +1 -0
- package/dist/application/flow/close-at-boundary.js +155 -0
- package/dist/application/flow/close-at-boundary.js.map +1 -0
- package/dist/application/flow/close-document-guidance.js +70 -0
- package/dist/application/flow/close-document-guidance.js.map +1 -0
- package/dist/application/flow/flow-service.js +49 -5
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +361 -80
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/internal-drive.js +47 -19
- package/dist/application/flow/internal-drive.js.map +1 -1
- package/dist/application/flow/plan-entry.js +82 -0
- package/dist/application/flow/plan-entry.js.map +1 -0
- package/dist/application/flow/prove.js +32 -1
- package/dist/application/flow/prove.js.map +1 -1
- package/dist/application/flow/quick-checkouts.js +48 -0
- package/dist/application/flow/quick-checkouts.js.map +1 -0
- package/dist/application/flow/reinfer-batch.js +177 -0
- package/dist/application/flow/reinfer-batch.js.map +1 -0
- package/dist/application/flow/reopen-run.js +159 -0
- package/dist/application/flow/reopen-run.js.map +1 -0
- package/dist/application/flow/run-journey.js +11 -8
- package/dist/application/flow/run-journey.js.map +1 -1
- package/dist/application/flow/run-projection.js +16 -5
- package/dist/application/flow/run-projection.js.map +1 -1
- package/dist/application/flow/run-state-service.js +3 -1
- package/dist/application/flow/run-state-service.js.map +1 -1
- package/dist/application/flow/submit.js +731 -154
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/generate-launch-service.js +16 -6
- package/dist/application/generate-launch-service.js.map +1 -1
- package/dist/application/git-flow-service.js +34 -3
- package/dist/application/git-flow-service.js.map +1 -1
- package/dist/application/history-publications.js +24 -0
- package/dist/application/history-publications.js.map +1 -1
- package/dist/application/history-reconcile-service.js +45 -0
- package/dist/application/history-reconcile-service.js.map +1 -0
- package/dist/application/history-table.js +61 -12
- package/dist/application/history-table.js.map +1 -1
- package/dist/application/history-update-service.js +25 -4
- package/dist/application/history-update-service.js.map +1 -1
- package/dist/application/hook-branch-check.js +25 -3
- package/dist/application/hook-branch-check.js.map +1 -1
- package/dist/application/hook-git-commit-advisor.js +3 -4
- package/dist/application/hook-git-commit-advisor.js.map +1 -1
- package/dist/application/hook-sql-mutation-guard.js +147 -12
- package/dist/application/hook-sql-mutation-guard.js.map +1 -1
- package/dist/application/hook-turn-start.js +51 -0
- package/dist/application/hook-turn-start.js.map +1 -0
- package/dist/application/host-memory/codex.js +1 -1
- package/dist/application/host-memory/codex.js.map +1 -1
- package/dist/application/hub-registry.js +135 -0
- package/dist/application/hub-registry.js.map +1 -0
- package/dist/application/local-proposal.js +72 -19
- package/dist/application/local-proposal.js.map +1 -1
- package/dist/application/mcp-host-reader.js +1 -1
- package/dist/application/mcp-host-reader.js.map +1 -1
- package/dist/application/mcp-host-writer.js +16 -10
- package/dist/application/mcp-host-writer.js.map +1 -1
- package/dist/application/merge-state-service.js +150 -34
- package/dist/application/merge-state-service.js.map +1 -1
- package/dist/application/multiroot/claude.js +17 -10
- package/dist/application/multiroot/claude.js.map +1 -1
- package/dist/application/multiroot/codex.js +17 -11
- package/dist/application/multiroot/codex.js.map +1 -1
- package/dist/application/multiroot-service.js +52 -28
- package/dist/application/multiroot-service.js.map +1 -1
- package/dist/application/parsers/execution-batches.js +64 -0
- package/dist/application/parsers/execution-batches.js.map +1 -0
- package/dist/application/parsers/phases.js +23 -2
- package/dist/application/parsers/phases.js.map +1 -1
- package/dist/application/parsers/project-block.js +146 -17
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/parsers/tasks.js +16 -2
- package/dist/application/parsers/tasks.js.map +1 -1
- package/dist/application/parsers/toml.js +19 -0
- package/dist/application/parsers/toml.js.map +1 -0
- package/dist/application/paths-service.js +13 -16
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/persist-service.js +118 -5
- package/dist/application/persist-service.js.map +1 -1
- package/dist/application/plan-exec-batch-service.js +162 -22
- package/dist/application/plan-exec-batch-service.js.map +1 -1
- package/dist/application/plan-exec-decision-service.js +61 -12
- package/dist/application/plan-exec-decision-service.js.map +1 -1
- package/dist/application/plan-exec-plan-diff.js +105 -0
- package/dist/application/plan-exec-plan-diff.js.map +1 -0
- package/dist/application/plan-lint-service.js +2 -0
- package/dist/application/plan-lint-service.js.map +1 -1
- package/dist/application/plan-passes.js +41 -0
- package/dist/application/plan-passes.js.map +1 -0
- package/dist/application/preparation-receipts.js +58 -0
- package/dist/application/preparation-receipts.js.map +1 -0
- package/dist/application/project-md-upsert-service.js +191 -52
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/project-tab-data.js +40 -10
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/release-data/artifacts.js +15 -7
- package/dist/application/release-data/artifacts.js.map +1 -1
- package/dist/application/release-data/bundles.js +52 -6
- package/dist/application/release-data/bundles.js.map +1 -1
- package/dist/application/release-data/common.js +2 -2
- package/dist/application/release-data/common.js.map +1 -1
- package/dist/application/release-data/rollback.js +7 -0
- package/dist/application/release-data/rollback.js.map +1 -0
- package/dist/application/release-data/sessions.js +2 -2
- package/dist/application/release-data/sessions.js.map +1 -1
- package/dist/application/release-pass-ledger.js +1 -1
- package/dist/application/render/history-row.js +2 -0
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/render/project-block.js +28 -11
- package/dist/application/render/project-block.js.map +1 -1
- package/dist/application/reseal-service.js +1 -0
- package/dist/application/reseal-service.js.map +1 -1
- package/dist/application/resume-service.js +55 -8
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/retirement/apply.js +25 -7
- package/dist/application/retirement/apply.js.map +1 -1
- package/dist/application/retirement/attribution.js +121 -48
- package/dist/application/retirement/attribution.js.map +1 -1
- package/dist/application/retirement/prepare.js +17 -11
- package/dist/application/retirement/prepare.js.map +1 -1
- package/dist/application/retirement/preview.js +2 -1
- package/dist/application/retirement/preview.js.map +1 -1
- package/dist/application/self/codex-plugin.js +1 -1
- package/dist/application/self/codex-plugin.js.map +1 -1
- package/dist/application/self/host-states.js +3 -3
- package/dist/application/self/host-states.js.map +1 -1
- package/dist/application/self/install-hooks.js +1 -1
- package/dist/application/self/install-hooks.js.map +1 -1
- package/dist/application/self/install-skill.js +35 -11
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/install-targets.js +73 -2
- package/dist/application/self/install-targets.js.map +1 -1
- package/dist/application/self/mcp-config.js +19 -11
- package/dist/application/self/mcp-config.js.map +1 -1
- package/dist/application/self/opencode-plugin.js +1 -0
- package/dist/application/self/opencode-plugin.js.map +1 -1
- package/dist/application/self/uninstall.js +22 -8
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +66 -5
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/session-archive-service.js +113 -0
- package/dist/application/session-archive-service.js.map +1 -0
- package/dist/application/session-binding-service.js +35 -0
- package/dist/application/session-binding-service.js.map +1 -1
- package/dist/application/session-close-service.js +390 -54
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-create-service.js +97 -5
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-custody-recorder.js +15 -12
- package/dist/application/session-custody-recorder.js.map +1 -1
- package/dist/application/session-custody-service.js +1 -0
- package/dist/application/session-custody-service.js.map +1 -1
- package/dist/application/session-narrative.js +51 -12
- package/dist/application/session-narrative.js.map +1 -1
- package/dist/application/session-pause-service.js +46 -0
- package/dist/application/session-pause-service.js.map +1 -0
- package/dist/application/session-resolver.js +36 -11
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/session-resume-service.js +190 -20
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/sessions-service.js +4 -0
- package/dist/application/sessions-service.js.map +1 -1
- package/dist/application/sessions-sweep-service.js +77 -0
- package/dist/application/sessions-sweep-service.js.map +1 -0
- package/dist/application/settle-service.js +3 -1
- package/dist/application/settle-service.js.map +1 -1
- package/dist/application/skills-resolver-service.js +1 -1
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/source-add-service.js +37 -0
- package/dist/application/source-add-service.js.map +1 -0
- package/dist/application/source-boundary-policy.js +97 -8
- package/dist/application/source-boundary-policy.js.map +1 -1
- package/dist/application/source-pipeline.js +68 -0
- package/dist/application/source-pipeline.js.map +1 -0
- package/dist/application/source-remove-service.js +15 -3
- package/dist/application/source-remove-service.js.map +1 -1
- package/dist/application/sources-service.js +71 -16
- package/dist/application/sources-service.js.map +1 -1
- package/dist/application/status-service.js +55 -5
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/unit-dependencies.js +100 -0
- package/dist/application/unit-dependencies.js.map +1 -0
- package/dist/application/unit-membership.js +37 -0
- package/dist/application/unit-membership.js.map +1 -0
- package/dist/application/unit-residue.js +72 -0
- package/dist/application/unit-residue.js.map +1 -0
- package/dist/application/visibility-doctor-service.js +66 -4
- package/dist/application/visibility-doctor-service.js.map +1 -1
- package/dist/application/working-branch-service.js +6 -0
- package/dist/application/working-branch-service.js.map +1 -1
- package/dist/application/workline-graph.js +1 -1
- package/dist/application/workline-graph.js.map +1 -1
- package/dist/application/workline-index-service.js +118 -17
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-commit-service.js +218 -0
- package/dist/application/workspace-commit-service.js.map +1 -0
- package/dist/application/workspace-init-service.js +64 -34
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/application/workspace-local-config.js +90 -0
- package/dist/application/workspace-local-config.js.map +1 -0
- package/dist/application/workspace-materialization-service.js +52 -3
- package/dist/application/workspace-materialization-service.js.map +1 -1
- package/dist/application/workspace-migrate/apply.js +525 -4
- package/dist/application/workspace-migrate/apply.js.map +1 -1
- package/dist/application/workspace-migrate/markers.js +9 -6
- package/dist/application/workspace-migrate/markers.js.map +1 -1
- package/dist/application/workspace-migrate/plan.js +97 -5
- package/dist/application/workspace-migrate/plan.js.map +1 -1
- package/dist/application/workspace-move-service.js +270 -0
- package/dist/application/workspace-move-service.js.map +1 -0
- package/dist/application/workspace-untrack-service.js +28 -0
- package/dist/application/workspace-untrack-service.js.map +1 -0
- package/dist/application/worktree-service.js +654 -105
- package/dist/application/worktree-service.js.map +1 -1
- package/dist/cli/ascii.js +86 -0
- package/dist/cli/ascii.js.map +1 -0
- package/dist/cli/commands/add-source.js +38 -0
- package/dist/cli/commands/add-source.js.map +1 -0
- package/dist/cli/commands/amend.js +14 -2
- package/dist/cli/commands/amend.js.map +1 -1
- package/dist/cli/commands/capability.js +26 -0
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/check-branch.js +1 -0
- package/dist/cli/commands/check-branch.js.map +1 -1
- package/dist/cli/commands/checkpoint-read.js +1 -0
- package/dist/cli/commands/checkpoint-read.js.map +1 -1
- package/dist/cli/commands/checkpoint-write.js +4 -1
- package/dist/cli/commands/checkpoint-write.js.map +1 -1
- package/dist/cli/commands/claims.js +1 -0
- package/dist/cli/commands/claims.js.map +1 -1
- package/dist/cli/commands/code-scan.js +1 -0
- package/dist/cli/commands/code-scan.js.map +1 -1
- package/dist/cli/commands/context-budget.js +1 -0
- package/dist/cli/commands/context-budget.js.map +1 -1
- package/dist/cli/commands/context-plan.js +1 -0
- package/dist/cli/commands/context-plan.js.map +1 -1
- package/dist/cli/commands/cut-intent.js +1 -0
- package/dist/cli/commands/cut-intent.js.map +1 -1
- package/dist/cli/commands/designs.js +15 -5
- package/dist/cli/commands/designs.js.map +1 -1
- package/dist/cli/commands/dev-only.js +22 -5
- package/dist/cli/commands/dev-only.js.map +1 -1
- package/dist/cli/commands/doc-branch.js +184 -0
- package/dist/cli/commands/doc-branch.js.map +1 -0
- package/dist/cli/commands/doctor.js +9 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export.js +89 -16
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/fix-git.js +89 -13
- package/dist/cli/commands/fix-git.js.map +1 -1
- package/dist/cli/commands/flow.js +129 -13
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/generate-launch.js +15 -2
- package/dist/cli/commands/generate-launch.js.map +1 -1
- package/dist/cli/commands/git-flow.js +1 -0
- package/dist/cli/commands/git-flow.js.map +1 -1
- package/dist/cli/commands/history-update.js +7 -9
- package/dist/cli/commands/history-update.js.map +1 -1
- package/dist/cli/commands/history.js +14 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/hook.js +26 -5
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/host-doctor.js +1 -0
- package/dist/cli/commands/host-doctor.js.map +1 -1
- package/dist/cli/commands/host-memory.js +2 -9
- package/dist/cli/commands/host-memory.js.map +1 -1
- package/dist/cli/commands/index.js +18 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +30 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/merge-state.js +3 -2
- package/dist/cli/commands/merge-state.js.map +1 -1
- package/dist/cli/commands/multiroot.js +16 -0
- package/dist/cli/commands/multiroot.js.map +1 -1
- package/dist/cli/commands/persist.js +7 -5
- package/dist/cli/commands/persist.js.map +1 -1
- package/dist/cli/commands/plan.js +1 -0
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/plugin-cache.js +4 -0
- package/dist/cli/commands/plugin-cache.js.map +1 -1
- package/dist/cli/commands/plugin-doctor.js +3 -0
- package/dist/cli/commands/plugin-doctor.js.map +1 -1
- package/dist/cli/commands/project-md-upsert.js +8 -3
- package/dist/cli/commands/project-md-upsert.js.map +1 -1
- package/dist/cli/commands/release-data.js +12 -0
- package/dist/cli/commands/release-data.js.map +1 -1
- package/dist/cli/commands/release-pass.js +13 -3
- package/dist/cli/commands/release-pass.js.map +1 -1
- package/dist/cli/commands/remove-source.js +1 -0
- package/dist/cli/commands/remove-source.js.map +1 -1
- package/dist/cli/commands/reseal.js +1 -0
- package/dist/cli/commands/reseal.js.map +1 -1
- package/dist/cli/commands/resume-summary.js +5 -0
- package/dist/cli/commands/resume-summary.js.map +1 -1
- package/dist/cli/commands/resume.js +13 -3
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/retirement.js +1 -0
- package/dist/cli/commands/retirement.js.map +1 -1
- package/dist/cli/commands/self.js +39 -1
- package/dist/cli/commands/self.js.map +1 -1
- package/dist/cli/commands/session-artifacts.js +1 -0
- package/dist/cli/commands/session-artifacts.js.map +1 -1
- package/dist/cli/commands/session-close.js +185 -31
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/commands/session-create.js +4 -1
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/session-pause.js +14 -0
- package/dist/cli/commands/session-pause.js.map +1 -0
- package/dist/cli/commands/session-resume.js +1 -0
- package/dist/cli/commands/session-resume.js.map +1 -1
- package/dist/cli/commands/sessions.js +16 -2
- package/dist/cli/commands/sessions.js.map +1 -1
- package/dist/cli/commands/set-branch.js +29 -4
- package/dist/cli/commands/set-branch.js.map +1 -1
- package/dist/cli/commands/set-edit-mode.js +20 -0
- package/dist/cli/commands/set-edit-mode.js.map +1 -0
- package/dist/cli/commands/set-pipeline.js +35 -0
- package/dist/cli/commands/set-pipeline.js.map +1 -0
- package/dist/cli/commands/settle.js +1 -0
- package/dist/cli/commands/settle.js.map +1 -1
- package/dist/cli/commands/skill-index.js +1 -0
- package/dist/cli/commands/skill-index.js.map +1 -1
- package/dist/cli/commands/skills.js +1 -0
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sources.js +5 -0
- package/dist/cli/commands/sources.js.map +1 -1
- package/dist/cli/commands/stack.js +1 -0
- package/dist/cli/commands/stack.js.map +1 -1
- package/dist/cli/commands/status.js +36 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tool.js +5 -21
- package/dist/cli/commands/tool.js.map +1 -1
- package/dist/cli/commands/unknown-flags.js +68 -16
- package/dist/cli/commands/unknown-flags.js.map +1 -1
- package/dist/cli/commands/visibility.js +2 -0
- package/dist/cli/commands/visibility.js.map +1 -1
- package/dist/cli/commands/workspace-commit.js +62 -0
- package/dist/cli/commands/workspace-commit.js.map +1 -0
- package/dist/cli/commands/workspace-init.js +51 -2
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/cli/commands/workspace-migrate.js +31 -14
- package/dist/cli/commands/workspace-migrate.js.map +1 -1
- package/dist/cli/commands/workspace-move.js +42 -0
- package/dist/cli/commands/workspace-move.js.map +1 -0
- package/dist/cli/commands/worktree.js +5 -4
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/context-id.js +6 -0
- package/dist/cli/context-id.js.map +1 -1
- package/dist/cli/full-cli.js +555 -0
- package/dist/cli/full-cli.js.map +1 -0
- package/dist/cli/help-groups.js +108 -14
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/hook-stdin-cache.js +12 -0
- package/dist/cli/hook-stdin-cache.js.map +1 -0
- package/dist/cli/main.js +47 -471
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output-mode.js +11 -2
- package/dist/cli/output-mode.js.map +1 -1
- package/dist/cli/parser.js +18 -5
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/render.js +30 -1
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/tui/app.js +1 -1
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/workspace-init-form.js +4 -1
- package/dist/cli/tui/components/workspace-init-form.js.map +1 -1
- package/dist/cli/tui/data/recommended-skills.js +2 -2
- package/dist/cli/tui/data/recommended-skills.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +6 -1
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab.js +4 -3
- package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +7 -2
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/dist-manifest.json +4117 -0
- package/dist/domain/capability/protocol.js.map +1 -1
- package/dist/domain/decision-note.js +13 -0
- package/dist/domain/decision-note.js.map +1 -1
- package/dist/domain/design/artifact.js +22 -3
- package/dist/domain/design/artifact.js.map +1 -1
- package/dist/domain/design/capability.js +1 -0
- package/dist/domain/design/capability.js.map +1 -1
- package/dist/domain/design/expansion.js +1 -1
- package/dist/domain/design/expansion.js.map +1 -1
- package/dist/domain/design/maturity.js +16 -0
- package/dist/domain/design/maturity.js.map +1 -1
- package/dist/domain/design/reference.js +5 -0
- package/dist/domain/design/reference.js.map +1 -1
- package/dist/domain/doctor/operations.js +28 -2
- package/dist/domain/doctor/operations.js.map +1 -1
- package/dist/domain/effective-contract.js +3 -1
- package/dist/domain/effective-contract.js.map +1 -1
- package/dist/domain/elicitation.js +1 -1
- package/dist/domain/flow/answer.js +273 -130
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +330 -44
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/batch-review.js +65 -0
- package/dist/domain/flow/batch-review.js.map +1 -0
- package/dist/domain/flow/decision-schema.js +47 -0
- package/dist/domain/flow/decision-schema.js.map +1 -0
- package/dist/domain/flow/directive.js +16 -0
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/execution-result.js +169 -9
- package/dist/domain/flow/execution-result.js.map +1 -1
- package/dist/domain/flow/route.js.map +1 -1
- package/dist/domain/flow/rules.js +5 -6
- package/dist/domain/flow/rules.js.map +1 -1
- package/dist/domain/flow/run-state.js +531 -47
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/flow/test-run-evidence.js +285 -0
- package/dist/domain/flow/test-run-evidence.js.map +1 -0
- package/dist/domain/flow/unchanged-phase.js +15 -0
- package/dist/domain/flow/unchanged-phase.js.map +1 -0
- package/dist/domain/harnesses.js +22 -6
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/isolation-unit.js +2 -2
- package/dist/domain/isolation-unit.js.map +1 -1
- package/dist/domain/lineage.js +7 -2
- package/dist/domain/lineage.js.map +1 -1
- package/dist/domain/obligation-correspondence.js +4 -2
- package/dist/domain/obligation-correspondence.js.map +1 -1
- package/dist/domain/plan-handoff.js +5 -0
- package/dist/domain/plan-handoff.js.map +1 -0
- package/dist/domain/proposal.js +18 -7
- package/dist/domain/proposal.js.map +1 -1
- package/dist/domain/reservation.js +5 -3
- package/dist/domain/reservation.js.map +1 -1
- package/dist/domain/retirement/proposal.js +1 -0
- package/dist/domain/retirement/proposal.js.map +1 -1
- package/dist/domain/session/custody.js +10 -6
- package/dist/domain/session/custody.js.map +1 -1
- package/dist/domain/session/narrative.js +4 -1
- package/dist/domain/session/narrative.js.map +1 -1
- package/dist/domain/skills.js +2 -0
- package/dist/domain/skills.js.map +1 -1
- package/dist/domain/sql-lexer.js +15 -2
- package/dist/domain/sql-lexer.js.map +1 -1
- package/dist/runtime/namespace-resolver.js +4 -0
- package/dist/runtime/namespace-resolver.js.map +1 -1
- package/dist/runtime/workline-marker.js +35 -8
- package/dist/runtime/workline-marker.js.map +1 -1
- package/dist/runtime/workspace-resolution.js +123 -0
- package/dist/runtime/workspace-resolution.js.map +1 -0
- package/package.json +5 -4
- package/skills/w/SKILL.md +3 -1
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +1 -1
- package/skills/w/artifacts/artifacts-core/SCRIPTS.rollback.sql +8 -0
- package/skills/w/artifacts/artifacts-core/SCRIPTS.sql +4 -8
- package/skills/w/commands/export-diagrams.md +3 -3
- package/skills/w/commands/export-manuals.md +6 -6
- package/skills/w/commands/export-reports.md +3 -3
- package/skills/w/commands/export-scripts.md +5 -5
- package/skills/w/commands/fix-git.md +12 -13
- package/skills/w/commands/persist.md +2 -2
- package/skills/w/commands/plan-exec.md +4 -2
- package/skills/w/commands/spec-new.md +1 -1
- package/skills/w/commands/workspace-init.md +2 -0
- package/skills/w/context/MANIFEST.json +1 -1
- package/skills/w/exports/export-diagrams/EXPORT.md +3 -3
- package/skills/w/exports/export-manuals/EXPORT.md +14 -16
- package/skills/w/exports/export-reports/EXPORT.md +3 -3
- package/skills/w/exports/export-scripts/EXPORT.md +45 -21
- package/skills/w/harness/HARNESS.md +5 -3
- package/skills/w/hooks/hooks.template.json +6 -4
- package/skills/w/loops/CHASSIS.md +12 -6
- package/skills/w/loops/CODE-POLICIES.md +7 -4
- package/skills/w/loops/plan-exec-loop/LOOP.md +23 -22
- package/skills/w/loops/plan-new-loop/LOOP.md +23 -31
- package/skills/w/loops/plan-refine-loop/LOOP.md +8 -2
- package/skills/w/loops/quick-loop/LOOP.md +6 -5
- package/skills/w/modules/DESIGN-REFERENCES.md +9 -11
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +4 -4
- package/skills/w/modules/SESSION-NUMBERING.md +2 -0
- package/skills/w/roles/design/CONTRACT.md +16 -7
- package/skills/w/roles/design/ROLE.md +4 -2
- package/skills/w/roles/git/ROLE.md +16 -9
- package/skills/w/roles/research/ROLE.md +1 -1
- package/skills/w/roles/sql/ROLE.md +16 -14
- package/skills/w/schemas/design/ui-screen.v1.schema.json +9 -0
|
@@ -15,12 +15,36 @@
|
|
|
15
15
|
* directive with `ok: true` — with `ok: false` the host never calls `renderHuman`
|
|
16
16
|
* and the person would never see the boundary they have to answer over.
|
|
17
17
|
*/
|
|
18
|
+
import { resolve } from "node:path";
|
|
18
19
|
import { parseSemanticArtifacts } from "../../application/semantic-operation/protocol.js";
|
|
19
20
|
import { COMPLETENESS_VALUES } from "../capability/descriptor.js";
|
|
20
|
-
import { isEffectClass } from "../capability/effects.js";
|
|
21
|
+
import { EFFECT_CLASSES, isEffectClass } from "../capability/effects.js";
|
|
21
22
|
import { CAPABILITY_OUTCOMES, } from "../capability/protocol.js";
|
|
22
|
-
import { proposalContractOf, } from "./authority.js";
|
|
23
|
+
import { effectsOf, proposalContractOf, } from "./authority.js";
|
|
24
|
+
import { BATCH_REVIEW_CONTRACT, isBatchReview } from "./batch-review.js";
|
|
23
25
|
import { STOP_LABEL, isFlowControl } from "./directive.js";
|
|
26
|
+
/** Preserve the first code/message while publishing every independent defect. */
|
|
27
|
+
function collected(entries) {
|
|
28
|
+
const first = entries[0];
|
|
29
|
+
if (first === undefined)
|
|
30
|
+
throw new Error("no hay violaciones para entregar");
|
|
31
|
+
return {
|
|
32
|
+
...first.failure,
|
|
33
|
+
violations: entries.map((entry) => entry.violation),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function violation(failure, field, expected, received) {
|
|
37
|
+
return {
|
|
38
|
+
failure,
|
|
39
|
+
violation: {
|
|
40
|
+
code: failure.code,
|
|
41
|
+
field,
|
|
42
|
+
expected,
|
|
43
|
+
received: Array.isArray(received) ? "lista" : received === null ? "null" : typeof received,
|
|
44
|
+
message: failure.message,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
24
48
|
/**
|
|
25
49
|
* Which rejections COUNT as an attempt at the boundary, and which never reached
|
|
26
50
|
* it.
|
|
@@ -44,14 +68,11 @@ import { STOP_LABEL, isFlowControl } from "./directive.js";
|
|
|
44
68
|
* raises). At an execution boundary the decision IS the result and at an
|
|
45
69
|
* authoring one it IS the bytes: with neither there, there is nothing to judge,
|
|
46
70
|
* and charging for it charges for the envelope.
|
|
47
|
-
* - `evaluated` — the decision arrived and did not resolve the gap.
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* proposal reaching past what its row declares — and an answer that declares
|
|
53
|
-
* nothing at all, which is the feigned convergence the chassis degrades and
|
|
54
|
-
* exactly what the cap is for.
|
|
71
|
+
* - `evaluated` — the decision arrived and did not resolve the gap. An execution
|
|
72
|
+
* that did not complete or left its effect half-applied, a scope naming sources
|
|
73
|
+
* the workspace or the plan does not, a proposal reaching past what its row
|
|
74
|
+
* declares, or an answer that declares nothing at all. Unknown literals,
|
|
75
|
+
* malformed proofs, copied digests and invocations are envelope errors.
|
|
55
76
|
* - `control` — a real answer that deliberately applies nothing, or the same
|
|
56
77
|
* answer arriving twice. Pausing to compact, stopping the run, and a resend are
|
|
57
78
|
* all decisions somebody made on purpose; charging them would make the flow
|
|
@@ -75,6 +96,7 @@ export const FLOW_ANSWER_REJECTIONS = {
|
|
|
75
96
|
FLOW_ANSWER_MISSING: "envelope",
|
|
76
97
|
FLOW_ANSWER_INVALID: "envelope",
|
|
77
98
|
FLOW_ANSWER_STALE: "envelope",
|
|
99
|
+
WORKSPACE_MISMATCH: "envelope",
|
|
78
100
|
FLOW_ANSWER_NOT_EXPECTED: "envelope",
|
|
79
101
|
FLOW_RESULT_INVALID: "envelope",
|
|
80
102
|
FLOW_ARTIFACTS_MISSING: "envelope",
|
|
@@ -91,71 +113,135 @@ export const FLOW_ANSWER_REJECTIONS = {
|
|
|
91
113
|
// about is no longer the one this build emits. Nothing about the ANSWER was
|
|
92
114
|
// weighed, and the next `advance` re-binds the action by itself.
|
|
93
115
|
FLOW_ACTION_CHANGED: "envelope",
|
|
116
|
+
// A result sent for a step the CLI runs itself. Nothing about it can be weighed
|
|
117
|
+
// — the only credit is the driver's own run — and the way out is to run the
|
|
118
|
+
// action, so charging the envelope would punish choosing the wrong verb.
|
|
119
|
+
FLOW_INTERNAL_ACTION_EXTERNAL_RESULT: "envelope",
|
|
94
120
|
FLOW_ANSWER_AMBIGUOUS: "evaluated",
|
|
95
|
-
FLOW_SIGNAL_UNKNOWN: "
|
|
96
|
-
FLOW_CHOICE_UNKNOWN: "
|
|
97
|
-
FLOW_APPROVAL_MISSING: "
|
|
98
|
-
FLOW_APPROVAL_MISMATCH: "
|
|
99
|
-
|
|
121
|
+
FLOW_SIGNAL_UNKNOWN: "envelope",
|
|
122
|
+
FLOW_CHOICE_UNKNOWN: "envelope",
|
|
123
|
+
FLOW_APPROVAL_MISSING: "envelope",
|
|
124
|
+
FLOW_APPROVAL_MISMATCH: "envelope",
|
|
125
|
+
WORKSPACE_COMMIT_UNAVAILABLE: "envelope",
|
|
126
|
+
WORKSPACE_COMMIT_APPROVAL_INVALID: "envelope",
|
|
127
|
+
FLOW_ACTION_MISMATCH: "envelope",
|
|
100
128
|
// The execution verdict's own vocabulary: it judges a result that WAS read.
|
|
101
129
|
FLOW_EXECUTION_NOT_COMPLETED: "evaluated",
|
|
102
130
|
FLOW_EVIDENCE_MISSING: "evaluated",
|
|
103
|
-
WORKLINE_CHECKOUT_PROOF_MISSING: "
|
|
131
|
+
WORKLINE_CHECKOUT_PROOF_MISSING: "envelope",
|
|
104
132
|
WORKLINE_CHECKOUT_PROOF_INVALID: "evaluated",
|
|
105
|
-
|
|
133
|
+
WORKLINE_CHECKOUT_PROOF_SHAPE_INVALID: "envelope",
|
|
134
|
+
WORKLINE_CHECKOUT_PROOF_ROOT_MISMATCH: "envelope",
|
|
135
|
+
WORKLINE_CHECKOUT_UNOBSERVABLE: "envelope",
|
|
136
|
+
WORKLINE_CHECKOUT_PROOF_STALE: "envelope",
|
|
106
137
|
FLOW_EFFECT_PARTIAL: "evaluated",
|
|
107
|
-
// The
|
|
108
|
-
//
|
|
109
|
-
|
|
138
|
+
// The phase validation's own: the proofs were read and they are not this
|
|
139
|
+
// batch's — nothing changed since its base, or they already credited another.
|
|
140
|
+
PLAN_EXEC_BATCH_UNCHANGED: "evaluated",
|
|
141
|
+
PLAN_EXEC_BATCH_STALE: "control",
|
|
142
|
+
PLAN_VALIDATION_ONLY_NOT_APPROVED: "evaluated",
|
|
143
|
+
PLAN_EXEC_PROOF_REUSED: "evaluated",
|
|
144
|
+
PLAN_EXEC_BATCH_REVIEW_INVALID: "evaluated",
|
|
145
|
+
PLAN_EXEC_BATCH_COMMIT_UNOBSERVABLE: "envelope",
|
|
146
|
+
PLAN_EXEC_BATCH_COMMIT_MESSAGE_INVALID: "evaluated",
|
|
147
|
+
PLAN_EXEC_BATCH_PATHS_REQUIRED: "evaluated",
|
|
148
|
+
PLAN_EXEC_BATCH_SHARED_PATH: "evaluated",
|
|
149
|
+
PLAN_EXEC_BATCH_PATH_NOT_OWNED: "evaluated",
|
|
150
|
+
PLAN_ISOLATION_INVALID: "envelope",
|
|
151
|
+
PLAN_TEST_RUN_NOT_EXECUTED: "evaluated",
|
|
152
|
+
PLAN_FINAL_PIPELINE_MISSING: "evaluated",
|
|
153
|
+
PLAN_PREEXISTING_FAILURES_INVALID: "evaluated",
|
|
154
|
+
PLAN_TEST_FAILURES_UNREADABLE: "evaluated",
|
|
155
|
+
PLAN_TEST_FAILURE_NEW: "evaluated",
|
|
156
|
+
// The scope boundary distinguishes malformed fields and unavailable documents
|
|
157
|
+
// from a proposed source set that the workspace or plan cannot accept.
|
|
110
158
|
FLOW_SCOPE_INVALID: "evaluated",
|
|
159
|
+
FLOW_SCOPE_SHAPE_INVALID: "envelope",
|
|
111
160
|
FLOW_SCOPE_UNKNOWN_SOURCE: "evaluated",
|
|
112
161
|
FLOW_SCOPE_NOT_IN_PLAN: "evaluated",
|
|
113
|
-
FLOW_SCOPE_PLAN_UNREADABLE: "
|
|
162
|
+
FLOW_SCOPE_PLAN_UNREADABLE: "envelope",
|
|
114
163
|
// The submitted scope named a plan and the CLI read it, but its location
|
|
115
164
|
// violates the canonical documentation boundary.
|
|
116
|
-
FLOW_SCOPE_PLAN_OUTSIDE_CANON: "
|
|
117
|
-
FLOW_HANDOFF_PLAN_MISSING: "
|
|
118
|
-
// El preview
|
|
119
|
-
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// and the workspace facts needed to act on it.
|
|
126
|
-
FLOW_DECISION_SCOPE_MISSING: "evaluated",
|
|
127
|
-
FLOW_DECISION_INPUT_INVALID: "evaluated",
|
|
128
|
-
FLOW_DECISION_PLAN_UNREADABLE: "evaluated",
|
|
165
|
+
FLOW_SCOPE_PLAN_OUTSIDE_CANON: "envelope",
|
|
166
|
+
FLOW_HANDOFF_PLAN_MISSING: "envelope",
|
|
167
|
+
// El preview sin archivos, intención o forma del diff sigue incompleto.
|
|
168
|
+
FLOW_PREVIEW_INVALID: "envelope",
|
|
169
|
+
// The choice itself can be refused (evaluated); missing shape or an unreadable
|
|
170
|
+
// live baseline cannot be charged to its author.
|
|
171
|
+
FLOW_DECISION_SCOPE_MISSING: "envelope",
|
|
172
|
+
FLOW_DECISION_INPUT_INVALID: "envelope",
|
|
173
|
+
FLOW_DECISION_PLAN_UNREADABLE: "envelope",
|
|
129
174
|
FLOW_DECISION_LINEAGE_INVALID: "evaluated",
|
|
130
|
-
FLOW_DECISION_SPEC_UNREADABLE: "
|
|
175
|
+
FLOW_DECISION_SPEC_UNREADABLE: "envelope",
|
|
131
176
|
FLOW_DECISION_UNRESOLVABLE: "evaluated",
|
|
132
|
-
FLOW_DECISION_PREPARATION_FAILED: "
|
|
133
|
-
FLOW_DECISION_PREVIEW_ABSENT: "
|
|
177
|
+
FLOW_DECISION_PREPARATION_FAILED: "envelope",
|
|
178
|
+
FLOW_DECISION_PREVIEW_ABSENT: "envelope",
|
|
134
179
|
// The settlement's own vocabulary. Both mean the CLI READ the declaration and
|
|
135
180
|
// compared it against what the plan really owes — a declaration that answers
|
|
136
181
|
// for the wrong obligations, or that leaves one unanswered.
|
|
137
182
|
FLOW_SETTLEMENT_INVALID: "evaluated",
|
|
138
183
|
FLOW_SETTLEMENT_INCOMPLETE: "evaluated",
|
|
139
|
-
PLAN_SOURCE_BOUNDARY_MISSING: "
|
|
140
|
-
PLAN_SOURCE_UNKNOWN: "
|
|
141
|
-
PLAN_TASK_SOURCE_OUTSIDE_PHASE: "
|
|
142
|
-
PLAN_SOURCE_EXTERNAL_CLOSURE: "
|
|
143
|
-
PLAN_SOURCE_LOCAL_PROOF_MISSING: "
|
|
184
|
+
PLAN_SOURCE_BOUNDARY_MISSING: "envelope",
|
|
185
|
+
PLAN_SOURCE_UNKNOWN: "envelope",
|
|
186
|
+
PLAN_TASK_SOURCE_OUTSIDE_PHASE: "envelope",
|
|
187
|
+
PLAN_SOURCE_EXTERNAL_CLOSURE: "envelope",
|
|
188
|
+
PLAN_SOURCE_LOCAL_PROOF_MISSING: "envelope",
|
|
144
189
|
// The plan's grammar does not spend: a plan published without its lineage is
|
|
145
190
|
// refused for what its header says, and fixing the header is the whole answer.
|
|
146
191
|
PLAN_LINEAGE_UNSEALED: "envelope",
|
|
147
192
|
// The authoring boundary's: the bytes arrived and what they would do is not
|
|
148
193
|
// what the row declares, or their destination could not be read.
|
|
149
194
|
FLOW_PROPOSAL_BEYOND_CONTRACT: "evaluated",
|
|
150
|
-
FLOW_PROPOSAL_DESTINATION_UNOBSERVED: "
|
|
151
|
-
FLOW_PROPOSAL_BASE_UNREADABLE: "
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
FLOW_ROUTE_PROPOSAL_INVALID: "evaluated",
|
|
157
|
-
FLOW_ROUTE_SUBSTITUTION_INVALID: "evaluated",
|
|
195
|
+
FLOW_PROPOSAL_DESTINATION_UNOBSERVED: "envelope",
|
|
196
|
+
FLOW_PROPOSAL_BASE_UNREADABLE: "envelope",
|
|
197
|
+
// Route shape is free; attempting to bypass a hard gate is evaluated.
|
|
198
|
+
FLOW_ROUTE_DECISION_INVALID: "envelope",
|
|
199
|
+
FLOW_ROUTE_PROPOSAL_INVALID: "envelope",
|
|
200
|
+
FLOW_ROUTE_SUBSTITUTION_INVALID: "envelope",
|
|
158
201
|
FLOW_ROUTE_HARD_GATE: "evaluated",
|
|
202
|
+
// The author's draft is a shape; a contradictory claim or a scope the
|
|
203
|
+
// contract refuses is content. A moved baseline or publication is state.
|
|
204
|
+
NOTE_NOT_OBJECT: "envelope",
|
|
205
|
+
NOTE_SCHEMA_UNKNOWN: "envelope",
|
|
206
|
+
NOTE_ID_INVALID: "envelope",
|
|
207
|
+
NOTE_DECISION_MISSING: "envelope",
|
|
208
|
+
NOTE_REASON_MISSING: "envelope",
|
|
209
|
+
NOTE_CONSUMERS_MISSING: "envelope",
|
|
210
|
+
NOTE_EVIDENCE_PRESERVED_MISSING: "envelope",
|
|
211
|
+
NOTE_EVIDENCE_INVALIDATED_MISSING: "envelope",
|
|
212
|
+
NOTE_OBLIGATIONS_MISSING: "envelope",
|
|
213
|
+
NOTE_OBLIGATIONS_INVALID: "envelope",
|
|
214
|
+
NOTE_OBLIGATION_KIND_MISSING: "envelope",
|
|
215
|
+
NOTE_RESUME_POINT_MISSING: "envelope",
|
|
216
|
+
NOTE_DATE_INVALID: "envelope",
|
|
217
|
+
NOTE_DIGEST_MISSING: "envelope",
|
|
218
|
+
NOTE_DIGEST_MISMATCH: "envelope",
|
|
219
|
+
NOTE_SCOPE_INVALID: "envelope",
|
|
220
|
+
NOTE_SUPERSEDES_INVALID: "envelope",
|
|
221
|
+
NOTE_ASSERTIONS_MISSING: "envelope",
|
|
222
|
+
NOTE_ASSERTIONS_INVALID: "envelope",
|
|
223
|
+
NOTE_ASSERTIONS_DUPLICATE: "envelope",
|
|
224
|
+
NOTE_LINEAGE_MISSING: "envelope",
|
|
225
|
+
NOTE_LINEAGE_INVALID: "envelope",
|
|
226
|
+
NOTE_LINEAGE_DIGEST_INVALID: "envelope",
|
|
227
|
+
NOTE_EXECUTION_STATE_MISSING: "envelope",
|
|
228
|
+
NOTE_INDEX_UNREADABLE: "envelope",
|
|
229
|
+
NOTE_INDEX_INVALID: "envelope",
|
|
230
|
+
NOTE_INDEX_SCHEMA_UNKNOWN: "envelope",
|
|
231
|
+
NOTE_ALREADY_PUBLISHED: "control",
|
|
232
|
+
NOTE_SUPERSEDES_ABSENT: "evaluated",
|
|
233
|
+
NOTE_REWRITES_BASELINE: "evaluated",
|
|
234
|
+
CONTRACT_BASELINE_ABSENT: "envelope",
|
|
235
|
+
CONTRACT_ASSERTION_ABSENT: "evaluated",
|
|
236
|
+
CONTRACT_OVERLAP: "evaluated",
|
|
237
|
+
CONTRACT_CONTRADICTION: "evaluated",
|
|
238
|
+
DECISION_BASE_ABSENT: "envelope",
|
|
239
|
+
PROPOSAL_LOCKED: "control",
|
|
240
|
+
PROPOSAL_BASELINE_UNSEALED: "envelope",
|
|
241
|
+
PROPOSAL_APPROVAL_MISMATCH: "envelope",
|
|
242
|
+
PROPOSAL_APPROVAL_MISSING: "envelope",
|
|
243
|
+
PROPOSAL_BASE_GONE: "envelope",
|
|
244
|
+
PROPOSAL_BASE_STALE: "envelope",
|
|
159
245
|
// A compensation the run declared STILL PENDING is not a malformed answer and
|
|
160
246
|
// not a failed check: it is the truthful one. The closure stays where it is
|
|
161
247
|
// until the work is done, and charging an attempt for saying so would make
|
|
@@ -268,45 +354,49 @@ function semanticAnswer(body, input) {
|
|
|
268
354
|
const proposes = proposalContractOf(input.decision);
|
|
269
355
|
const declared = new Set(input.decision.signals ?? []);
|
|
270
356
|
const raw = body.signals;
|
|
357
|
+
const issues = [];
|
|
271
358
|
if (raw !== undefined && !isStringArray(raw)) {
|
|
272
|
-
|
|
359
|
+
issues.push(violation(invalid("'signals' tiene que ser una lista de identificadores"), "signals", "string[]", raw));
|
|
273
360
|
}
|
|
274
|
-
const signals = raw
|
|
361
|
+
const signals = isStringArray(raw) ? raw : [];
|
|
275
362
|
const decisions = body.decisions;
|
|
276
363
|
if (decisions !== undefined && !isRecord(decisions)) {
|
|
277
|
-
|
|
364
|
+
issues.push(violation(invalid("'decisions' tiene que ser un objeto"), "decisions", "objeto", decisions));
|
|
278
365
|
}
|
|
279
366
|
// A flow control IS an answer, including here. It used to die on the emptiness
|
|
280
367
|
// check below — a semantic boundary demands signals or decisions — and
|
|
281
368
|
// `FLOW_ANSWER_AMBIGUOUS` is an EVALUATED rejection, so asking to compact cost
|
|
282
369
|
// an attempt at exactly the boundary somebody was trying to pause.
|
|
283
370
|
const control = flowControlOf(body);
|
|
284
|
-
const substance =
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
371
|
+
const substance = issues.length > 0
|
|
372
|
+
? null
|
|
373
|
+
: checkSubstance(body, {
|
|
374
|
+
decision: input.decision,
|
|
375
|
+
signals,
|
|
376
|
+
decisions,
|
|
377
|
+
proposes: proposes !== null,
|
|
378
|
+
control,
|
|
379
|
+
});
|
|
290
380
|
if (substance !== null)
|
|
291
|
-
|
|
381
|
+
issues.push(violation(substance, "artifacts", "respuesta con contenido para la frontera", body.artifacts));
|
|
292
382
|
const artifacts = proposes === null ? EMPTY : parseArtifacts(body.artifacts, input);
|
|
293
383
|
if (!Array.isArray(artifacts))
|
|
294
|
-
|
|
384
|
+
issues.push(violation(artifacts.failure, "artifacts", "lista de {path, content}", body.artifacts));
|
|
295
385
|
for (const signal of signals) {
|
|
296
386
|
if (declared.has(signal))
|
|
297
387
|
continue;
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
message: `'${signal}' no está en el vocabulario que esta frontera admite`,
|
|
303
|
-
action: `declarás solo: ${[...declared].join(", ") || "(ninguna señal en esta frontera)"}`,
|
|
304
|
-
},
|
|
388
|
+
const failure = {
|
|
389
|
+
code: "FLOW_SIGNAL_UNKNOWN",
|
|
390
|
+
message: `'${signal}' no está en el vocabulario que esta frontera admite`,
|
|
391
|
+
action: `declarás solo: ${[...declared].join(", ") || "(ninguna señal en esta frontera)"}`,
|
|
305
392
|
};
|
|
393
|
+
issues.push(violation(failure, "signals", [...declared].join(" | ") || "ninguna", signal));
|
|
306
394
|
}
|
|
307
395
|
if (new Set(signals).size !== signals.length) {
|
|
308
|
-
|
|
396
|
+
issues.push(violation(invalid("la misma señal viene declarada dos veces"), "signals", "identificadores únicos", signals));
|
|
309
397
|
}
|
|
398
|
+
if (issues.length > 0)
|
|
399
|
+
return { ok: false, failure: collected(issues) };
|
|
310
400
|
return {
|
|
311
401
|
ok: true,
|
|
312
402
|
answer: {
|
|
@@ -318,11 +408,22 @@ function semanticAnswer(body, input) {
|
|
|
318
408
|
// boundary has no alternatives of its own to pick from.
|
|
319
409
|
choice: control,
|
|
320
410
|
result: null,
|
|
321
|
-
artifacts,
|
|
411
|
+
artifacts: artifacts,
|
|
322
412
|
},
|
|
323
413
|
};
|
|
324
414
|
}
|
|
325
415
|
const EMPTY = [];
|
|
416
|
+
function checkAnswerContract(decision, decisions, control) {
|
|
417
|
+
if (control !== null || decision.answer_contract !== "batch-review")
|
|
418
|
+
return null;
|
|
419
|
+
if (isRecord(decisions) && isBatchReview(decisions.review))
|
|
420
|
+
return null;
|
|
421
|
+
return {
|
|
422
|
+
code: "PLAN_EXEC_BATCH_REVIEW_INVALID",
|
|
423
|
+
message: "la revisión del lote falta o no demuestra un revisor distinto y cada corrección revisada",
|
|
424
|
+
action: BATCH_REVIEW_CONTRACT,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
326
427
|
/**
|
|
327
428
|
* Whether the answer says anything the CLI can act on — and the right thing.
|
|
328
429
|
*
|
|
@@ -335,6 +436,9 @@ const EMPTY = [];
|
|
|
335
436
|
* nobody to approve them are precisely the write this contract forbids.
|
|
336
437
|
*/
|
|
337
438
|
function checkSubstance(body, answered) {
|
|
439
|
+
const contract = checkAnswerContract(answered.decision, answered.decisions, answered.control);
|
|
440
|
+
if (contract !== null)
|
|
441
|
+
return contract;
|
|
338
442
|
const hasArtifacts = Array.isArray(body.artifacts) && body.artifacts.length > 0;
|
|
339
443
|
if (hasArtifacts && !answered.proposes) {
|
|
340
444
|
return {
|
|
@@ -390,11 +494,24 @@ function parseArtifacts(raw, input) {
|
|
|
390
494
|
}
|
|
391
495
|
const parsed = parseSemanticArtifacts(raw, request);
|
|
392
496
|
if (!parsed.ok) {
|
|
497
|
+
const individual = Array.isArray(raw)
|
|
498
|
+
? raw.flatMap((entry, index) => {
|
|
499
|
+
const checked = parseSemanticArtifacts([entry], request);
|
|
500
|
+
return checked.ok
|
|
501
|
+
? []
|
|
502
|
+
: [
|
|
503
|
+
violation(checked.failure, `artifacts[${index}]`, "{path: ruta permitida, content: string}", entry).violation,
|
|
504
|
+
];
|
|
505
|
+
})
|
|
506
|
+
: [];
|
|
393
507
|
return {
|
|
394
508
|
failure: {
|
|
395
509
|
code: parsed.failure.code,
|
|
396
510
|
message: parsed.failure.message,
|
|
397
511
|
action: parsed.failure.action,
|
|
512
|
+
violations: individual.length > 0
|
|
513
|
+
? individual
|
|
514
|
+
: [violation(parsed.failure, "artifacts", "lista de {path, content}", raw).violation],
|
|
398
515
|
},
|
|
399
516
|
};
|
|
400
517
|
}
|
|
@@ -482,7 +599,7 @@ function approvalAnswer(body, input) {
|
|
|
482
599
|
failure: {
|
|
483
600
|
code: "FLOW_APPROVAL_MISSING",
|
|
484
601
|
message: "esta frontera necesita una aprobación de efecto y no llegó ninguna",
|
|
485
|
-
action: `volvé a invocar con --approval ${input.expectedApproval ?? "<digest>"}, o respondé '${STOP_LABEL}' para
|
|
602
|
+
action: `volvé a invocar con --approval ${input.expectedApproval ?? "<digest>"}, o respondé '${STOP_LABEL}' para cerrar la sesión conservando lo pendiente sin autorizar ese efecto`,
|
|
486
603
|
},
|
|
487
604
|
};
|
|
488
605
|
}
|
|
@@ -517,65 +634,58 @@ function executionAnswer(body, input) {
|
|
|
517
634
|
if (action === null) {
|
|
518
635
|
return { ok: false, failure: badResult("esta frontera no declara ninguna acción delegada") };
|
|
519
636
|
}
|
|
637
|
+
const issues = [];
|
|
638
|
+
const add = (failure, field, expected, value) => {
|
|
639
|
+
issues.push(violation(failure, field, expected, value));
|
|
640
|
+
};
|
|
520
641
|
const outcome = body.outcome;
|
|
521
642
|
// Absent and out-of-vocabulary are DIFFERENT failures and no longer share a
|
|
522
643
|
// sentence. They used to, and the sentence described only the second one.
|
|
523
644
|
if (outcome === undefined) {
|
|
524
|
-
|
|
645
|
+
add(badResult(missingOutcome(body)), "outcome", CAPABILITY_OUTCOMES.join(" | "), outcome);
|
|
525
646
|
}
|
|
526
|
-
if (typeof outcome !== "string" ||
|
|
647
|
+
else if (typeof outcome !== "string" ||
|
|
527
648
|
!CAPABILITY_OUTCOMES.includes(outcome)) {
|
|
528
|
-
|
|
529
|
-
ok: false,
|
|
530
|
-
failure: badResult(`'outcome' tiene que ser uno de: ${CAPABILITY_OUTCOMES.join(", ")} — una confirmación booleana o una narración no son un resultado`),
|
|
531
|
-
};
|
|
649
|
+
add(badResult(`'outcome' tiene que ser uno de: ${CAPABILITY_OUTCOMES.join(", ")} — una confirmación booleana o una narración no son un resultado`), "outcome", CAPABILITY_OUTCOMES.join(" | "), outcome);
|
|
532
650
|
}
|
|
533
651
|
const invocation = readInvocation(body.invocation);
|
|
534
652
|
if (invocation === null) {
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
action: "devolvé 'invocation' con el programa, los argumentos y el target que corriste: sin eso, nada distingue una ejecución de una afirmación",
|
|
541
|
-
},
|
|
542
|
-
};
|
|
653
|
+
add({
|
|
654
|
+
code: "FLOW_RESULT_INVALID",
|
|
655
|
+
message: `el resultado no declara la invocación que se ejecutó: invocation espera {program: string, args: string[], target: string, input: string|null}; recibió ${Array.isArray(body.invocation) ? "lista" : typeof body.invocation}`,
|
|
656
|
+
action: "devolvé 'invocation' con el programa, los argumentos y el target que corriste: sin eso, nada distingue una ejecución de una afirmación",
|
|
657
|
+
}, "invocation", "{program, args, target, input}", body.invocation);
|
|
543
658
|
}
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
failure: {
|
|
659
|
+
else {
|
|
660
|
+
const mismatch = invocationMismatch(action.invocation, invocation);
|
|
661
|
+
if (mismatch !== null)
|
|
662
|
+
add({
|
|
549
663
|
code: "FLOW_ACTION_MISMATCH",
|
|
550
664
|
message: `el resultado corresponde a otra invocación: ${mismatch}`,
|
|
551
665
|
action: `ejecutá exactamente '${[action.invocation.program, ...action.invocation.args].join(" ")}' en ${action.invocation.target} y devolvé su resultado`,
|
|
552
|
-
},
|
|
553
|
-
};
|
|
666
|
+
}, "invocation", "invocación sellada", body.invocation);
|
|
554
667
|
}
|
|
555
|
-
const read = readValidations(body.validations);
|
|
668
|
+
const read = readValidations(body.validations, action.evidence);
|
|
556
669
|
if (!read.ok) {
|
|
557
|
-
|
|
558
|
-
// proof is the proof's, and only a container breaking its own shape is the
|
|
559
|
-
// envelope's. Reserving FLOW_RESULT_INVALID for the latter is the point.
|
|
560
|
-
return {
|
|
561
|
-
ok: false,
|
|
562
|
-
failure: read.defect !== null
|
|
563
|
-
? proofShapeFailure(read.defect)
|
|
564
|
-
: badResult(badValidations(body.validations, action.evidence)),
|
|
565
|
-
};
|
|
670
|
+
issues.push(...read.issues);
|
|
566
671
|
}
|
|
567
|
-
const
|
|
568
|
-
const effects = readLedger(body.effects);
|
|
672
|
+
const effects = readLedger(body.effects, outcome === "completed" ? effectsOf(input.decision) : []);
|
|
569
673
|
if (effects === null) {
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
674
|
+
const ledger = body.effects;
|
|
675
|
+
const field = isRecord(ledger) && ledger.applied !== undefined ? "effects.applied" : "effects";
|
|
676
|
+
const unknown = isRecord(ledger) && Array.isArray(ledger.applied)
|
|
677
|
+
? ledger.applied.find((effect) => !isEffectClass(effect))
|
|
678
|
+
: undefined;
|
|
679
|
+
add(badResult(unknown === undefined
|
|
680
|
+
? "'effects' tiene que traer el registro planned/approved/applied del resultado"
|
|
681
|
+
: `'effects.applied' trae la clase ${JSON.stringify(unknown)}; las válidas son ${EFFECT_CLASSES.join(", ")}`), field, "{planned: EffectClass[], approved: EffectClass[], applied: EffectClass[]}", field === "effects" ? ledger : ledger.applied);
|
|
574
682
|
}
|
|
575
683
|
const output = readOutput(body.output);
|
|
576
684
|
if (output === undefined) {
|
|
577
|
-
|
|
685
|
+
add(badResult("'output' tiene que ser un OperationOutput o null"), "output", "OperationOutput | null", body.output);
|
|
578
686
|
}
|
|
687
|
+
if (issues.length > 0)
|
|
688
|
+
return { ok: false, failure: collected(issues) };
|
|
579
689
|
return {
|
|
580
690
|
ok: true,
|
|
581
691
|
answer: {
|
|
@@ -583,7 +693,13 @@ function executionAnswer(body, input) {
|
|
|
583
693
|
signals: [],
|
|
584
694
|
decisions: {},
|
|
585
695
|
choice: null,
|
|
586
|
-
result: {
|
|
696
|
+
result: {
|
|
697
|
+
outcome: outcome,
|
|
698
|
+
invocation: invocation,
|
|
699
|
+
output: output,
|
|
700
|
+
validations: read.ok ? read.validations : [],
|
|
701
|
+
effects: effects,
|
|
702
|
+
},
|
|
587
703
|
artifacts: EMPTY,
|
|
588
704
|
},
|
|
589
705
|
};
|
|
@@ -644,12 +760,12 @@ function badValidations(value, evidence) {
|
|
|
644
760
|
const keys = Object.keys(entry);
|
|
645
761
|
const seen = keys.length > 0 ? ` (trae: ${keys.join(", ")})` : " (viene vacía)";
|
|
646
762
|
if (typeof entry.id !== "string")
|
|
647
|
-
return `la validación ${index + 1} no trae 'id'${seen}`;
|
|
763
|
+
return `la validación ${index + 1} no trae 'id': validations[${index}].id espera string; recibió ${typeof entry.id}${seen}`;
|
|
648
764
|
if (typeof entry.passed !== "boolean") {
|
|
649
|
-
return `
|
|
765
|
+
return `validations[${index}].passed espera boolean; recibió ${typeof entry.passed}${seen}`;
|
|
650
766
|
}
|
|
651
767
|
if (entry.detail !== undefined && entry.detail !== null && typeof entry.detail !== "string") {
|
|
652
|
-
return `
|
|
768
|
+
return `validations[${index}].detail espera string o null; recibió ${typeof entry.detail}: ahí va la salida real del comando`;
|
|
653
769
|
}
|
|
654
770
|
}
|
|
655
771
|
return `'validations' tiene que ser ${shape}`;
|
|
@@ -661,7 +777,7 @@ function invocationMismatch(sealed, ran) {
|
|
|
661
777
|
if (sealed.args.length !== ran.args.length || sealed.args.some((arg, i) => arg !== ran.args[i])) {
|
|
662
778
|
return `argumentos '${ran.args.join(" ")}' en vez de '${sealed.args.join(" ")}'`;
|
|
663
779
|
}
|
|
664
|
-
if (sealed.target !== ran.target)
|
|
780
|
+
if (resolve(sealed.target) !== resolve(ran.target))
|
|
665
781
|
return `target '${ran.target}' en vez de '${sealed.target}'`;
|
|
666
782
|
if ((sealed.input ?? null) !== (ran.input ?? null))
|
|
667
783
|
return "otro input";
|
|
@@ -681,31 +797,58 @@ function readInvocation(value) {
|
|
|
681
797
|
return null;
|
|
682
798
|
return { program: value.program, args: value.args, target: value.target, input };
|
|
683
799
|
}
|
|
684
|
-
function readValidations(value) {
|
|
800
|
+
function readValidations(value, evidence) {
|
|
685
801
|
if (value === undefined)
|
|
686
802
|
return { ok: true, validations: [] };
|
|
803
|
+
const bad = () => badResult(badValidations(value, evidence));
|
|
687
804
|
if (!Array.isArray(value))
|
|
688
|
-
return {
|
|
805
|
+
return {
|
|
806
|
+
ok: false,
|
|
807
|
+
issues: [violation(bad(), "validations", "lista de {id, passed, detail}", value)],
|
|
808
|
+
};
|
|
689
809
|
const out = [];
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
810
|
+
const issues = [];
|
|
811
|
+
const add = (failure, field, expected, received) => {
|
|
812
|
+
issues.push(violation(failure, field, expected, received));
|
|
813
|
+
};
|
|
814
|
+
for (const [index, entry] of value.entries()) {
|
|
815
|
+
if (!isRecord(entry)) {
|
|
816
|
+
add(bad(), `validations[${index}]`, "{id, passed, detail}", entry);
|
|
817
|
+
continue;
|
|
818
|
+
}
|
|
819
|
+
const field = `validations[${index}]`;
|
|
820
|
+
if (typeof entry.id !== "string") {
|
|
821
|
+
add(bad(), `${field}.id`, "string", entry.id);
|
|
822
|
+
}
|
|
823
|
+
if (typeof entry.passed !== "boolean") {
|
|
824
|
+
add(bad(), `${field}.passed`, "boolean", entry.passed);
|
|
695
825
|
}
|
|
696
826
|
const detail = entry.detail === undefined ? null : entry.detail;
|
|
697
|
-
if (detail !== null && typeof detail !== "string")
|
|
698
|
-
|
|
699
|
-
|
|
827
|
+
if (detail !== null && typeof detail !== "string") {
|
|
828
|
+
add(bad(), `${field}.detail`, "string | null", detail);
|
|
829
|
+
}
|
|
830
|
+
if (entry.proof === undefined || entry.proof === null) {
|
|
831
|
+
if (typeof entry.id !== "string" ||
|
|
832
|
+
typeof entry.passed !== "boolean" ||
|
|
833
|
+
(detail !== null && typeof detail !== "string"))
|
|
834
|
+
continue;
|
|
700
835
|
out.push({ id: entry.id, passed: entry.passed, detail });
|
|
701
836
|
continue;
|
|
702
837
|
}
|
|
703
838
|
const read = readCheckoutProof(entry.proof);
|
|
704
|
-
if (!read.ok)
|
|
705
|
-
|
|
839
|
+
if (!read.ok) {
|
|
840
|
+
const failure = proofShapeFailure(read.defect);
|
|
841
|
+
const suffix = read.defect.where === "proof" ? "" : `.${read.defect.where}`;
|
|
842
|
+
add(failure, `${field}.proof${suffix}`, read.defect.expected.join(" | "), entry.proof);
|
|
843
|
+
continue;
|
|
844
|
+
}
|
|
845
|
+
if (typeof entry.id !== "string" ||
|
|
846
|
+
typeof entry.passed !== "boolean" ||
|
|
847
|
+
(detail !== null && typeof detail !== "string"))
|
|
848
|
+
continue;
|
|
706
849
|
out.push({ id: entry.id, passed: entry.passed, detail, proof: read.proof });
|
|
707
850
|
}
|
|
708
|
-
return { ok: true, validations: out };
|
|
851
|
+
return issues.length === 0 ? { ok: true, validations: out } : { ok: false, issues };
|
|
709
852
|
}
|
|
710
853
|
/** The fields each `kind` demands of its `invocation`, named once. */
|
|
711
854
|
const PROOF_INVOCATION_FIELDS = {
|
|
@@ -810,17 +953,17 @@ function proofShapeFailure(defect) {
|
|
|
810
953
|
? `el 'proof' de kind '${defect.kind}' trae una 'invocation' que ese kind no acepta: espera ${defect.expected.join(", ")} y ${received}`
|
|
811
954
|
: `el 'proof' de kind '${defect.kind ?? "(ausente)"}' no satisface la forma de su kind: espera ${defect.expected.join(", ")} (${received})`;
|
|
812
955
|
return {
|
|
813
|
-
code: "
|
|
956
|
+
code: "WORKLINE_CHECKOUT_PROOF_SHAPE_INVALID",
|
|
814
957
|
message,
|
|
815
958
|
action: "corregí el 'proof' anidado, no la lista 'validations': un kind 'command' pide {program, args} y un 'inspection' pide {artifact} — sin 'target' ni 'input', aunque la directiva los traiga. 'aw flow prove' lo produce ya bien formado y sin gastar intento",
|
|
816
959
|
};
|
|
817
960
|
}
|
|
818
|
-
function readLedger(value) {
|
|
961
|
+
function readLedger(value, defaultApplied = []) {
|
|
819
962
|
if (!isRecord(value))
|
|
820
963
|
return null;
|
|
821
964
|
const planned = readEffectClasses(value.planned);
|
|
822
965
|
const approved = readEffectClasses(value.approved);
|
|
823
|
-
const applied = readEffectClasses(value.applied);
|
|
966
|
+
const applied = value.applied === undefined ? [...defaultApplied] : readEffectClasses(value.applied);
|
|
824
967
|
if (planned === null || approved === null || applied === null)
|
|
825
968
|
return null;
|
|
826
969
|
return { planned, approved, applied };
|