swarm-orchestrator 14.3.0 → 16.0.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 +186 -782
- package/README.md +83 -120
- package/dist/agent/attempts.js +74 -0
- package/dist/agent/attempts.js.map +1 -0
- package/dist/agent/command-step.js +66 -0
- package/dist/agent/command-step.js.map +1 -0
- package/dist/agent/context.js +101 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/conversation.js +95 -0
- package/dist/agent/conversation.js.map +1 -0
- package/dist/agent/exchange.js +71 -0
- package/dist/agent/exchange.js.map +1 -0
- package/dist/agent/feedback.js +19 -0
- package/dist/agent/feedback.js.map +1 -0
- package/dist/agent/finalize.js +74 -0
- package/dist/agent/finalize.js.map +1 -0
- package/dist/agent/git.js +24 -0
- package/dist/agent/git.js.map +1 -0
- package/dist/agent/instructions.js +72 -0
- package/dist/agent/instructions.js.map +1 -0
- package/dist/agent/loop-types.js +2 -0
- package/dist/agent/loop-types.js.map +1 -0
- package/dist/agent/loop.js +248 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/model.js +132 -0
- package/dist/agent/model.js.map +1 -0
- package/dist/agent/prompt.js +130 -0
- package/dist/agent/prompt.js.map +1 -0
- package/dist/agent/python-environment.js +158 -0
- package/dist/agent/python-environment.js.map +1 -0
- package/dist/agent/report.js +181 -0
- package/dist/agent/report.js.map +1 -0
- package/dist/agent/requirement-lines.js +56 -0
- package/dist/agent/requirement-lines.js.map +1 -0
- package/dist/agent/requirement-record.js +80 -0
- package/dist/agent/requirement-record.js.map +1 -0
- package/dist/agent/requirements-step.js +26 -0
- package/dist/agent/requirements-step.js.map +1 -0
- package/dist/agent/review.js +111 -0
- package/dist/agent/review.js.map +1 -0
- package/dist/agent/run.js +231 -0
- package/dist/agent/run.js.map +1 -0
- package/dist/agent/usage.js +35 -0
- package/dist/agent/usage.js.map +1 -0
- package/dist/agent/verification-step.js +23 -0
- package/dist/agent/verification-step.js.map +1 -0
- package/dist/agent/verification.js +94 -0
- package/dist/agent/verification.js.map +1 -0
- package/dist/agent/version-constraints.js +121 -0
- package/dist/agent/version-constraints.js.map +1 -0
- package/dist/agent/workspace.js +102 -0
- package/dist/agent/workspace.js.map +1 -0
- package/dist/build-version.js +10 -0
- package/dist/build-version.js.map +1 -1
- package/dist/cli-command-definitions.js +28 -168
- package/dist/cli-command-definitions.js.map +1 -1
- package/dist/cli-doctor.js +122 -0
- package/dist/cli-doctor.js.map +1 -0
- package/dist/cli-main.js +30 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli-run.js +165 -0
- package/dist/cli-run.js.map +1 -0
- package/dist/cli.js +10 -723
- package/dist/cli.js.map +1 -1
- package/dist/config/agent-config.js +69 -0
- package/dist/config/agent-config.js.map +1 -0
- package/dist/config/declared-setup.js +46 -0
- package/dist/config/declared-setup.js.map +1 -0
- package/dist/evidence/ledger-record.js +4 -72
- package/dist/evidence/ledger-record.js.map +1 -1
- package/dist/evidence/ledger.js +1 -3
- package/dist/evidence/ledger.js.map +1 -1
- package/dist/evidence/scrub-json.js +131 -0
- package/dist/evidence/scrub-json.js.map +1 -0
- package/dist/evidence/scrub.js +12 -396
- package/dist/evidence/scrub.js.map +1 -1
- package/dist/evidence/secret-spans.js +137 -0
- package/dist/evidence/secret-spans.js.map +1 -0
- package/dist/evidence/session.js +19 -82
- package/dist/evidence/session.js.map +1 -1
- package/dist/runtime/capacity.js +99 -0
- package/dist/runtime/capacity.js.map +1 -0
- package/dist/runtime/ollama.js +200 -0
- package/dist/runtime/ollama.js.map +1 -0
- package/dist/runtime/probe.js +57 -0
- package/dist/runtime/probe.js.map +1 -0
- package/dist/runtime/profile.js +101 -0
- package/dist/runtime/profile.js.map +1 -0
- package/dist/runtime/resolve.js +182 -0
- package/dist/runtime/resolve.js.map +1 -0
- package/dist/runtime/select.js +88 -0
- package/dist/runtime/select.js.map +1 -0
- package/dist/runtime/survey.js +51 -0
- package/dist/runtime/survey.js.map +1 -0
- package/dist/source.json +1 -0
- package/dist/tools/argument-grammars.js +90 -0
- package/dist/tools/argument-grammars.js.map +1 -0
- package/dist/tools/awk-program.js +143 -0
- package/dist/tools/awk-program.js.map +1 -0
- package/dist/tools/chokepoint.js +85 -208
- package/dist/tools/chokepoint.js.map +1 -1
- package/dist/tools/command-operands.js +55 -0
- package/dist/tools/command-operands.js.map +1 -0
- package/dist/tools/heredoc.js +57 -0
- package/dist/tools/heredoc.js.map +1 -0
- package/dist/tools/policy-guard.js +18 -3
- package/dist/tools/policy-guard.js.map +1 -1
- package/dist/tools/program-arguments.js +135 -0
- package/dist/tools/program-arguments.js.map +1 -0
- package/dist/tools/quoted-words.js +32 -0
- package/dist/tools/quoted-words.js.map +1 -0
- package/dist/tools/refused-actions.js +64 -0
- package/dist/tools/refused-actions.js.map +1 -0
- package/dist/tools/sed-script.js +278 -0
- package/dist/tools/sed-script.js.map +1 -0
- package/dist/tools/shell-command.js +70 -158
- package/dist/tools/shell-command.js.map +1 -1
- package/dist/tools/shell-paths.js +222 -0
- package/dist/tools/shell-paths.js.map +1 -0
- package/dist/tools/shell-tokens.js +133 -0
- package/dist/tools/shell-tokens.js.map +1 -0
- package/dist/tools/word-paths.js +63 -0
- package/dist/tools/word-paths.js.map +1 -0
- package/package.json +17 -40
- package/dist/action/artifacts.js +0 -72
- package/dist/action/artifacts.js.map +0 -1
- package/dist/action/comment.js +0 -139
- package/dist/action/comment.js.map +0 -1
- package/dist/action/environment.js +0 -106
- package/dist/action/environment.js.map +0 -1
- package/dist/action/verdict.js +0 -103
- package/dist/action/verdict.js.map +0 -1
- package/dist/action/verify.js +0 -424
- package/dist/action/verify.js.map +0 -1
- package/dist/adapters/external-agent.js +0 -141
- package/dist/adapters/external-agent.js.map +0 -1
- package/dist/agent-escalation.js +0 -74
- package/dist/agent-escalation.js.map +0 -1
- package/dist/agent-prompt.js +0 -55
- package/dist/agent-prompt.js.map +0 -1
- package/dist/agent-run.js +0 -743
- package/dist/agent-run.js.map +0 -1
- package/dist/cli-action.js +0 -117
- package/dist/cli-action.js.map +0 -1
- package/dist/cli-bond-report.js +0 -37
- package/dist/cli-bond-report.js.map +0 -1
- package/dist/cli-bundle.js +0 -64
- package/dist/cli-bundle.js.map +0 -1
- package/dist/cli-calibrate.js +0 -282
- package/dist/cli-calibrate.js.map +0 -1
- package/dist/cli-check.js +0 -341
- package/dist/cli-check.js.map +0 -1
- package/dist/cli-ci.js +0 -251
- package/dist/cli-ci.js.map +0 -1
- package/dist/cli-evidence-summary.js +0 -25
- package/dist/cli-evidence-summary.js.map +0 -1
- package/dist/cli-gates.js +0 -147
- package/dist/cli-gates.js.map +0 -1
- package/dist/cli-init.js +0 -175
- package/dist/cli-init.js.map +0 -1
- package/dist/cli-integrations.js +0 -145
- package/dist/cli-integrations.js.map +0 -1
- package/dist/cli-local-backend.js +0 -23
- package/dist/cli-local-backend.js.map +0 -1
- package/dist/cli-model-default.js +0 -107
- package/dist/cli-model-default.js.map +0 -1
- package/dist/cli-model-preflight.js +0 -18
- package/dist/cli-model-preflight.js.map +0 -1
- package/dist/cli-options.js +0 -415
- package/dist/cli-options.js.map +0 -1
- package/dist/cli-parallel-output.js +0 -158
- package/dist/cli-parallel-output.js.map +0 -1
- package/dist/cli-parallel.js +0 -585
- package/dist/cli-parallel.js.map +0 -1
- package/dist/cli-preflight.js +0 -33
- package/dist/cli-preflight.js.map +0 -1
- package/dist/cli-provider-settings.js +0 -21
- package/dist/cli-provider-settings.js.map +0 -1
- package/dist/cli-run-commands.js +0 -151
- package/dist/cli-run-commands.js.map +0 -1
- package/dist/cli-run-report.js +0 -63
- package/dist/cli-run-report.js.map +0 -1
- package/dist/cli-run-settings.js +0 -30
- package/dist/cli-run-settings.js.map +0 -1
- package/dist/cli-runtime-inputs.js +0 -25
- package/dist/cli-runtime-inputs.js.map +0 -1
- package/dist/cli-select.js +0 -122
- package/dist/cli-select.js.map +0 -1
- package/dist/cli-session.js +0 -286
- package/dist/cli-session.js.map +0 -1
- package/dist/cli-strengthen.js +0 -527
- package/dist/cli-strengthen.js.map +0 -1
- package/dist/cli-task-contract.js +0 -24
- package/dist/cli-task-contract.js.map +0 -1
- package/dist/cli-task-cost.js +0 -76
- package/dist/cli-task-cost.js.map +0 -1
- package/dist/cli-task-goal.js +0 -163
- package/dist/cli-task-goal.js.map +0 -1
- package/dist/cli-terminal.js +0 -103
- package/dist/cli-terminal.js.map +0 -1
- package/dist/cli-verdict.js +0 -144
- package/dist/cli-verdict.js.map +0 -1
- package/dist/cli-verification-evidence.js +0 -51
- package/dist/cli-verification-evidence.js.map +0 -1
- package/dist/cli-verify-options.js +0 -231
- package/dist/cli-verify-options.js.map +0 -1
- package/dist/cli-verify.js +0 -18
- package/dist/cli-verify.js.map +0 -1
- package/dist/config/approval-mode.js +0 -26
- package/dist/config/approval-mode.js.map +0 -1
- package/dist/config/init.js +0 -167
- package/dist/config/init.js.map +0 -1
- package/dist/config/interface-settings.js +0 -7
- package/dist/config/interface-settings.js.map +0 -1
- package/dist/config/node-harness.js +0 -34
- package/dist/config/node-harness.js.map +0 -1
- package/dist/config/package-discovery.js +0 -96
- package/dist/config/package-discovery.js.map +0 -1
- package/dist/config/settings.js +0 -110
- package/dist/config/settings.js.map +0 -1
- package/dist/config/swarm-toml.js +0 -249
- package/dist/config/swarm-toml.js.map +0 -1
- package/dist/core/clock.js +0 -2
- package/dist/core/clock.js.map +0 -1
- package/dist/core/compaction.js +0 -66
- package/dist/core/compaction.js.map +0 -1
- package/dist/core/degenerate-output.js +0 -44
- package/dist/core/degenerate-output.js.map +0 -1
- package/dist/core/loop-events.js +0 -2
- package/dist/core/loop-events.js.map +0 -1
- package/dist/core/loop.js +0 -385
- package/dist/core/loop.js.map +0 -1
- package/dist/core/model-cancellation.js +0 -17
- package/dist/core/model-cancellation.js.map +0 -1
- package/dist/core/model-client.js +0 -43
- package/dist/core/model-client.js.map +0 -1
- package/dist/core/random-source.js +0 -2
- package/dist/core/random-source.js.map +0 -1
- package/dist/core/termination.js +0 -20
- package/dist/core/termination.js.map +0 -1
- package/dist/core/tool-invoker.js +0 -2
- package/dist/core/tool-invoker.js.map +0 -1
- package/dist/durable/controller-location.js +0 -30
- package/dist/durable/controller-location.js.map +0 -1
- package/dist/durable/legacy-run-store.js +0 -86
- package/dist/durable/legacy-run-store.js.map +0 -1
- package/dist/durable/recovery-context.js +0 -180
- package/dist/durable/recovery-context.js.map +0 -1
- package/dist/durable/run-journal.js +0 -161
- package/dist/durable/run-journal.js.map +0 -1
- package/dist/durable/run-store.js +0 -218
- package/dist/durable/run-store.js.map +0 -1
- package/dist/durable/session-evidence.js +0 -21
- package/dist/durable/session-evidence.js.map +0 -1
- package/dist/edit-distance.js +0 -39
- package/dist/edit-distance.js.map +0 -1
- package/dist/eval/agent-session.js +0 -146
- package/dist/eval/agent-session.js.map +0 -1
- package/dist/eval/arm-dispatch.js +0 -33
- package/dist/eval/arm-dispatch.js.map +0 -1
- package/dist/eval/arms.js +0 -101
- package/dist/eval/arms.js.map +0 -1
- package/dist/eval/campaign-history.js +0 -48
- package/dist/eval/campaign-history.js.map +0 -1
- package/dist/eval/campaign-record.js +0 -232
- package/dist/eval/campaign-record.js.map +0 -1
- package/dist/eval/campaign-run.js +0 -285
- package/dist/eval/campaign-run.js.map +0 -1
- package/dist/eval/deadline-overshoot.js +0 -73
- package/dist/eval/deadline-overshoot.js.map +0 -1
- package/dist/eval/empty-patch-attribution.js +0 -19
- package/dist/eval/empty-patch-attribution.js.map +0 -1
- package/dist/eval/endpoint-health.js +0 -126
- package/dist/eval/endpoint-health.js.map +0 -1
- package/dist/eval/false-green-rate.js +0 -133
- package/dist/eval/false-green-rate.js.map +0 -1
- package/dist/eval/feedback-study-analysis.js +0 -747
- package/dist/eval/feedback-study-analysis.js.map +0 -1
- package/dist/eval/feedback-study-report.js +0 -156
- package/dist/eval/feedback-study-report.js.map +0 -1
- package/dist/eval/feedback-study.js +0 -854
- package/dist/eval/feedback-study.js.map +0 -1
- package/dist/eval/first-run-observation.js +0 -105
- package/dist/eval/first-run-observation.js.map +0 -1
- package/dist/eval/frozen-campaign.js +0 -127
- package/dist/eval/frozen-campaign.js.map +0 -1
- package/dist/eval/goal-campaign-report.js +0 -143
- package/dist/eval/goal-campaign-report.js.map +0 -1
- package/dist/eval/goal-observation.js +0 -50
- package/dist/eval/goal-observation.js.map +0 -1
- package/dist/eval/goal-protocol.js +0 -104
- package/dist/eval/goal-protocol.js.map +0 -1
- package/dist/eval/known-total.js +0 -7
- package/dist/eval/known-total.js.map +0 -1
- package/dist/eval/npm-failure.js +0 -24
- package/dist/eval/npm-failure.js.map +0 -1
- package/dist/eval/oracle-challenge.js +0 -80
- package/dist/eval/oracle-challenge.js.map +0 -1
- package/dist/eval/oracle-filter.js +0 -98
- package/dist/eval/oracle-filter.js.map +0 -1
- package/dist/eval/patch-metrics.js +0 -74
- package/dist/eval/patch-metrics.js.map +0 -1
- package/dist/eval/pr-task-judge.js +0 -241
- package/dist/eval/pr-task-judge.js.map +0 -1
- package/dist/eval/pr-task-paths.js +0 -26
- package/dist/eval/pr-task-paths.js.map +0 -1
- package/dist/eval/protocol-fixture.js +0 -97
- package/dist/eval/protocol-fixture.js.map +0 -1
- package/dist/eval/protocol.js +0 -80
- package/dist/eval/protocol.js.map +0 -1
- package/dist/eval/reach-pressure-analysis.js +0 -507
- package/dist/eval/reach-pressure-analysis.js.map +0 -1
- package/dist/eval/reach-pressure-derivation.js +0 -201
- package/dist/eval/reach-pressure-derivation.js.map +0 -1
- package/dist/eval/reach-pressure-report.js +0 -266
- package/dist/eval/reach-pressure-report.js.map +0 -1
- package/dist/eval/reach-pressure.js +0 -645
- package/dist/eval/reach-pressure.js.map +0 -1
- package/dist/eval/repair-progress.js +0 -109
- package/dist/eval/repair-progress.js.map +0 -1
- package/dist/eval/sealed-workspace.js +0 -61
- package/dist/eval/sealed-workspace.js.map +0 -1
- package/dist/eval/security-corpus.js +0 -139
- package/dist/eval/security-corpus.js.map +0 -1
- package/dist/eval/statistics.js +0 -289
- package/dist/eval/statistics.js.map +0 -1
- package/dist/eval/task-difficulty.js +0 -28
- package/dist/eval/task-difficulty.js.map +0 -1
- package/dist/eval/task-identity.js +0 -0
- package/dist/eval/task-identity.js.map +0 -1
- package/dist/eval/test-case-split.js +0 -140
- package/dist/eval/test-case-split.js.map +0 -1
- package/dist/eval/verification-closure.js +0 -56
- package/dist/eval/verification-closure.js.map +0 -1
- package/dist/evidence/acceptance-contract.js +0 -34
- package/dist/evidence/acceptance-contract.js.map +0 -1
- package/dist/evidence/attestation.js +0 -164
- package/dist/evidence/attestation.js.map +0 -1
- package/dist/evidence/behavior-check.js +0 -93
- package/dist/evidence/behavior-check.js.map +0 -1
- package/dist/evidence/blob-manifest.js +0 -183
- package/dist/evidence/blob-manifest.js.map +0 -1
- package/dist/evidence/blob-restore.js +0 -100
- package/dist/evidence/blob-restore.js.map +0 -1
- package/dist/evidence/browser-execution.js +0 -12
- package/dist/evidence/browser-execution.js.map +0 -1
- package/dist/evidence/bundle-manifest.js +0 -64
- package/dist/evidence/bundle-manifest.js.map +0 -1
- package/dist/evidence/bundle.js +0 -189
- package/dist/evidence/bundle.js.map +0 -1
- package/dist/evidence/challenge-lines.js +0 -21
- package/dist/evidence/challenge-lines.js.map +0 -1
- package/dist/evidence/ci-summary.js +0 -62
- package/dist/evidence/ci-summary.js.map +0 -1
- package/dist/evidence/claim.js +0 -123
- package/dist/evidence/claim.js.map +0 -1
- package/dist/evidence/combined-bundle.js +0 -40
- package/dist/evidence/combined-bundle.js.map +0 -1
- package/dist/evidence/dag.js +0 -151
- package/dist/evidence/dag.js.map +0 -1
- package/dist/evidence/fixtures/empty-assistant-turns.js +0 -13
- package/dist/evidence/fixtures/empty-assistant-turns.js.map +0 -1
- package/dist/evidence/frozen-json.js +0 -10
- package/dist/evidence/frozen-json.js.map +0 -1
- package/dist/evidence/goal-contract.js +0 -221
- package/dist/evidence/goal-contract.js.map +0 -1
- package/dist/evidence/latin-lookalikes.js +0 -74
- package/dist/evidence/latin-lookalikes.js.map +0 -1
- package/dist/evidence/model-call-recording.js +0 -126
- package/dist/evidence/model-call-recording.js.map +0 -1
- package/dist/evidence/predicate-catalogue.js +0 -726
- package/dist/evidence/predicate-catalogue.js.map +0 -1
- package/dist/evidence/predicate.js +0 -244
- package/dist/evidence/predicate.js.map +0 -1
- package/dist/evidence/record-index.js +0 -21
- package/dist/evidence/record-index.js.map +0 -1
- package/dist/evidence/record-kind.js +0 -34
- package/dist/evidence/record-kind.js.map +0 -1
- package/dist/evidence/replay.js +0 -114
- package/dist/evidence/replay.js.map +0 -1
- package/dist/evidence/retention.js +0 -93
- package/dist/evidence/retention.js.map +0 -1
- package/dist/evidence/review-page.js +0 -527
- package/dist/evidence/review-page.js.map +0 -1
- package/dist/evidence/routine-claims.js +0 -38
- package/dist/evidence/routine-claims.js.map +0 -1
- package/dist/evidence/run-assessment.js +0 -131
- package/dist/evidence/run-assessment.js.map +0 -1
- package/dist/evidence/run-spec.js +0 -132
- package/dist/evidence/run-spec.js.map +0 -1
- package/dist/evidence/signer-trust.js +0 -60
- package/dist/evidence/signer-trust.js.map +0 -1
- package/dist/evidence/signing.js +0 -191
- package/dist/evidence/signing.js.map +0 -1
- package/dist/evidence/task-contract.js +0 -120
- package/dist/evidence/task-contract.js.map +0 -1
- package/dist/evidence/task-preset.js +0 -52
- package/dist/evidence/task-preset.js.map +0 -1
- package/dist/evidence/transcript.js +0 -89
- package/dist/evidence/transcript.js.map +0 -1
- package/dist/evidence/turn-content.js +0 -32
- package/dist/evidence/turn-content.js.map +0 -1
- package/dist/evidence/verdict.js +0 -171
- package/dist/evidence/verdict.js.map +0 -1
- package/dist/evidence/verifier/behavior.d.mts +0 -5
- package/dist/evidence/verifier/behavior.mjs +0 -161
- package/dist/evidence/verifier/challenges.d.mts +0 -19
- package/dist/evidence/verifier/challenges.mjs +0 -203
- package/dist/evidence/verifier/controller.d.mts +0 -15
- package/dist/evidence/verifier/controller.mjs +0 -751
- package/dist/evidence/verifier/rederive.d.mts +0 -64
- package/dist/evidence/verifier/rederive.mjs +0 -553
- package/dist/evidence/verifier/status.d.mts +0 -11
- package/dist/evidence/verifier/status.mjs +0 -757
- package/dist/evidence/verifier/strengthening.d.mts +0 -18
- package/dist/evidence/verifier/strengthening.mjs +0 -200
- package/dist/evidence/verifier/upgrade.d.mts +0 -6
- package/dist/evidence/verifier/upgrade.mjs +0 -81
- package/dist/evidence/verifier/verify.d.mts +0 -47
- package/dist/evidence/verifier/verify.mjs +0 -1666
- package/dist/evidence/verify-report.js +0 -104
- package/dist/evidence/verify-report.js.map +0 -1
- package/dist/exec/child-environment.js +0 -190
- package/dist/exec/child-environment.js.map +0 -1
- package/dist/exec/container-backend.js +0 -252
- package/dist/exec/container-backend.js.map +0 -1
- package/dist/exec/container-image.js +0 -7
- package/dist/exec/container-image.js.map +0 -1
- package/dist/exec/controlled-network.js +0 -58
- package/dist/exec/controlled-network.js.map +0 -1
- package/dist/exec/execution-envelope-record.js +0 -31
- package/dist/exec/execution-envelope-record.js.map +0 -1
- package/dist/exec/execution-mode.js +0 -203
- package/dist/exec/execution-mode.js.map +0 -1
- package/dist/exec/isolation-option.js +0 -40
- package/dist/exec/isolation-option.js.map +0 -1
- package/dist/exec/resource-pool.js +0 -47
- package/dist/exec/resource-pool.js.map +0 -1
- package/dist/exec/run-cancellation.js +0 -34
- package/dist/exec/run-cancellation.js.map +0 -1
- package/dist/exec/run-envelope.js +0 -48
- package/dist/exec/run-envelope.js.map +0 -1
- package/dist/exec/run-process.js +0 -129
- package/dist/exec/run-process.js.map +0 -1
- package/dist/exec/runtime-resource.js +0 -98
- package/dist/exec/runtime-resource.js.map +0 -1
- package/dist/exec/task-contract-enforcement.js +0 -28
- package/dist/exec/task-contract-enforcement.js.map +0 -1
- package/dist/gates/acceptance-package.js +0 -75
- package/dist/gates/acceptance-package.js.map +0 -1
- package/dist/gates/approval.js +0 -59
- package/dist/gates/approval.js.map +0 -1
- package/dist/gates/auto-resolve.js +0 -342
- package/dist/gates/auto-resolve.js.map +0 -1
- package/dist/gates/base-control.js +0 -138
- package/dist/gates/base-control.js.map +0 -1
- package/dist/gates/behavior-artifacts.js +0 -88
- package/dist/gates/behavior-artifacts.js.map +0 -1
- package/dist/gates/behavior-check.js +0 -144
- package/dist/gates/behavior-check.js.map +0 -1
- package/dist/gates/behaviour-probe.js +0 -178
- package/dist/gates/behaviour-probe.js.map +0 -1
- package/dist/gates/bond-runner.js +0 -169
- package/dist/gates/bond-runner.js.map +0 -1
- package/dist/gates/bonds.js +0 -133
- package/dist/gates/bonds.js.map +0 -1
- package/dist/gates/browser-instrument-runner.mjs +0 -80
- package/dist/gates/browser-instrument.js +0 -33
- package/dist/gates/browser-instrument.js.map +0 -1
- package/dist/gates/browser-results.js +0 -75
- package/dist/gates/browser-results.js.map +0 -1
- package/dist/gates/certification.js +0 -69
- package/dist/gates/certification.js.map +0 -1
- package/dist/gates/change-source.js +0 -150
- package/dist/gates/change-source.js.map +0 -1
- package/dist/gates/check-admission.js +0 -218
- package/dist/gates/check-admission.js.map +0 -1
- package/dist/gates/check-network-probe.js +0 -42
- package/dist/gates/check-network-probe.js.map +0 -1
- package/dist/gates/check-plan.js +0 -269
- package/dist/gates/check-plan.js.map +0 -1
- package/dist/gates/checkout-environment.js +0 -119
- package/dist/gates/checkout-environment.js.map +0 -1
- package/dist/gates/comment-spans.js +0 -107
- package/dist/gates/comment-spans.js.map +0 -1
- package/dist/gates/contract-executor.js +0 -84
- package/dist/gates/contract-executor.js.map +0 -1
- package/dist/gates/contract-scope.js +0 -21
- package/dist/gates/contract-scope.js.map +0 -1
- package/dist/gates/contract-verification.js +0 -51
- package/dist/gates/contract-verification.js.map +0 -1
- package/dist/gates/default-gates.js +0 -197
- package/dist/gates/default-gates.js.map +0 -1
- package/dist/gates/deferred-setup.js +0 -250
- package/dist/gates/deferred-setup.js.map +0 -1
- package/dist/gates/dependency-install.js +0 -340
- package/dist/gates/dependency-install.js.map +0 -1
- package/dist/gates/engine.js +0 -171
- package/dist/gates/engine.js.map +0 -1
- package/dist/gates/environment-preflight.js +0 -108
- package/dist/gates/environment-preflight.js.map +0 -1
- package/dist/gates/escalation.js +0 -53
- package/dist/gates/escalation.js.map +0 -1
- package/dist/gates/failure-attribution.js +0 -444
- package/dist/gates/failure-attribution.js.map +0 -1
- package/dist/gates/failure-signature.js +0 -9
- package/dist/gates/failure-signature.js.map +0 -1
- package/dist/gates/file-set-tool.js +0 -107
- package/dist/gates/file-set-tool.js.map +0 -1
- package/dist/gates/file-set.js +0 -301
- package/dist/gates/file-set.js.map +0 -1
- package/dist/gates/gate-capability.js +0 -37
- package/dist/gates/gate-capability.js.map +0 -1
- package/dist/gates/gate-command.js +0 -69
- package/dist/gates/gate-command.js.map +0 -1
- package/dist/gates/gate-definition.js +0 -15
- package/dist/gates/gate-definition.js.map +0 -1
- package/dist/gates/gate-runner.js +0 -325
- package/dist/gates/gate-runner.js.map +0 -1
- package/dist/gates/gate-set-seal.js +0 -73
- package/dist/gates/gate-set-seal.js.map +0 -1
- package/dist/gates/git-workspace.js +0 -260
- package/dist/gates/git-workspace.js.map +0 -1
- package/dist/gates/github-source.js +0 -44
- package/dist/gates/github-source.js.map +0 -1
- package/dist/gates/goal-acceptance.js +0 -167
- package/dist/gates/goal-acceptance.js.map +0 -1
- package/dist/gates/goal-challenge-runner.js +0 -99
- package/dist/gates/goal-challenge-runner.js.map +0 -1
- package/dist/gates/goal-challenges.js +0 -337
- package/dist/gates/goal-challenges.js.map +0 -1
- package/dist/gates/goal-checkout.js +0 -109
- package/dist/gates/goal-checkout.js.map +0 -1
- package/dist/gates/goal-effects.js +0 -38
- package/dist/gates/goal-effects.js.map +0 -1
- package/dist/gates/harness-reporting.js +0 -71
- package/dist/gates/harness-reporting.js.map +0 -1
- package/dist/gates/http-check-runner.mjs +0 -96
- package/dist/gates/independent-checks.js +0 -95
- package/dist/gates/independent-checks.js.map +0 -1
- package/dist/gates/independent-verification.js +0 -1257
- package/dist/gates/independent-verification.js.map +0 -1
- package/dist/gates/inherited-changes.js +0 -26
- package/dist/gates/inherited-changes.js.map +0 -1
- package/dist/gates/inspection-gates.js +0 -430
- package/dist/gates/inspection-gates.js.map +0 -1
- package/dist/gates/instrument-dependencies.js +0 -249
- package/dist/gates/instrument-dependencies.js.map +0 -1
- package/dist/gates/instrument-identity.js +0 -794
- package/dist/gates/instrument-identity.js.map +0 -1
- package/dist/gates/measure-snapshot.js +0 -234
- package/dist/gates/measure-snapshot.js.map +0 -1
- package/dist/gates/measures.js +0 -298
- package/dist/gates/measures.js.map +0 -1
- package/dist/gates/mutant-parse.js +0 -70
- package/dist/gates/mutant-parse.js.map +0 -1
- package/dist/gates/mutant-witness.js +0 -99
- package/dist/gates/mutant-witness.js.map +0 -1
- package/dist/gates/node-command-runner.js +0 -160
- package/dist/gates/node-command-runner.js.map +0 -1
- package/dist/gates/node-gates.js +0 -122
- package/dist/gates/node-gates.js.map +0 -1
- package/dist/gates/node-test-command.js +0 -274
- package/dist/gates/node-test-command.js.map +0 -1
- package/dist/gates/noninteractive-runner.js +0 -106
- package/dist/gates/noninteractive-runner.js.map +0 -1
- package/dist/gates/oracle-bond-run.js +0 -128
- package/dist/gates/oracle-bond-run.js.map +0 -1
- package/dist/gates/oracle-bond.js +0 -49
- package/dist/gates/oracle-bond.js.map +0 -1
- package/dist/gates/oracle-instrumentation.js +0 -113
- package/dist/gates/oracle-instrumentation.js.map +0 -1
- package/dist/gates/oracle-mutants.js +0 -638
- package/dist/gates/oracle-mutants.js.map +0 -1
- package/dist/gates/oracle-reach.js +0 -175
- package/dist/gates/oracle-reach.js.map +0 -1
- package/dist/gates/package-scope.js +0 -115
- package/dist/gates/package-scope.js.map +0 -1
- package/dist/gates/parsers.js +0 -585
- package/dist/gates/parsers.js.map +0 -1
- package/dist/gates/patch-paths.js +0 -315
- package/dist/gates/patch-paths.js.map +0 -1
- package/dist/gates/prepare-dependencies.js +0 -37
- package/dist/gates/prepare-dependencies.js.map +0 -1
- package/dist/gates/prepared-python.js +0 -92
- package/dist/gates/prepared-python.js.map +0 -1
- package/dist/gates/prepared-tools.js +0 -18
- package/dist/gates/prepared-tools.js.map +0 -1
- package/dist/gates/preset-verification.js +0 -65
- package/dist/gates/preset-verification.js.map +0 -1
- package/dist/gates/project-environment.js +0 -60
- package/dist/gates/project-environment.js.map +0 -1
- package/dist/gates/project-type.js +0 -244
- package/dist/gates/project-type.js.map +0 -1
- package/dist/gates/python-gates.js +0 -93
- package/dist/gates/python-gates.js.map +0 -1
- package/dist/gates/python-mutants.js +0 -176
- package/dist/gates/python-mutants.js.map +0 -1
- package/dist/gates/python-offline-build.js +0 -274
- package/dist/gates/python-offline-build.js.map +0 -1
- package/dist/gates/ratchet-summary.js +0 -18
- package/dist/gates/ratchet-summary.js.map +0 -1
- package/dist/gates/ratchet.js +0 -207
- package/dist/gates/ratchet.js.map +0 -1
- package/dist/gates/repair-policy.js +0 -64
- package/dist/gates/repair-policy.js.map +0 -1
- package/dist/gates/resolved-path.js +0 -21
- package/dist/gates/resolved-path.js.map +0 -1
- package/dist/gates/respecification.js +0 -153
- package/dist/gates/respecification.js.map +0 -1
- package/dist/gates/runner-results.js +0 -150
- package/dist/gates/runner-results.js.map +0 -1
- package/dist/gates/scratch-index.js +0 -172
- package/dist/gates/scratch-index.js.map +0 -1
- package/dist/gates/setup-effect.js +0 -16
- package/dist/gates/setup-effect.js.map +0 -1
- package/dist/gates/setup-follow-up.js +0 -113
- package/dist/gates/setup-follow-up.js.map +0 -1
- package/dist/gates/structured-runner.js +0 -66
- package/dist/gates/structured-runner.js.map +0 -1
- package/dist/gates/turn-baseline.js +0 -98
- package/dist/gates/turn-baseline.js.map +0 -1
- package/dist/gates/unified-diff.js +0 -239
- package/dist/gates/unified-diff.js.map +0 -1
- package/dist/gates/upgrade-contract.js +0 -82
- package/dist/gates/upgrade-contract.js.map +0 -1
- package/dist/gates/upgrade-resolution.js +0 -63
- package/dist/gates/upgrade-resolution.js.map +0 -1
- package/dist/gates/v8-coverage.js +0 -142
- package/dist/gates/v8-coverage.js.map +0 -1
- package/dist/gates/value-flow.js +0 -335
- package/dist/gates/value-flow.js.map +0 -1
- package/dist/gates/workspace-changes.js +0 -5
- package/dist/gates/workspace-changes.js.map +0 -1
- package/dist/integrations/claude-hook.js +0 -200
- package/dist/integrations/claude-hook.js.map +0 -1
- package/dist/integrations/launcher.js +0 -17
- package/dist/integrations/launcher.js.map +0 -1
- package/dist/integrations/mcp-server.js +0 -270
- package/dist/integrations/mcp-server.js.map +0 -1
- package/dist/integrations/pre-commit.js +0 -169
- package/dist/integrations/pre-commit.js.map +0 -1
- package/dist/machine-output.js +0 -45
- package/dist/machine-output.js.map +0 -1
- package/dist/providers/ai-sdk-model-client.js +0 -161
- package/dist/providers/ai-sdk-model-client.js.map +0 -1
- package/dist/providers/endpoint-resolution.js +0 -81
- package/dist/providers/endpoint-resolution.js.map +0 -1
- package/dist/providers/fixture-provider.js +0 -87
- package/dist/providers/fixture-provider.js.map +0 -1
- package/dist/providers/local-discovery.js +0 -38
- package/dist/providers/local-discovery.js.map +0 -1
- package/dist/providers/local-fetch.js +0 -28
- package/dist/providers/local-fetch.js.map +0 -1
- package/dist/providers/message-conversion.js +0 -40
- package/dist/providers/message-conversion.js.map +0 -1
- package/dist/providers/model-spec.js +0 -33
- package/dist/providers/model-spec.js.map +0 -1
- package/dist/providers/registry.js +0 -125
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/served-models.js +0 -59
- package/dist/providers/served-models.js.map +0 -1
- package/dist/providers/transport-trace-file.js +0 -24
- package/dist/providers/transport-trace-file.js.map +0 -1
- package/dist/providers/transport-trace.js +0 -148
- package/dist/providers/transport-trace.js.map +0 -1
- package/dist/select/backend-canary.js +0 -119
- package/dist/select/backend-canary.js.map +0 -1
- package/dist/select/backend-command.js +0 -15
- package/dist/select/backend-command.js.map +0 -1
- package/dist/select/bundled-pricing.js +0 -12
- package/dist/select/bundled-pricing.js.map +0 -1
- package/dist/select/bundled-shortlist.js +0 -13
- package/dist/select/bundled-shortlist.js.map +0 -1
- package/dist/select/calibrate.js +0 -131
- package/dist/select/calibrate.js.map +0 -1
- package/dist/select/calibration-case.js +0 -66
- package/dist/select/calibration-case.js.map +0 -1
- package/dist/select/calibration-cases.v1.json +0 -257
- package/dist/select/calibration-measures.js +0 -129
- package/dist/select/calibration-measures.js.map +0 -1
- package/dist/select/calibration-report.js +0 -291
- package/dist/select/calibration-report.js.map +0 -1
- package/dist/select/calibration-run.js +0 -214
- package/dist/select/calibration-run.js.map +0 -1
- package/dist/select/calibration-summary.js +0 -76
- package/dist/select/calibration-summary.js.map +0 -1
- package/dist/select/coding-models.v1.json +0 -478
- package/dist/select/competency-table.js +0 -164
- package/dist/select/competency-table.js.map +0 -1
- package/dist/select/dimensions.js +0 -111
- package/dist/select/dimensions.js.map +0 -1
- package/dist/select/golden-set.js +0 -89
- package/dist/select/golden-set.js.map +0 -1
- package/dist/select/hardware-probe.js +0 -107
- package/dist/select/hardware-probe.js.map +0 -1
- package/dist/select/memory-probe.js +0 -33
- package/dist/select/memory-probe.js.map +0 -1
- package/dist/select/model-fallback.js +0 -89
- package/dist/select/model-fallback.js.map +0 -1
- package/dist/select/model-preflight.js +0 -85
- package/dist/select/model-preflight.js.map +0 -1
- package/dist/select/model-pricing.v1.json +0 -17
- package/dist/select/pick-store.js +0 -39
- package/dist/select/pick-store.js.map +0 -1
- package/dist/select/pricing-source.js +0 -38
- package/dist/select/pricing-source.js.map +0 -1
- package/dist/select/pricing.js +0 -66
- package/dist/select/pricing.js.map +0 -1
- package/dist/select/production-routing.js +0 -66
- package/dist/select/production-routing.js.map +0 -1
- package/dist/select/published-source.js +0 -11
- package/dist/select/published-source.js.map +0 -1
- package/dist/select/recommendation.js +0 -280
- package/dist/select/recommendation.js.map +0 -1
- package/dist/select/reward.js +0 -84
- package/dist/select/reward.js.map +0 -1
- package/dist/select/routing-candidates.js +0 -29
- package/dist/select/routing-candidates.js.map +0 -1
- package/dist/select/routing-log.js +0 -94
- package/dist/select/routing-log.js.map +0 -1
- package/dist/select/routing-mode.js +0 -78
- package/dist/select/routing-mode.js.map +0 -1
- package/dist/select/routing-record.js +0 -39
- package/dist/select/routing-record.js.map +0 -1
- package/dist/select/routing-report.js +0 -95
- package/dist/select/routing-report.js.map +0 -1
- package/dist/select/select-report.js +0 -81
- package/dist/select/select-report.js.map +0 -1
- package/dist/select/servable-candidates.js +0 -30
- package/dist/select/servable-candidates.js.map +0 -1
- package/dist/select/served-pick.js +0 -36
- package/dist/select/served-pick.js.map +0 -1
- package/dist/select/shortlist-source.js +0 -102
- package/dist/select/shortlist-source.js.map +0 -1
- package/dist/select/shortlist.js +0 -132
- package/dist/select/shortlist.js.map +0 -1
- package/dist/select/system-probe.js +0 -32
- package/dist/select/system-probe.js.map +0 -1
- package/dist/select/task-class.js +0 -48
- package/dist/select/task-class.js.map +0 -1
- package/dist/select/task-cost.js +0 -62
- package/dist/select/task-cost.js.map +0 -1
- package/dist/select/ucb.js +0 -104
- package/dist/select/ucb.js.map +0 -1
- package/dist/swarm-verify.js +0 -75
- package/dist/swarm-verify.js.map +0 -1
- package/dist/task-brief.js +0 -20
- package/dist/task-brief.js.map +0 -1
- package/dist/telemetry/otel.js +0 -130
- package/dist/telemetry/otel.js.map +0 -1
- package/dist/tools/bounded-file.js +0 -66
- package/dist/tools/bounded-file.js.map +0 -1
- package/dist/tools/chokepoint-record.js +0 -71
- package/dist/tools/chokepoint-record.js.map +0 -1
- package/dist/tools/claim-reference-tool.js +0 -17
- package/dist/tools/claim-reference-tool.js.map +0 -1
- package/dist/tools/claim-tool.js +0 -59
- package/dist/tools/claim-tool.js.map +0 -1
- package/dist/tools/derivation.js +0 -127
- package/dist/tools/derivation.js.map +0 -1
- package/dist/tools/file-tools.js +0 -136
- package/dist/tools/file-tools.js.map +0 -1
- package/dist/tools/regex-safety.js +0 -663
- package/dist/tools/regex-safety.js.map +0 -1
- package/dist/tools/regex-worker.js +0 -63
- package/dist/tools/regex-worker.js.map +0 -1
- package/dist/tools/search-tool.js +0 -155
- package/dist/tools/search-tool.js.map +0 -1
- package/dist/tools/shell-canonical.js +0 -104
- package/dist/tools/shell-canonical.js.map +0 -1
- package/dist/tools/shell-tool.js +0 -85
- package/dist/tools/shell-tool.js.map +0 -1
- package/dist/tools/tool-argument-decoding.js +0 -121
- package/dist/tools/tool-argument-decoding.js.map +0 -1
- package/dist/tools/tool-definition.js +0 -15
- package/dist/tools/tool-definition.js.map +0 -1
- package/dist/tools/workspace-path.js +0 -18
- package/dist/tools/workspace-path.js.map +0 -1
- package/dist/tools/workspace-tools.js +0 -19
- package/dist/tools/workspace-tools.js.map +0 -1
- package/dist/tui/calibrate-interface.js +0 -59
- package/dist/tui/calibrate-interface.js.map +0 -1
- package/dist/tui/calibrate-screen-model.js +0 -118
- package/dist/tui/calibrate-screen-model.js.map +0 -1
- package/dist/tui/calibrate-screen.js +0 -44
- package/dist/tui/calibrate-screen.js.map +0 -1
- package/dist/tui/calibrate-store.js +0 -22
- package/dist/tui/calibrate-store.js.map +0 -1
- package/dist/tui/calibrate-view.js +0 -92
- package/dist/tui/calibrate-view.js.map +0 -1
- package/dist/tui/confirmation-queue.js +0 -62
- package/dist/tui/confirmation-queue.js.map +0 -1
- package/dist/tui/controller-screen-model.js +0 -28
- package/dist/tui/controller-screen-model.js.map +0 -1
- package/dist/tui/controller-screen.js +0 -17
- package/dist/tui/controller-screen.js.map +0 -1
- package/dist/tui/elapsed.js +0 -31
- package/dist/tui/elapsed.js.map +0 -1
- package/dist/tui/evidence-panel.js +0 -113
- package/dist/tui/evidence-panel.js.map +0 -1
- package/dist/tui/glyphs.js +0 -23
- package/dist/tui/glyphs.js.map +0 -1
- package/dist/tui/hyperlink.js +0 -38
- package/dist/tui/hyperlink.js.map +0 -1
- package/dist/tui/key-bindings.js +0 -113
- package/dist/tui/key-bindings.js.map +0 -1
- package/dist/tui/key-dispatcher.js +0 -162
- package/dist/tui/key-dispatcher.js.map +0 -1
- package/dist/tui/layout.js +0 -102
- package/dist/tui/layout.js.map +0 -1
- package/dist/tui/open-path.js +0 -76
- package/dist/tui/open-path.js.map +0 -1
- package/dist/tui/plain-lines.js +0 -53
- package/dist/tui/plain-lines.js.map +0 -1
- package/dist/tui/render-timings.js +0 -22
- package/dist/tui/render-timings.js.map +0 -1
- package/dist/tui/screen-model.js +0 -506
- package/dist/tui/screen-model.js.map +0 -1
- package/dist/tui/screen.js +0 -145
- package/dist/tui/screen.js.map +0 -1
- package/dist/tui/session-interface.js +0 -354
- package/dist/tui/session-interface.js.map +0 -1
- package/dist/tui/session-store.js +0 -28
- package/dist/tui/session-store.js.map +0 -1
- package/dist/tui/session-view.js +0 -227
- package/dist/tui/session-view.js.map +0 -1
- package/dist/tui/terminal-text.js +0 -97
- package/dist/tui/terminal-text.js.map +0 -1
- package/dist/tui/theme.js +0 -94
- package/dist/tui/theme.js.map +0 -1
- package/dist/tui/verify-bundle.js +0 -71
- package/dist/tui/verify-bundle.js.map +0 -1
- package/dist/tui/view-state.js +0 -192
- package/dist/tui/view-state.js.map +0 -1
- package/dist/workers/attempt-selector.js +0 -126
- package/dist/workers/attempt-selector.js.map +0 -1
- package/dist/workers/attempt-universe.js +0 -50
- package/dist/workers/attempt-universe.js.map +0 -1
- package/dist/workers/bootstrap-history.js +0 -67
- package/dist/workers/bootstrap-history.js.map +0 -1
- package/dist/workers/bootstrap-schema.js +0 -48
- package/dist/workers/bootstrap-schema.js.map +0 -1
- package/dist/workers/bootstrap.js +0 -257
- package/dist/workers/bootstrap.js.map +0 -1
- package/dist/workers/controller-administration.js +0 -80
- package/dist/workers/controller-administration.js.map +0 -1
- package/dist/workers/controller-cleanup.js +0 -16
- package/dist/workers/controller-cleanup.js.map +0 -1
- package/dist/workers/controller-configuration.js +0 -94
- package/dist/workers/controller-configuration.js.map +0 -1
- package/dist/workers/controller-events.js +0 -99
- package/dist/workers/controller-events.js.map +0 -1
- package/dist/workers/controller-jobs.js +0 -225
- package/dist/workers/controller-jobs.js.map +0 -1
- package/dist/workers/controller-launch.js +0 -87
- package/dist/workers/controller-launch.js.map +0 -1
- package/dist/workers/controller-owner.js +0 -65
- package/dist/workers/controller-owner.js.map +0 -1
- package/dist/workers/controller-recovery.js +0 -344
- package/dist/workers/controller-recovery.js.map +0 -1
- package/dist/workers/controller-revisions.js +0 -171
- package/dist/workers/controller-revisions.js.map +0 -1
- package/dist/workers/controller-schedule.js +0 -18
- package/dist/workers/controller-schedule.js.map +0 -1
- package/dist/workers/controller-scheduler.js +0 -282
- package/dist/workers/controller-scheduler.js.map +0 -1
- package/dist/workers/controller-scope.js +0 -59
- package/dist/workers/controller-scope.js.map +0 -1
- package/dist/workers/controller-state.js +0 -457
- package/dist/workers/controller-state.js.map +0 -1
- package/dist/workers/controller-verification.js +0 -41
- package/dist/workers/controller-verification.js.map +0 -1
- package/dist/workers/controller-view.js +0 -136
- package/dist/workers/controller-view.js.map +0 -1
- package/dist/workers/coordination.js +0 -165
- package/dist/workers/coordination.js.map +0 -1
- package/dist/workers/fan-out.js +0 -35
- package/dist/workers/fan-out.js.map +0 -1
- package/dist/workers/goal-candidates.js +0 -92
- package/dist/workers/goal-candidates.js.map +0 -1
- package/dist/workers/goal-outcome.js +0 -102
- package/dist/workers/goal-outcome.js.map +0 -1
- package/dist/workers/goal-repair.js +0 -103
- package/dist/workers/goal-repair.js.map +0 -1
- package/dist/workers/goal-selection.js +0 -81
- package/dist/workers/goal-selection.js.map +0 -1
- package/dist/workers/graph-record.js +0 -107
- package/dist/workers/graph-record.js.map +0 -1
- package/dist/workers/graph-revision.js +0 -286
- package/dist/workers/graph-revision.js.map +0 -1
- package/dist/workers/graph-tool.js +0 -65
- package/dist/workers/graph-tool.js.map +0 -1
- package/dist/workers/merge-queue.js +0 -325
- package/dist/workers/merge-queue.js.map +0 -1
- package/dist/workers/parallel-report.js +0 -87
- package/dist/workers/parallel-report.js.map +0 -1
- package/dist/workers/parallel-run.js +0 -665
- package/dist/workers/parallel-run.js.map +0 -1
- package/dist/workers/planner-run.js +0 -126
- package/dist/workers/planner-run.js.map +0 -1
- package/dist/workers/pool.js +0 -52
- package/dist/workers/pool.js.map +0 -1
- package/dist/workers/run-context.js +0 -204
- package/dist/workers/run-context.js.map +0 -1
- package/dist/workers/schedule.js +0 -64
- package/dist/workers/schedule.js.map +0 -1
- package/dist/workers/selection-record.js +0 -61
- package/dist/workers/selection-record.js.map +0 -1
- package/dist/workers/task-contract.js +0 -52
- package/dist/workers/task-contract.js.map +0 -1
- package/dist/workers/task-graph.js +0 -156
- package/dist/workers/task-graph.js.map +0 -1
- package/dist/workers/trail-tool.js +0 -27
- package/dist/workers/trail-tool.js.map +0 -1
- package/dist/workers/trail.js +0 -175
- package/dist/workers/trail.js.map +0 -1
- package/dist/workers/worktree.js +0 -225
- package/dist/workers/worktree.js.map +0 -1
- package/docs/README.md +0 -58
- package/docs/build-guide.md +0 -228
- package/docs/claims.md +0 -115
- package/docs/security-coverage.md +0 -652
package/CHANGELOG.md
CHANGED
|
@@ -1,528 +1,210 @@
|
|
|
1
|
-
# Changelog
|
|
1
|
+
# Changelog: swarm-orchestrator
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The agent. The verifier it consumes, `swarm-verify`, has its own changelog in
|
|
4
|
+
[moonrunnerkc/swarm-verify](https://github.com/moonrunnerkc/swarm-verify/blob/main/CHANGELOG.md).
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
and fixed at the root. The verdicts that change are named below. The minor version is for the
|
|
7
|
-
new attribution rule, `failure-identity-v3`, which new records carry; a record written under
|
|
8
|
-
`failure-identity-v2` or v1 re-derives under the rule that wrote it.
|
|
6
|
+
## 16.0.0 - 2026-11-01
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
`dist/index.d.ts` that `tsc --build` writes, as its own CI builds first, read a failed typecheck
|
|
15
|
-
on a clean tree. The build now runs first, then typecheck, lint, format and tests. **Verdict
|
|
16
|
-
change:** such a project reads its real typecheck and lint results instead of a failure caused
|
|
17
|
-
by the order.
|
|
18
|
-
- **A failed check records what its runner printed.** Node checks ran as `npm run --silent`,
|
|
19
|
-
and npm hands that log level to the script as `npm_config_loglevel=silent`. pnpm reads it, so a
|
|
20
|
-
failed `pnpm -r run typecheck` recorded an exit code with empty output. Checks now run as
|
|
21
|
-
`npm run --loglevel=error`, which keeps npm's notices out of the record and every tool's errors
|
|
22
|
-
in it; `swarm init` writes the same form. No verdict changes: the failure is still a failure,
|
|
23
|
-
now with its reason.
|
|
24
|
-
- **The base control sees nothing the patched tree's run produced.** The base was measured in
|
|
25
|
-
the same checkout after a forced checkout and a clean that keeps ignored files, so the base's
|
|
26
|
-
checks ran beside the patched tree's build output. depose's base typecheck passed on the `dist/`
|
|
27
|
-
the patched build wrote, and a workflow-only patch read **Regression: fail**; a module only the
|
|
28
|
-
patched build emitted stayed in `dist/` and failed the base's suite the same way, so a real
|
|
29
|
-
regression read as inherited. The ignored tree is now recorded once dependencies are prepared,
|
|
30
|
-
and every switch between the two sides removes what was added since; a prepared entry a run
|
|
31
|
-
changed refuses the comparison. Where the patch changes a lockfile, nothing installed is shared:
|
|
32
|
-
the base installs its own dependencies from its own lockfile. **Verdict changes:** such a
|
|
33
|
-
workflow-only patch reads its real regression result, and a patch whose build output or
|
|
34
|
-
dependency change broke the suite reads **Regression: fail** instead of an inherited failure.
|
|
35
|
-
- **A failure that differs only in a temporary directory's random name is inherited.** The base
|
|
36
|
-
and the patch failed the same three tests, and two causes differed only in pre-commit's random
|
|
37
|
-
repository directory (`...eponyx5xidu` against `...epoc90ac5y6`), so the failures could not be
|
|
38
|
-
matched and the regression read unmeasured. Causes and outputs are now compared with generated
|
|
39
|
-
names set aside: platform temporary roots, digit-bearing directory names under them, and a
|
|
40
|
-
generated name's tail where a reporter elided the rest. A file's own name, a path outside a
|
|
41
|
-
temporary root and every other word still count, so a changed message still reads as changed.
|
|
42
|
-
New records carry `failure-identity-v3`; a record written under v2 re-derives under v2. The
|
|
43
|
-
advice for an unmatched failure now says why it could not be matched, instead of saying the
|
|
44
|
-
output names no tests when it names them. **Verdict change:** such inherited failures read
|
|
45
|
-
inherited, so the regression dimension is measured instead of unmeasured.
|
|
46
|
-
- **A base control whose worker crashed on exit still shows a regression.** quantproof's base
|
|
47
|
-
ran its whole suite, failed no test, and exited 1 when a Vitest worker aborted on exit (a
|
|
48
|
-
better-sqlite3 assertion under Node 24), leaving one file's tests pending. Its report no longer
|
|
49
|
-
reconciled, so the two tests the patch broke, which that report names as passing, read
|
|
50
|
-
unmeasured. Where the base names no failure and was not killed by the harness, a test it names
|
|
51
|
-
passing once and the patch fails is now newly failing. A test the base never finished, a killed
|
|
52
|
-
or cut run, or a base that names a failure of its own stays unmeasured, and nothing is ever
|
|
53
|
-
inherited this way. **Verdict change:** such a run reads **Regression: fail** instead of
|
|
54
|
-
unmeasured.
|
|
55
|
-
- **The advice for a run that measured nothing says the right thing.** Where the install already
|
|
56
|
-
ran (the Action's `install: true` is passed as `--install`), a runner still missing was followed
|
|
57
|
-
by "pass --install"; it now says the environment does not carry that toolchain and names the
|
|
58
|
-
image setting for each route. Where it did not run, it names both routes' setting. A run that
|
|
59
|
-
planned no check printed "every check stood down ()"; it now says no check was planned and why,
|
|
60
|
-
and no longer suggests a `--command` flag the verifier does not have. No verdict changes.
|
|
61
|
-
|
|
62
|
-
## 1.2.0 - 2026-09-29
|
|
63
|
-
|
|
64
|
-
Fixes found by running the published 1.1.0 where a stranger would: fresh virtual machines, the
|
|
65
|
-
real pre-commit framework, hooks installed through `npx`, and a sixteen-repository rollout.
|
|
66
|
-
The verdicts that change are named below. The minor version is for two additive outputs: an `excludedEnvironments` field in the
|
|
67
|
-
`check` JSON report and an `excluded-environments-v1` record; no existing record field, exit code
|
|
68
|
-
or rule name changes meaning.
|
|
69
|
-
|
|
70
|
-
### Fixed
|
|
71
|
-
|
|
72
|
-
- **Build runs before tests.** Checks ran a Node project's `test` script before its `build`
|
|
73
|
-
script. A suite that reads build output (a Vite and Workers project whose test script reads the
|
|
74
|
-
built asset directory, found in a fresh-VM onboarding run) failed on a clean tree, where its own
|
|
75
|
-
CI, which builds first, passes. The build check now runs first. **Verdict change:** such a
|
|
76
|
-
project reads its real test result instead of a failure caused by the order.
|
|
77
|
-
- **The pre-commit framework hook works.** The distribution declared a `node` language hook. The
|
|
78
|
-
framework installs that from git, which npm 11 refuses (`EALLOWGIT`), blocking every commit,
|
|
79
|
-
good or bad; under npm 10 the install linked no `swarm-verify` binary, so whichever binary was
|
|
80
|
-
on `PATH` answered. The hook now runs `npx --yes swarm-verify@<version> pre-commit`. Exercised
|
|
81
|
-
against the framework on npm 11.12.1 and 10.9.8: a bad staged change is refused and a good one
|
|
82
|
-
committed. Use `rev: v1.2.0` or later.
|
|
83
|
-
- **Installed hooks survive npm clearing its npx cache.** Run as `npx swarm-verify hook install`
|
|
84
|
-
or `npx swarm-verify pre-commit install`, the installers wrote an absolute path inside the npx
|
|
85
|
-
cache. From there they now write the pinned `npx` invocation; a project or global install is
|
|
86
|
-
still called directly.
|
|
87
|
-
- **The Claude Code hook routes a piped test command.** `npm test 2>&1 | tail -5` and the same
|
|
88
|
-
through `head` or `grep` with plain arguments are routed through `check` with the filters kept;
|
|
89
|
-
any other pipeline stage or shell syntax is still left alone.
|
|
90
|
-
- **A bundle whose required challenge refused verifies.** The bundle's own verifier failed the
|
|
91
|
-
"independent goal bound" check of a `--challenges required` run that refused for
|
|
92
|
-
`challenges-unmet`, although the refusal was correct.
|
|
93
|
-
- **A formatter check runs only where the project declares that formatter.** Any `[tool.ruff]`
|
|
94
|
-
table used to add `ruff format --check .`, so projects that lint with ruff and format with black
|
|
95
|
-
or not at all read `fail` on a clean checkout (four real repositories, 4 to 151 files each). The
|
|
96
|
-
format check now runs `ruff format --check .` only for a `[tool.ruff.format]` table or a
|
|
97
|
-
`ruff-format` pre-commit hook, and `black --check .` for a `[tool.black]` table or a `black`
|
|
98
|
-
hook, unavailable with the tool named when the project's environment does not hold it. Verdict
|
|
99
|
-
change: a project with ruff lint configuration and no declared formatter no longer fails `check`
|
|
100
|
-
on formatting; its format check reads not run, with the reason.
|
|
101
|
-
- **mypy keeps the scope the project's mypy configuration names.** Only `pyproject.toml` and
|
|
102
|
-
`setup.cfg` `files` were read, so a project scoping mypy in `mypy.ini` (`files = src`) was
|
|
103
|
-
checked with `mypy .` and failed on 180 errors in tests it never type-checks. Targets are now
|
|
104
|
-
read from `files`, `packages` or `modules` in the one file mypy itself reads, in its documented
|
|
105
|
-
order (`mypy.ini`, `.mypy.ini`, `pyproject.toml` with `[tool.mypy]`, `setup.cfg` with
|
|
106
|
-
`[mypy]`). Verdict change: such a project's typecheck runs plain `mypy` and can pass; a project
|
|
107
|
-
whose `pyproject.toml` names targets while a `mypy.ini` without them takes precedence now runs
|
|
108
|
-
`mypy .` instead of a bare `mypy` that exited asking for a target.
|
|
109
|
-
- **An untracked virtual environment is not the change `check` measures.** A `.venv` made by
|
|
110
|
-
`python3 -m venv` before Python 3.13 carries no `.gitignore`, and in a project that does not
|
|
111
|
-
ignore `.venv/` its every file counted as changed: a clean tavern checkout read 81 changed files
|
|
112
|
-
and failed the placeholder, secret and diff-budget checks on the environment's own files. An
|
|
113
|
-
untracked directory whose root holds a `pyvenv.cfg` with a `home` key is now left out of the
|
|
114
|
-
change and named (`excluded` in the output, `excludedEnvironments` in the JSON report, an
|
|
115
|
-
`excluded-environments-v1` record in the evidence). A tracked or staged `pyvenv.cfg`, a
|
|
116
|
-
directory holding anything tracked, and every file a `ci` patch adds are still checked. Verdict
|
|
117
|
-
change: such a tree no longer fails `check` on its environment's files.
|
|
118
|
-
- **A dependency whose install script builds its native binding is measurable under
|
|
119
|
-
`--install`.** With scripts off, `better-sqlite3` never had its binding, so every test that
|
|
120
|
-
opened a database failed at base and head alike and the verdict read incomplete. The install
|
|
121
|
-
scripts `npm ci --ignore-scripts` skipped now run as a deferred phase with `npm rebuild`, where
|
|
122
|
-
the checks run, only after a probe shows a check-time command cannot connect, and with
|
|
123
|
-
node-gyp pointed at the running node's own headers so the build needs no download. Registry
|
|
124
|
-
code still never runs with network access: on the host, or wherever the probe cannot show the
|
|
125
|
-
network is off, the deferred scripts do not run and the install detail says why. A script
|
|
126
|
-
that tries the network there is refused and its output is reported.
|
|
127
|
-
- **A uv project in src layout is installed before its tests run.** `uv sync
|
|
128
|
-
--no-install-project` left the project itself out, so tests could not import the package or
|
|
129
|
-
call its console scripts. The project is now installed editable in the deferred offline phase:
|
|
130
|
-
the build backend's requirements are fetched as wheels without being run, the backend builds
|
|
131
|
-
the editable wheel offline, and uv installs it offline.
|
|
132
|
-
- **A script that calls pnpm finds the pnpm that installed.** Where the image has no pnpm and
|
|
133
|
-
the install fetched the declared version for its own command, a script such as
|
|
134
|
-
`pnpm -r run typecheck` read `pnpm: not found` and the check was unmeasured. The same version
|
|
135
|
-
is kept in the checkout's `node_modules` and put first on the checks' PATH through the built
|
|
136
|
-
environment.
|
|
137
|
-
- **The uv install no longer builds anything while the registry is reachable.** `uv sync
|
|
138
|
-
--no-install-project` still built every dependency that ships only a source archive (the
|
|
139
|
-
real `docopt==0.6.2` is one) and every workspace member, which runs that package's setup.py
|
|
140
|
-
or build backend with the network on: a fixture archive whose setup.py tries a connection got
|
|
141
|
-
through and wrote into the checkout. The install now runs with `--no-build` and leaves those
|
|
142
|
-
packages out by name; in the deferred offline phase a source archive's bytes are fetched and
|
|
143
|
-
checked against the lockfile's sha256 (`stage: source-archive`, nothing executed), unpacked
|
|
144
|
-
and built offline, and a workspace member or local directory is built offline from the
|
|
145
|
-
checkout, each step recorded. A setup.py that tries the network there is refused and its
|
|
146
|
-
output reported. A git source or an archive whose hash cannot be checked is left out of the
|
|
147
|
-
install with its reason named, so a check that needs it reads what it is rather than a pass.
|
|
148
|
-
|
|
149
|
-
Each deferred step is its own intent and completion on the `dependency-install` record, naming
|
|
150
|
-
its stage and its network (`none` with the probe's result for offline work), so a reader sees
|
|
151
|
-
which scripts ran offline and which fetch reached the registry. A deferred step that fails is
|
|
152
|
-
reported and the checks still run; one that changes source files fails setup.
|
|
153
|
-
|
|
154
|
-
### Documentation
|
|
155
|
-
|
|
156
|
-
- Every documented Action workflow shows `install: true`, without which a repository with
|
|
157
|
-
dependencies reads incomplete.
|
|
158
|
-
|
|
159
|
-
## 1.1.0 - 2026-09-29
|
|
160
|
-
|
|
161
|
-
Two false passes reported against the published 1.0.7, reproduced on it and fixed at the root,
|
|
162
|
-
and four more found while building real controls for every attack family. Some verdicts change
|
|
163
|
-
because of these repairs: each change is named below, a pass that was not shown now reads
|
|
164
|
-
incomplete or unmeasured rather than passed, and none of them turns an old refusal into a pass.
|
|
165
|
-
Additive record fields and one additive flag take the minor version; no field, exit code or rule
|
|
166
|
-
name changes meaning, and records written before a rule keep re-deriving under the rule that
|
|
167
|
-
wrote them.
|
|
168
|
-
|
|
169
|
-
### Fixed
|
|
170
|
-
|
|
171
|
-
- **A pass the candidate's own instrument reported is not a pass.** On 1.0.7 a
|
|
172
|
-
`vitest.config.mjs` that wrote a passing report to Vitest's `--outputFile` and exited before
|
|
173
|
-
any test ran read `result: pass` from `check`, and a `test` script replaced by an `echo` of a
|
|
174
|
-
passing summary read as a pass from `check` and as a regression pass from `ci`. The 1.0.6 fix
|
|
175
|
-
read a list of configuration file names; it could not see a configuration importing a changed
|
|
176
|
-
helper, a setup file named another way, the package scripts npm reads from the working tree,
|
|
177
|
-
or a runner substituted through the manifest, the lockfile or `node_modules/.bin`. Each
|
|
178
|
-
command check now observes its instrument (`instrument-identity-v1`): the scripts its command
|
|
179
|
-
reaches, each tool's configuration by the names the tool discovers, every file those import or
|
|
180
|
-
name, where the tool's packages come from, and the runner as installed, compared with the
|
|
181
|
-
reference commit before and after the run. A pass reported under an instrument the change
|
|
182
|
-
altered is withheld: `check` reads incomplete (exit 4) naming the altered files, and `ci`
|
|
183
|
-
reruns the check with the base's instrument restored, where only that reading can let the pass
|
|
184
|
-
stand. The observation is on the `gate-run` record and the offline verifier applies the same
|
|
185
|
-
rule. A registry release of a tool at another version is recorded and trusted; a tool from a
|
|
186
|
-
path, URL, git source or another package's name is not.
|
|
187
|
-
- **Two failing tests with the same title are two failures.** On 1.0.7 two node tests both named
|
|
188
|
-
`works`, the first already failing at the base, collapsed to one TAP identity, so a patch that
|
|
189
|
-
broke the second read as the first's inherited failure: `inheritedFromBase: true`,
|
|
190
|
-
`regression: pass`, and the Action's `regression-only`. Under `failure-identity-v2` a node
|
|
191
|
-
failure is named by its TAP location, depth and title, a Vitest test by file and full name, a
|
|
192
|
-
pytest test by node id; failures are counted, compared with their cause, and never inherited
|
|
193
|
-
from a run that was cancelled, truncated, cut short of its plan, contradicts its own counters,
|
|
194
|
-
or repeats an identity. Checks carry `attributionRule`; a record without it re-derives under
|
|
195
|
-
the title-only rule that wrote it.
|
|
196
|
-
- **A patch cannot pass `ci` by editing the test that would catch it.** A patch that broke the
|
|
197
|
-
code and marked the catching test `skip`, deleted its file or rewrote its assertion read as a
|
|
198
|
-
regression pass. Where a patch changes or deletes test files, the checks run again with the
|
|
199
|
-
base's versions of those files over the patch's source; a test the base passed that fails
|
|
200
|
-
there is named (`weakenedTests`) and the pass is withheld. A correct change that edits, renames
|
|
201
|
-
or adds tests still passes.
|
|
202
|
-
- **A node suite whose every test was skipped measured nothing.** It read as passed.
|
|
203
|
-
- **The pre-commit hook measured the staged commit against itself**, so the change read as empty
|
|
204
|
-
and a staged configuration was its own reference. It is now measured against `HEAD`.
|
|
205
|
-
- **A workspace pattern from a checked repository's package.json is no longer compiled into a
|
|
206
|
-
regular expression**; a crafted pattern made discovery take exponential time. Patterns keep
|
|
207
|
-
`*` and `**`; any other shape is refused with the fix named.
|
|
208
|
-
|
|
209
|
-
### Added
|
|
210
|
-
|
|
211
|
-
- `verdict --head <sha>` refuses a verdict made for another head than the one being decided.
|
|
212
|
-
- Quoted and space-bearing Git patch paths (`my file.js`, `café "x".js`, renames and copies
|
|
213
|
-
between them) are read instead of refused, with every unsafe path still refused after decoding.
|
|
214
|
-
- The ci report and the Markdown summary name the failing tests beside every attribution, so a
|
|
215
|
-
failure excused as inherited stays in view.
|
|
8
|
+
Swarm Orchestrator is the coding product again, and `swarm-verify` 2.0.0 is the verifier it
|
|
9
|
+
consumes at an exact version. A task runs on a local model found on this machine, every
|
|
10
|
+
requirement is checked against executed evidence, and the delivered patch comes with a signed
|
|
11
|
+
attestation an independent replay can rerun. 15.0.0 was tagged but never published to npm.
|
|
216
12
|
|
|
217
13
|
### Changed
|
|
218
14
|
|
|
219
|
-
- The
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
15
|
+
- **The verifier is a dependency, not a copy.** The embedded `src/verify`, its CLI modules and
|
|
16
|
+
`packages/swarm-verify` moved with their history to moonrunnerkc/swarm-verify (ADR 0015).
|
|
17
|
+
The agent depends on an exact `swarm-verify` version and calls its public API;
|
|
18
|
+
`swarm verify`, `swarm init` and `swarm ci` are the installed verifier's own commands. A
|
|
19
|
+
packed-consumer test installs both tarballs into a fresh prefix and runs a task through them.
|
|
20
|
+
- Verification artifacts of `swarm run` are written into the session directory, outside the
|
|
21
|
+
workspace, one directory per verification.
|
|
22
|
+
- `swarm verify` judges a declared test check test by test. It recognizes pytest, jest,
|
|
23
|
+
vitest, mocha and go test in the command, or in the `package.json` script the command names,
|
|
24
|
+
appends the runner's machine-readable report at base and with the change, and reads each
|
|
25
|
+
test as fixed, regressed, pre-existing, deleted or newly failing. A regression, a deletion
|
|
26
|
+
outside test files the change may edit, or a newly failing test fails the check; a test that
|
|
27
|
+
fails at both commits is reported and does not block. The verdict is measured whenever both
|
|
28
|
+
reports parse, whatever the command's exit code; it is unmeasured only when the command could
|
|
29
|
+
not run, its report could not be parsed, or no test in it passes with the change. A command
|
|
30
|
+
with no recognized runner is judged by exit code as before, and the verdict says so. See
|
|
31
|
+
[docs/verifying.md](https://github.com/moonrunnerkc/swarm-verify/blob/main/docs/verifying.md).
|
|
229
32
|
|
|
230
|
-
|
|
231
|
-
script adds flags the structured runner does not take (`vitest run --coverage
|
|
232
|
-
--reporter=verbose`) prints a coverage table that differs between the base and the patch
|
|
233
|
-
whenever the patch changes code, so 1.0.6 could never show its failures were inherited and left
|
|
234
|
-
the dimension unmeasured: cronproof#2, which 1.0.4 and 1.0.5 passed on an unproven inheritance.
|
|
235
|
-
Vitest names every failed test and every file that failed to load on a `FAIL` line beside its
|
|
236
|
-
`Test Files` summary; those lines are now the failure identities, in the verifier and in the
|
|
237
|
-
offline re-deriver alike. They name failures only, so they can prove an inheritance or a new
|
|
238
|
-
failure and never a pass. cronproof#2 now reads a proven inheritance and a regression pass.
|
|
239
|
-
|
|
240
|
-
## 1.0.6 - 2026-09-28
|
|
33
|
+
### Added
|
|
241
34
|
|
|
242
|
-
|
|
243
|
-
|
|
35
|
+
- **`swarm run` finds a local model itself.** With no `--model` or `--endpoint`, it lists
|
|
36
|
+
Ollama's installed models, estimates each one's memory at the context it would use (65,536
|
|
37
|
+
tokens, then 32,768), probes the ones that fit with a real turn of the shell protocol, and
|
|
38
|
+
chooses by the share of finished tasks each completed on this machine, recorded in
|
|
39
|
+
`~/.swarm/profiles/`; with too few recorded, the largest that fits. The reason is printed and
|
|
40
|
+
reported. `swarm doctor --models` shows the same survey; when nothing fits, it says what would.
|
|
41
|
+
- **A requirement record**: R1 is the user's task verbatim; the model may add R2 and on and map
|
|
42
|
+
tests, checks, structure and package versions to each, and only the verifier sets a status.
|
|
43
|
+
The report lists every requirement with its evidence, the changed files (deletions named), the
|
|
44
|
+
model and why it was chosen, and the run's tokens, turns, inference and wall time.
|
|
45
|
+
- **Repository instructions** (`AGENTS.md`, `CLAUDE.md`) load deterministically, digested into the
|
|
46
|
+
evidence, within a byte budget; they are input to the task, never to the security policy.
|
|
47
|
+
- `--authorize-behavior-change` lets a test the base passes change its expectation where the change
|
|
48
|
+
witnesses the new behavior, and the report says so. `--review` adds one fresh-context review of a
|
|
49
|
+
completed change; it is off by default. `--host --linked-dependencies` verifies on the host with
|
|
50
|
+
the workspace's installed dependencies, reported as not isolated and not reproducible.
|
|
244
51
|
|
|
245
52
|
### Fixed
|
|
246
53
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
54
|
+
Root causes found running real tasks on local models (docs/acceptance/2026-10-31/):
|
|
55
|
+
|
|
56
|
+
- **The agent pushed a branch to the repository its workspace came from**, in auto approval, and
|
|
57
|
+
cloned it to `/tmp` inside a `$(...)` command whose paths nothing checked. Pushes and package
|
|
58
|
+
publishes are refused in every approval mode; a command the shell reader cannot read is refused
|
|
59
|
+
under auto approval and asked of a person otherwise; `git stash`, which took a whole change out
|
|
60
|
+
of the delivered tree on a run's last step, is refused with how to see the base instead. The
|
|
61
|
+
reader now reads backslashes in double quotes and comments as the shell does.
|
|
62
|
+
- **A slow model's last turn ran past the deadline** and final verification never ran: no turn
|
|
63
|
+
starts that the time left cannot pay for, measured by the longest turn so far. The model is told
|
|
64
|
+
once when a fifth of its turns or of its time remains.
|
|
65
|
+
- **A Rapid-MLX reasoning parser moved the reply into `reasoning_content`**, which was dropped;
|
|
66
|
+
the reply is read from it where the content holds no reply form.
|
|
67
|
+
- Ollama connections dropped mid-turn are sent again and counted; a non-JSON reply stops the run
|
|
68
|
+
with what to do instead of crashing it; SIGTERM and SIGHUP finalize a run as Ctrl-C does.
|
|
69
|
+
- Compaction no longer tells the model to reread every file; a discovered model gets the largest
|
|
70
|
+
context it fits; the token budget defaults to what the steps could use at that context.
|
|
71
|
+
- A completion repeated on an unchanged tree is answered once with the open findings, and a
|
|
72
|
+
command repeated while findings are open points back at them.
|
|
73
|
+
- A blocked run stops with the verifier's reason; a run where no check ran says why; the summary
|
|
74
|
+
printed "0 s of inference" for an endpoint that reports none, and now says so.
|
|
75
|
+
- The managed worktree sits beside the repository, so relative dependencies resolve.
|
|
76
|
+
- **A run wrote into the user's repository through its git worktree.** A worktree shares the
|
|
77
|
+
repository's refs and config, so `git branch`, `git tag` and `git config` in auto approval
|
|
78
|
+
changed the user's own `.git`. The workspace is now a clone that reads the user's objects and
|
|
79
|
+
shares no refs, config or remote.
|
|
80
|
+
- **"The latest 9.x" was delivered as Stryker 10.1.1 and reported complete**, twice: the only
|
|
81
|
+
version read was the model's own claim. The version constraints a task's wording states are
|
|
82
|
+
read into its first requirement by code, no proposal can change them, and the verifier holds
|
|
83
|
+
the lockfile to them. The summary and report show each requirement as worded, as the model read
|
|
84
|
+
it, the versions it is held to, and its status.
|
|
85
|
+
- **The prompt grew with every turn**, the whole history resent on each: the
|
|
86
|
+
task and requirements stay at the front, recent turns are sent whole and older output as a
|
|
87
|
+
bounded excerpt with a reference to the whole, kept readable under `.swarm/outputs/`, and old
|
|
88
|
+
exploration is compacted without a model call only under measured pressure. `report.json`
|
|
89
|
+
records each turn's tokens.
|
|
90
|
+
- **Path-shaped text in a quoted script was refused as a path** (a sed address, test source
|
|
91
|
+
written through printf): only the words a program opens are offered to the path check, sed and
|
|
92
|
+
awk scripts are read for the files they open, and a redirect target is checked wherever it is
|
|
93
|
+
written. A path after an option's equals sign (`--git-dir=/elsewhere`) is checked; it was not.
|
|
94
|
+
- **A copied `.venv` ran the user's unchanged source.** The workspace's environment is built from
|
|
95
|
+
`uv.lock` (or the declared setup command, or, with no lock, `uv lock` first as the verifier
|
|
96
|
+
does) and the report names its interpreter.
|
|
97
|
+
|
|
98
|
+
### Known limits
|
|
99
|
+
|
|
100
|
+
- The cross-module refactor acceptance task (tracemantle: move two modules into a new package with
|
|
101
|
+
shims, and move their tests) has no complete run on the local models tried. The best attempt
|
|
102
|
+
broke the module it moved and the verifier found the regression; a narrower attempt changed
|
|
103
|
+
nothing. docs/acceptance/2026-10-31/t6-comparison/ holds the task, its base and a fixed
|
|
104
|
+
requirement record, so another agent's patch can be judged by the same verifier.
|
|
105
|
+
|
|
106
|
+
### Migration
|
|
107
|
+
|
|
108
|
+
- `swarm run` no longer needs `--model` and `--endpoint`; they still name a model and an
|
|
109
|
+
OpenAI-compatible endpoint where given. `--context` sets the context for a named model.
|
|
110
|
+
- Commands that were run in auto approval and contained `$(...)`, backticks, subshells, brace
|
|
111
|
+
groups or `sh -c` are refused: write the inner command first and its result literally.
|
|
112
|
+
- `swarm verify`, `swarm init` and `swarm ci` are the installed `swarm-verify` 2.0.0 commands; their
|
|
113
|
+
states, exit codes and predicate are described in swarm-verify's docs/migration-2.md.
|
|
114
|
+
- The report is `swarm-orchestrator.report/v1` in `report.json` beside `report.md`, in the
|
|
115
|
+
session directory.
|
|
116
|
+
|
|
117
|
+
## 15.0.0 - 2026-10-29
|
|
118
|
+
|
|
119
|
+
The verifier-first rebuild ([ADR 0014](docs/adr/0014-verifier-first-rebuild.md)). The unreleased
|
|
120
|
+
14.5.0 work (the adaptive controller, planned checks, repair and review stages) is superseded and
|
|
121
|
+
remains in the history of pull request #101.
|
|
282
122
|
|
|
283
123
|
### Changed
|
|
284
124
|
|
|
285
|
-
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
after the runner, left a failed check reading "978 passed, 978 total". The detail now quotes
|
|
309
|
-
the runner's test-file line and names the files it marked FAIL, or says the exit came from
|
|
310
|
-
outside the counted tests. Found on commander.js#1671 in Comparison B.
|
|
311
|
-
|
|
312
|
-
## 1.0.4 - 2026-09-28
|
|
125
|
+
- `swarm run "<task>"` is a single-bash-tool loop: one command per turn through the chokepoint
|
|
126
|
+
and path policy, the task, `git status --short` and the last verifier failure verbatim at the
|
|
127
|
+
top of every turn, and the verifier as the only judge of completion. It stops on a verified
|
|
128
|
+
tree, the step budget or the token budget, and says which. Every turn sends `max_tokens`
|
|
129
|
+
(`--turn-tokens`, 16,384 by default). A permanent endpoint failure (a refused connection, a
|
|
130
|
+
4xx other than 429, a third 5xx in a row) stops the run as `model-error`; the verifier still
|
|
131
|
+
judges the tree and the outcome block prints the reason and the verdict, and a `mutant` line
|
|
132
|
+
when the mutant of a changed line survived.
|
|
133
|
+
- `swarm verify` and `swarm ci` rerun the declared checks on a change (working tree, ref range
|
|
134
|
+
or patch) in a clean checkout of the base, refuse protected paths changed together with
|
|
135
|
+
source, run held-out checks sealed with `swarm init --seal`, measure changed-line coverage
|
|
136
|
+
and one mutation, and write an in-toto Statement in a DSSE envelope inside a Sigstore bundle.
|
|
137
|
+
`packages/swarm-verify/verify.mjs` checks it with no dependencies; so does
|
|
138
|
+
`cosign verify-blob-attestation`.
|
|
139
|
+
- Every check runs at the base commit first: one that fails there and still fails is a
|
|
140
|
+
`pre-existing-failure` and leaves the verdict unmeasured, one that passes there and fails with
|
|
141
|
+
the change is a regression. Held-out checks run with a judge loaded before any project module
|
|
142
|
+
that fails them when the code under test patches `node:assert`, `node:test`, `unittest`,
|
|
143
|
+
pytest's hooks, the builtins they compare with, or the project's own test helpers.
|
|
144
|
+
[docs/verifying.md](docs/verifying.md) has the details and the limits.
|
|
145
|
+
- Checks run with `PYTHONDONTWRITEBYTECODE=1`: the base run, the change and the mutant rewrite
|
|
146
|
+
one file within a second, often at the same size, and Python would otherwise run the bytecode
|
|
147
|
+
cached from the previous version.
|
|
313
148
|
|
|
314
|
-
|
|
315
|
-
Action headline that contradicted its own regression dimension, and one more install gap.
|
|
316
|
-
|
|
317
|
-
### Changed
|
|
149
|
+
### Added
|
|
318
150
|
|
|
319
|
-
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
is inherited. A failure the base did not have still refuses. The verdict document's format is
|
|
324
|
-
unchanged.
|
|
151
|
+
- The evaluation: Harbor runs of mini-SWE-agent, OpenCode and `swarm run` on frozen SWE-bench
|
|
152
|
+
Verified and Terminal-Bench 2.0 lists, a committed results store, a nightly workflow for a
|
|
153
|
+
self-hosted runner ([docs/eval.md](docs/eval.md)), and the tamper evaluation of the verifier.
|
|
154
|
+
[docs/results.md](docs/results.md) is the only page with measured numbers.
|
|
325
155
|
|
|
326
|
-
###
|
|
156
|
+
### Removed
|
|
327
157
|
|
|
328
|
-
-
|
|
329
|
-
|
|
330
|
-
the
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
and that is reported as a failed install.
|
|
158
|
+
- The parallel worker layer, model selection and calibration, the research evaluation code, the
|
|
159
|
+
terminal interface, the old gates engine, the custom evidence bundle format and its verifier,
|
|
160
|
+
the container isolation backend, and every subcommand except `verify`, `init`, `ci` and
|
|
161
|
+
`doctor`.
|
|
162
|
+
- The research evidence, campaigns, red-team passes, fuzz targets and research scripts, moved to
|
|
163
|
+
the archive named in [docs/evidence/README.md](docs/evidence/README.md).
|
|
335
164
|
|
|
336
|
-
##
|
|
165
|
+
## 14.4.0 - 2026-10-08
|
|
337
166
|
|
|
338
|
-
|
|
339
|
-
|
|
167
|
+
Swarm Orchestrator is the product of this repository again. 14.3.0's README and repository
|
|
168
|
+
description presented Swarm Verify as the product and the coding agent as an optional beta mode
|
|
169
|
+
of it; this release reverses that ([ADR 0013](docs/adr/0013-two-products-one-verifier.md)) and
|
|
170
|
+
gives the verifier its own product home. No runtime behaviour of the agent changed; the verifier
|
|
171
|
+
carried is `swarm-verify` 1.3.1, whose engine is 1.3.0's.
|
|
340
172
|
|
|
341
173
|
### Changed
|
|
342
174
|
|
|
343
|
-
- **
|
|
344
|
-
|
|
345
|
-
is
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
## 1.0.2 - 2026-09-28
|
|
360
|
-
|
|
361
|
-
Two more findings from the study's run through 1.0.1, fixed at the root.
|
|
362
|
-
|
|
363
|
-
### Fixed
|
|
364
|
-
|
|
365
|
-
- **The container's scratch space is a directory on the host, not a tmpfs.** A tmpfs is
|
|
366
|
-
charged to the container's memory limit, so with the cap at 2 GB every large lockfile
|
|
367
|
-
install was killed (exit 137) once its cache passed the cap; sizing the tmpfs in 1.0.1 could
|
|
368
|
-
not help. Each run now mounts its own directory under the person's `~/.swarm/scratch` at
|
|
369
|
-
`/tmp`, executable, removed when the run ends, and removed by runtime repair for a run that
|
|
370
|
-
died between creating and removing it.
|
|
371
|
-
- **A base commit that exists but cannot be checked out is reported with git's own line.**
|
|
372
|
-
Two paths differing only in case, on a case-insensitive filesystem, leave the fresh checkout
|
|
373
|
-
dirty and git refuses to switch; the refusal read as "the base commit is not in the checkout",
|
|
374
|
-
which was false. The last line git printed is now the reason.
|
|
375
|
-
|
|
376
|
-
## 1.0.1 - 2026-09-28
|
|
377
|
-
|
|
378
|
-
Four gaps the AI-authored pull request study exposed on its first run through the stable
|
|
379
|
-
release, each on real repositories, each fixed at the root.
|
|
380
|
-
|
|
381
|
-
### Fixed
|
|
382
|
-
|
|
383
|
-
- **The container's scratch space holds a real install.** HOME and TMPDIR inside the container
|
|
384
|
-
are the `/tmp` tmpfs, so npm's and uv's caches live there, and its 256 MB left a lockfile
|
|
385
|
-
with a native wheel or a large dependency tree failing with "no space left on device". It
|
|
386
|
-
is now 4 GB, of which only what is written is used.
|
|
387
|
-
- **A pnpm lockfile with no `packageManager` pin installs.** The image carries no pnpm; the
|
|
388
|
-
lockfile's own format now names the major that reads it (9.0: pnpm 10, 6.0: pnpm 8, 5.x:
|
|
389
|
-
pnpm 7), that major's latest is fetched through npm for the install command, and the
|
|
390
|
-
command records which.
|
|
391
|
-
- **A configured Python tool the environment does not hold reads as a check that measured
|
|
392
|
-
nothing.** `ci` assembles its checks before the install, so the environment could not be
|
|
393
|
-
read then; when the interpreter itself refuses to start a module, exits 1, and prints only
|
|
394
|
-
its one-line "No module named", the gate is not applicable with the module named. A test's
|
|
395
|
-
own output beside those words is a test's words, and the exit code decides as before.
|
|
396
|
-
- **pytest absent from the environment is said as such.** The runner script says so and exits
|
|
397
|
-
127, and the reading is "measured nothing" with the reason, not "malformed runner output".
|
|
398
|
-
|
|
399
|
-
## 1.0.0 - 2026-09-28
|
|
400
|
-
|
|
401
|
-
The first stable release of `swarm-verify`. Everything below shipped through nine prerelease
|
|
402
|
-
candidates, each rolled out across sixteen owned repositories and three README-only onboarding
|
|
403
|
-
simulations, with every defect they found fixed at its root and named here.
|
|
175
|
+
- **The README, package description and repository description describe the coding agent**:
|
|
176
|
+
what it does, why it is not an ordinary coding agent, install, one task, what verification
|
|
177
|
+
happens, what evidence is produced, what it does not prove, and how Swarm Verify relates to
|
|
178
|
+
it. `docs/agent.md` is the long form of that page rather than a beta notice.
|
|
179
|
+
- **The changelog is split.** This file holds the agent's releases; the verifier's 1.x entries
|
|
180
|
+
moved whole to `packages/swarm-verify/CHANGELOG.md`, which ships in that package.
|
|
181
|
+
- **The Action manifest lives beside the package it ships**, at `packages/swarm-verify/action.yml`,
|
|
182
|
+
so this repository no longer presents itself as a GitHub Action; the control workflow runs it
|
|
183
|
+
from there. The Action is branded Swarm Verify.
|
|
184
|
+
- **The verifier's product repository is generated whole**: README, changelog, an Action
|
|
185
|
+
reference rendered from the manifest, the example workflows, the hook manifest, the license
|
|
186
|
+
and the source record, by `scripts/build-action-distribution.mjs`, which refuses a README that
|
|
187
|
+
links to a file it does not write.
|
|
188
|
+
- Issue forms: an agent bug form beside the verifier's; the setup form takes either version.
|
|
189
|
+
`SUPPORT.md` and `SECURITY.md` name both products.
|
|
404
190
|
|
|
405
191
|
### Added
|
|
406
192
|
|
|
407
|
-
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
-
|
|
414
|
-
|
|
415
|
-
the repository suite, sealed fixtures the contract declares, and names missing obligations.
|
|
416
|
-
Records `challenge-plan-v1`, `challenge-run-v1` and `challenge-verdict-v1`; the bundle's own
|
|
417
|
-
verifier re-derives every verdict independently. `required` refuses with `challenges-unmet`.
|
|
418
|
-
- **Python changes are challenged too**: the mutation set reads Python's statement forms
|
|
419
|
-
(comparison inversion, condition negation, operand swap, `return None`, `= None`), masks
|
|
420
|
-
literals and comments, sets test files aside, and every Python mutant is shown to parse with
|
|
421
|
-
Python's own parser before it runs.
|
|
422
|
-
- **The GitHub Action as a client of the installed verifier**: `swarm-verify action
|
|
423
|
-
verify|comment|retain`. The verdict document is signed as a GitHub artifact attestation, the
|
|
424
|
-
pull request comment is one per PR, updated in place, bound to the head, escaped and
|
|
425
|
-
mention-free, and a delayed run for an older head posts nothing.
|
|
426
|
-
- **Coverage on Node 22.8 and newer**: the coverage arm names process isolation in the spelling
|
|
427
|
-
the running Node takes; the floor moves from 24 to 22.8.
|
|
428
|
-
- A verifier platform matrix workflow installs the packed package on Linux, macOS and Windows
|
|
429
|
-
under Node 22.0.0, 22 and 24.
|
|
430
|
-
- **`swarm-verify verdict`** binds a signed verdict document to the report, summary and bundle
|
|
431
|
-
beside it and hands the signer question to `gh attestation verify`.
|
|
432
|
-
- **Three integrations, each a client of the installed verifier**: a Claude Code hook that
|
|
433
|
-
rewrites the agent's recognised test command to `swarm-verify check` (`hook install`,
|
|
434
|
-
`uninstall`, `run`); a local MCP server over stdio with three bounded tools (`mcp`); and a
|
|
435
|
-
pre-commit hook that verifies the staged tree in a detached worktree without touching the
|
|
436
|
-
working tree (`pre-commit`, `pre-commit install`, `uninstall`). Documented in
|
|
437
|
-
`docs/integrations.md`, each with real positive and negative runs in its tests.
|
|
438
|
-
|
|
439
|
-
- An authorized lockfile install inside a container reaches the registry for that one
|
|
440
|
-
command, with lifecycle scripts off, recorded with `network: registry`; the checks that
|
|
441
|
-
follow run with the network off. Where the image carries no pnpm and the manifest pins
|
|
442
|
-
`packageManager: pnpm@X`, that exact pnpm is fetched through npm for the install command.
|
|
443
|
-
The install record is written whether or not a goal contract was supplied.
|
|
444
|
-
- The twelve attack families of the verifier-first assignment are bound to executed controls
|
|
445
|
-
in `docs/verifier-first/attack-controls.md`, with four new ones: an outside-package change
|
|
446
|
-
refused by name, a mismatched goal tree refused before any record, an unfinished challenge
|
|
447
|
-
intent refusing the next challenge, and a revised contract deriving a fresh verdict.
|
|
448
|
-
- The stable 1.x contract is written down in `docs/verifier-first/contract.md`.
|
|
449
|
-
|
|
450
|
-
### Fixed
|
|
451
|
-
|
|
452
|
-
- **A container image that is not on the machine is pulled once, before the first container.**
|
|
453
|
-
`docker create` against an absent image pulled it inside the command's own deadline, and a
|
|
454
|
-
probe's deadline is seconds, so on a fresh machine (a GitHub runner with the Action) every
|
|
455
|
-
container timed out while the image downloaded and the run stopped as "cleanup could not be
|
|
456
|
-
confirmed" without saying why. The backend now inspects the image and pulls it with its own
|
|
457
|
-
ten-minute allowance before the command's deadline starts (a pull inside the deadline left a
|
|
458
|
-
containment probe no time at all and the run refused as "isolation unknown"), names a pull
|
|
459
|
-
that fails, and a creation that timed out or did not start is named in the cleanup message
|
|
460
|
-
with the runtime's last line. A probe that timed out is named as such rather than as one
|
|
461
|
-
that "could not start (null)".
|
|
462
|
-
- **The vitest runner reports to a file and prints only that file.** Four of sixteen rollout
|
|
463
|
-
repositories had their whole suite read as "malformed runner output" because their tests
|
|
464
|
-
logged, or their test script printed its own verdicts, into the stdout the JSON reporter
|
|
465
|
-
used. Stdout is muted while the suite runs; the report's bytes are all that is printed,
|
|
466
|
-
whole: the first cut of this wrote at exit and lost everything past the pipe's 64 KiB
|
|
467
|
-
buffer, so every large suite read as malformed instead.
|
|
468
|
-
- **Manifest scripts run through npm whichever manager installed the lockfile.** pnpm is
|
|
469
|
-
fetched for the install command alone and is not in a trusted image, so every pnpm
|
|
470
|
-
project's typecheck, lint and build read "the command is not installed" in a container. A
|
|
471
|
-
script that itself calls pnpm still needs pnpm and says so. Both the `check` plan and the
|
|
472
|
-
`ci` gate set compose the scripts this way.
|
|
473
|
-
- **When every check stood down, the advice lists why each did**, and distinguishes a runner
|
|
474
|
-
that is not installed (install the dependencies) from a toolchain the verifier does not
|
|
475
|
-
drive (unmeasured, not a pass) and from a manifest that declares no check.
|
|
476
|
-
- **Containment probes are shell scripts.** An image built for a Python project carries no
|
|
477
|
-
node, so every probe "could not start" and the run refused with isolation unknown. The read
|
|
478
|
-
and write probes use `cat` and `printf`; the network probe attempts the connection with node,
|
|
479
|
-
else python3, else bash's `/dev/tcp`, and an image with none of them is recorded as
|
|
480
|
-
unmeasured, never as contained.
|
|
481
|
-
- **The verdict's advice names what happened.** A failed or unmeasured required check was
|
|
482
|
-
advised as "the repository's own suite passed"; it now names the check that failed on the
|
|
483
|
-
patch and passed at the base, or the required check that measured nothing.
|
|
484
|
-
- **A configured Python tool the environment does not hold is an unavailable check, not a
|
|
485
|
-
failed one.** tavern configures mypy, its synced environment holds none, and `python -m
|
|
486
|
-
mypy` exited 1 with "No module named mypy", read as the typecheck failing on a clean
|
|
487
|
-
checkout. Presence is read from `.venv`'s site-packages without running anything; the
|
|
488
|
-
check then says which tool to add and sync. Without a `.venv` nothing is claimed.
|
|
489
|
-
- **A failed check shows the last lines the command printed**, in `check`'s report and its
|
|
490
|
-
JSON (`output`), so "the command exited 1" comes with what a terminal would have shown.
|
|
491
|
-
- **Two messages a stranger met on a first run say what they mean.** The file-set check in a
|
|
492
|
-
run with no declared file set no longer speaks of "no planner" and "no agent"; it says no
|
|
493
|
-
file set was declared and what changed. The per-run signing key notice says what a per-run
|
|
494
|
-
key means and that it is ordinary on a headless machine.
|
|
495
|
-
- **A vitest file that repeats a test title no longer makes the whole suite unmeasured.**
|
|
496
|
-
The second occurrence is named by its position; the runner accepted the title and so does
|
|
497
|
-
the reading. Found on depose, where one repeated `it` hid 383 tests.
|
|
498
|
-
- **The tests reading says what its counts are and are not** in words a first-time reader
|
|
499
|
-
can follow, instead of "ratchet counts" and "base-control attribution".
|
|
500
|
-
- **An image pull is attempted three times** before the run stops, since a hosted runner saw
|
|
501
|
-
Docker Hub reset the connection once; the last failure's own line is what the error names.
|
|
502
|
-
- **A Python checkout whose ignored caches exist no longer fails to stage.** The scratch
|
|
503
|
-
index named `__pycache__`, `.pytest_cache`, `.mypy_cache` and `.ruff_cache` as exclude
|
|
504
|
-
pathspecs on `git add -A`, which git refuses with "paths are ignored" (exit 1) as soon as one
|
|
505
|
-
of them exists and is gitignored, the ordinary state after one test run; the verifier then
|
|
506
|
-
told the reader the repository "is not a git working tree". Everything is staged and the
|
|
507
|
-
caches are removed from the index afterwards. Found by the README-only python simulation.
|
|
508
|
-
- **A git failure inside a repository quotes git's own last line** rather than the command
|
|
509
|
-
line, and no longer sends the reader to `git init` unless git said the directory is not a
|
|
510
|
-
repository.
|
|
511
|
-
- **A uv project without a synced environment is a missing prerequisite, not four failed
|
|
512
|
-
checks.** `uv run --no-sync` exits at once without a `.venv`; `check` now names
|
|
513
|
-
`uv sync --locked` as the remedy and exits 4, as it does for a missing `node_modules`.
|
|
514
|
-
|
|
515
|
-
### Changed
|
|
516
|
-
|
|
517
|
-
- Both binaries exit 2 for a command line they cannot read, as the exit code taxonomy said.
|
|
518
|
-
- The container's scratch mount is executable, so a fetched package manager can run from it.
|
|
519
|
-
- The README leads with the verifier; the coding agent's page is `docs/agent.md`.
|
|
193
|
+
- `src/product-boundary.test.ts` holds each product's package metadata, binary, dependencies,
|
|
194
|
+
changelog and README front matter to the product it names, and keeps the inverted phrasing
|
|
195
|
+
out of the documents a reader is pointed at.
|
|
196
|
+
- The standalone verifier's import-boundary test now also refuses any bare import outside Node
|
|
197
|
+
and the two packages `swarm-verify` declares, so a model SDK cannot enter the published
|
|
198
|
+
verifier through a module the build allows.
|
|
199
|
+
- `scripts/build-action-distribution.test.mjs` holds the generated distribution to the source
|
|
200
|
+
manifest, the package README and the examples.
|
|
520
201
|
|
|
521
202
|
## 14.3.0 - 2026-09-30
|
|
522
203
|
|
|
523
204
|
The coding agent, `swarm-orchestrator`, released for the first time since the verifier-first
|
|
524
205
|
work began. The `swarm` binary shares its verifier with `swarm-verify`, so every change published
|
|
525
|
-
for `swarm-verify` 1.0.0 through 1.3.0
|
|
206
|
+
for `swarm-verify` 1.0.0 through 1.3.0 (now in [swarm-verify's changelog](https://github.com/moonrunnerkc/swarm-verify/blob/main/CHANGELOG.md))
|
|
207
|
+
is in this release too. What follows is what the
|
|
526
208
|
agent itself gained; the verifier stays the primary product and the agent its advanced mode.
|
|
527
209
|
|
|
528
210
|
### Added
|
|
@@ -729,10 +411,10 @@ agent itself gained; the verifier stays the primary product and the agent its ad
|
|
|
729
411
|
difference 0.0 points, 95% CI [-4.0, +4.0]. Three repairs changed bytes, none narrowed the
|
|
730
412
|
implementation, two left scratch files behind. Six of the nine refusals named a tsd type-test
|
|
731
413
|
file no runner executes. The protocol, rows, patches and a report that re-derives from the rows
|
|
732
|
-
are in [
|
|
414
|
+
are in the archive's [docs/evidence/2026-09-17/reach-pressure-experiment/](https://github.com/moonrunnerkc/swarm-orchestrator-archive/blob/main/docs/evidence/2026-09-17/reach-pressure-experiment/report.md).
|
|
733
415
|
Two earlier generations were stopped on instrument defects and are kept beside it. The instrument
|
|
734
416
|
defects it exposed, and what closed each without touching a row, are in
|
|
735
|
-
[
|
|
417
|
+
the archive's [docs/evidence/2026-09-18/reach-pressure-hardening/](https://github.com/moonrunnerkc/swarm-orchestrator-archive/blob/main/docs/evidence/2026-09-18/reach-pressure-hardening/README.md).
|
|
736
418
|
|
|
737
419
|
### Changed
|
|
738
420
|
|
|
@@ -1286,290 +968,12 @@ agent itself gained; the verifier stays the primary product and the agent its ad
|
|
|
1286
968
|
reason, at the line that carries the finding. Under the workflow's own command it now reports
|
|
1287
969
|
zero and exits 0, so the weekly issue means something arrived that nobody has looked at.
|
|
1288
970
|
|
|
1289
|
-
##
|
|
1290
|
-
|
|
1291
|
-
### Added
|
|
1292
|
-
|
|
1293
|
-
- **A line that says the run is alive, and what it is doing.** A spinner that turns, the current
|
|
1294
|
-
activity, how long it has been going, and while the model is talking, the tail of what it is
|
|
1295
|
-
saying. Nothing on the screen moved before this: the status said `thinking (step 3)` and
|
|
1296
|
-
stayed there, and the only thing that changed was a seconds counter the layout hides below 80
|
|
1297
|
-
columns or 12 rows, so a run taking a minute looked exactly like one that had hung.
|
|
1298
|
-
- **The model's words as they arrive.** The stream was already being drained to time the first
|
|
1299
|
-
token and every piece of text was discarded. It is handed on now. One line of it: the whole
|
|
1300
|
-
response lands in the action stream when it arrives and in the ledger for ever, and repeating
|
|
1301
|
-
it as it streams would be the same text three times.
|
|
1302
|
-
- **The tool that is running, named while it runs.** Between a tool starting and finishing
|
|
1303
|
-
nothing was emitted, which for a shell command is a screen sitting still for a minute and a
|
|
1304
|
-
half. A tool that finishes inside a frame still draws nothing, which is the right amount.
|
|
1305
|
-
|
|
1306
|
-
## 13.1.8
|
|
1307
|
-
|
|
1308
|
-
### Added
|
|
1309
|
-
|
|
1310
|
-
- **`swarm doctor`, and `swarm doctor --fix`.** What owns the `swarm` command, and repairing it
|
|
1311
|
-
when the answer is wrong. The same failure has happened on two machines months apart and
|
|
1312
|
-
presented as something else both times: an `ENOTDIR` during a global install on one, and on
|
|
1313
|
-
the other a `swarm` with no `select` command. Both were a development checkout linked into the
|
|
1314
|
-
global prefix with `npm link`, which owns the command until it is removed and which npm cannot
|
|
1315
|
-
install over. Nothing here can intercept that at install time, because npm fails before any
|
|
1316
|
-
script of ours would run, so this answers the question afterwards instead. It reports the link
|
|
1317
|
-
and what it shadows, every `swarm` on PATH since the first one wins silently, an executable
|
|
1318
|
-
whose package a failed install removed, and whether the registry is ahead of what is running.
|
|
1319
|
-
|
|
1320
|
-
### Fixed
|
|
1321
|
-
|
|
1322
|
-
- **A bare word that is nearly a subcommand is refused.** A bare word is the task, which is what
|
|
1323
|
-
makes `swarm fix the parser` work. The cost is that a subcommand a build does not have becomes
|
|
1324
|
-
a task: running `swarm doctor` against a version predating it started an agent on the
|
|
1325
|
-
repository, declared its uncommitted files and wrote a bundle. Nothing was damaged and nothing
|
|
1326
|
-
about it looked wrong. One word that is nearly a command is now refused with the nearest match
|
|
1327
|
-
named, and a task of more than one word is untouched.
|
|
1328
|
-
|
|
1329
|
-
## 13.1.7
|
|
1330
|
-
|
|
1331
|
-
Found by driving the session through a real terminal rather than a pipe.
|
|
1332
|
-
|
|
1333
|
-
### Fixed
|
|
1334
|
-
|
|
1335
|
-
- **Enter did not submit at the prompt.** A terminal hands over what it buffered in one read, so
|
|
1336
|
-
the newline arrived inside a longer chunk with no key flag set, and the whole chunk including
|
|
1337
|
-
the control character was typed into the task being composed. A pasted task arrives the same
|
|
1338
|
-
way, so everything before the newline is now typed and the newline still means run it.
|
|
1339
|
-
- **The screen still showed a plain `DONE` for a run that changed nothing.** The gate strip
|
|
1340
|
-
cannot tell passes over work from passes over an empty diff, and a model answering in prose
|
|
1341
|
-
stops for the honest reason `completed` having done nothing. It now reads `DONE, but no files
|
|
1342
|
-
changed`. The plain path already said this above its gate table.
|
|
1343
|
-
|
|
1344
|
-
## 13.1.6
|
|
1345
|
-
|
|
1346
|
-
A session, and the evidence a person reads.
|
|
1347
|
-
|
|
1348
|
-
### Added
|
|
1349
|
-
|
|
1350
|
-
- **`swarm` with no task opens a session.** One process, one ledger, tasks typed one after
|
|
1351
|
-
another, each continuing the conversation the last one left. The screen keeps what each
|
|
1352
|
-
finished turn came to, so it does not forget between them. `swarm "task"` is unchanged.
|
|
1353
|
-
- **Each turn is measured on its own.** A turn ends by recording where it left the tree, so the
|
|
1354
|
-
next turn's gates see that turn's changes and not the ones before it. Without it the second
|
|
1355
|
-
turn is charged with the first's diff and the file-set check calls the first turn's files
|
|
1356
|
-
out-of-set.
|
|
1357
|
-
- **The review page says what happened.** The header carries the tasks, the model, whether the
|
|
1358
|
-
loop completed, how long it took and what it cost, above the identifiers it used to open with.
|
|
1359
|
-
- **The gate table is in the bundle.** It was printed to a terminal and never written into the
|
|
1360
|
-
page, where the gates had been indistinguishable cards among the model calls.
|
|
1361
|
-
- **The change itself is recorded and shown.** Nothing recorded a patch, so the question the
|
|
1362
|
-
page exists to answer, what did this do to my code, meant leaving the evidence and running git.
|
|
1363
|
-
|
|
1364
|
-
### Fixed
|
|
1365
|
-
|
|
1366
|
-
- **A run that changed nothing reported `DONE`.** The gates run after the loop and each gate
|
|
1367
|
-
event rewrote the status, so the last gate to pass over an empty diff became the last word on
|
|
1368
|
-
a run that built nothing. The stop reason is now its own field, and a cycle that measured no
|
|
1369
|
-
changed files says so before the table.
|
|
1370
|
-
- **A second turn measured its own edits as deletions.** `git diff <base>` from the person's
|
|
1371
|
-
index calls a file that is in the base and untracked here deleted. Changes are now measured
|
|
1372
|
-
through a scratch index, which makes the comparison tree to tree and counts a file the agent
|
|
1373
|
-
just wrote as added.
|
|
1374
|
-
- **`q` did not leave the view.** It set a flag that three things read after the fact; nothing
|
|
1375
|
-
unmounted the screen, which kept painting. It now comes down and the run reports the way it
|
|
1376
|
-
does off a terminal.
|
|
1377
|
-
- **A refused bundle named nothing.** The failing check was read off stderr and the verifier
|
|
1378
|
-
reports through stdout, so every real refusal said "no detail given" at the one moment the
|
|
1379
|
-
panel exists for.
|
|
1380
|
-
- Six record types rendered as their own bare name on the page, including the one holding what
|
|
1381
|
-
the run cost.
|
|
1382
|
-
|
|
1383
|
-
## 13.1.5
|
|
1384
|
-
|
|
1385
|
-
Three fixes, all found by running the tool rather than by reading it.
|
|
1386
|
-
|
|
1387
|
-
### Fixed
|
|
1388
|
-
|
|
1389
|
-
- **A routed model the backend does not serve reached dispatch.** The router picks from what a
|
|
1390
|
-
calibration measured, and a calibration is a record of a machine at a moment; the backend
|
|
1391
|
-
answering today is a separate fact, and the two drift. A model pulled into Ollama, discovery
|
|
1392
|
-
preferring rapid-mlx, and the router handed over a name that endpoint had never heard of. It
|
|
1393
|
-
answered `Not Found` three times and the run stopped at zero steps. The served list is now
|
|
1394
|
-
asked before dispatch, and a served local model, then a frontier provider whose key is set,
|
|
1395
|
-
answers instead. Substitutions are announced and recorded.
|
|
1396
|
-
- **A run that built nothing reported `DONE`.** The gates run after the loop and every gate
|
|
1397
|
-
event rewrote the status line, so the last gate to pass became the last word on the run. A
|
|
1398
|
-
loop that stopped at step zero displayed `DONE gate diff-budget: passed` in the success
|
|
1399
|
-
colour, over an empty diff. The stop reason is now its own field and the outcome leads with it.
|
|
1400
|
-
- **`git diff` outside a repository printed its whole option list.** One line of diagnosis
|
|
1401
|
-
followed by a hundred lines about `--dirstat`, with the sentence saying what to do at the
|
|
1402
|
-
bottom. Now one line, and it says to run `git init`.
|
|
1403
|
-
|
|
1404
|
-
## 13.1.4
|
|
1405
|
-
|
|
1406
|
-
### Fixed
|
|
1407
|
-
|
|
1408
|
-
- **The readme printed an install command that cannot work.** It offered
|
|
1409
|
-
`npm install -g github:owner/repo#tag` beside the registry line. `dist/` is not committed, so a
|
|
1410
|
-
git ref builds itself on install and needs this package's devDependencies to do it, and npm
|
|
1411
|
-
does not install those under `-g`: it carries the global context into its git-dependency
|
|
1412
|
-
preparation, places the clone as a root package rather than building a tree inside it, and runs
|
|
1413
|
-
`prepare` without the compiler. The same ref installed without `-g` works and always did. Found
|
|
1414
|
-
by a person running the line the readme printed.
|
|
1415
|
-
- **That failure surfaced as `ENOENT` on a path the reader never typed.** The build now names the
|
|
1416
|
-
cause and the two commands that do work, rather than reporting a missing file.
|
|
1417
|
-
|
|
1418
|
-
## 13.1.3
|
|
1419
|
-
|
|
1420
|
-
The first 13.x on the npm registry. No behaviour changed: this is 13.1.1 with a manifest the
|
|
1421
|
-
registry accepts and install instructions that are true.
|
|
1422
|
-
|
|
1423
|
-
### Fixed
|
|
1424
|
-
|
|
1425
|
-
- **The manifest named no repository, so a signed publish was refused.** `npm publish
|
|
1426
|
-
--provenance` signs a statement naming the repository the tarball was built from, and the
|
|
1427
|
-
registry checks it against `repository.url` before it accepts the write. That field was
|
|
1428
|
-
absent, so the statement said one thing and the manifest said `""`, and the registry answered
|
|
1429
|
-
`E422` after the provenance had already been written to the transparency log. Nothing in the
|
|
1430
|
-
source tree can show this, so a test now asserts the field.
|
|
1431
|
-
- **The package told its own readers it was not published.** The install section named a git ref
|
|
1432
|
-
and said the registry served 12.0.0, because that is what was true while the credential was
|
|
1433
|
-
missing. Those words ship inside the tarball, so publishing 13.1.1 as it stood would have put
|
|
1434
|
-
a package on the registry whose first section denies being there. `npm install -g
|
|
1435
|
-
swarm-orchestrator` is the first line again.
|
|
1436
|
-
|
|
1437
|
-
### Added
|
|
1438
|
-
|
|
1439
|
-
- A description, keywords, a homepage and a bug-tracker link, which is what the registry page
|
|
1440
|
-
renders around the readme and what a search on the registry matches against.
|
|
1441
|
-
- Three flags the readme never listed, `--base`, `--max-steps` and `--local-endpoint`, and a
|
|
1442
|
-
pointer to `swarm --help` for the calibration flags it still does not list.
|
|
1443
|
-
|
|
1444
|
-
`13.1.2` was tagged and refused by the registry for the manifest reason above. The tag is left
|
|
1445
|
-
where it is rather than moved, because it names a real tree and the refusal is part of the
|
|
1446
|
-
record.
|
|
1447
|
-
|
|
1448
|
-
## 13.1.1
|
|
1449
|
-
|
|
1450
|
-
A packaging fix. Nothing about how the tool runs changed.
|
|
1451
|
-
|
|
1452
|
-
### Fixed
|
|
1453
|
-
|
|
1454
|
-
- **Installing from a git ref produced a package with no binary.** `dist/` is not committed and
|
|
1455
|
-
is built by a script, and npm runs `prepare` for a git install but never `prepublishOnly`.
|
|
1456
|
-
Only the latter was declared, so `npm install github:moonrunnerkc/swarm-orchestrator#v13.1.0`
|
|
1457
|
-
resolved, reported no error, and left a directory with no `dist/` and no `swarm`. This is the
|
|
1458
|
-
install path that matters while the registry publish is blocked, and it was the one that did
|
|
1459
|
-
not work.
|
|
1460
|
-
|
|
1461
|
-
## 13.1.0
|
|
1462
|
-
|
|
1463
|
-
A run you can watch and drive, and an end-of-run panel that shows you what it produced.
|
|
1464
|
-
Everything below is additive: no flag, command or output changed meaning, and the plain-line
|
|
1465
|
-
stream a pipe or a CI job reads is byte-for-byte what it was.
|
|
1466
|
-
|
|
1467
|
-
### Added
|
|
1468
|
-
|
|
1469
|
-
- **An interactive terminal interface.** On a TTY, a run draws a single screen: the task and
|
|
1470
|
-
the model in a header, the plan, the action stream, the gate strip, and a status line.
|
|
1471
|
-
Scroll it, expand a row to the whole tool input and output and the ledger record it came
|
|
1472
|
-
from, filter it, freeze the render without touching the run, and press `?` for the keymap.
|
|
1473
|
-
Two exits that are not the same thing: `q` leaves the view and lets the run finish, `ctrl+c`
|
|
1474
|
-
cancels the run.
|
|
1475
|
-
- **An end-of-run evidence panel.** What the run produced, named by what each artifact is for,
|
|
1476
|
-
with the record count and how many claims the harness verified against how many it refused.
|
|
1477
|
-
One keystroke opens the review page, another the bundle directory. It says the bundle
|
|
1478
|
-
verified only if the bundle's own verifier ran in that session and exited 0, and it names the
|
|
1479
|
-
exit code; otherwise it says "not verified in this run" and prints the command.
|
|
1480
|
-
- **`swarm review <bundle directory>`**, which shows that same panel for any bundle already on
|
|
1481
|
-
disk, running the same verifier. Nothing is re-run.
|
|
1482
|
-
- **`swarm --help`**, which used to report that `--help` needs a value.
|
|
1483
|
-
- **Screen flags**: `--no-tui` for plain lines even on a terminal, `--color` and `--no-color`,
|
|
1484
|
-
`--open-evidence` and `--no-open-evidence`. Opening is opt-in and never happens off a
|
|
1485
|
-
terminal.
|
|
1486
|
-
- **Three `swarm.toml` tables**: `[interface]` (`tui`, `color`, `open_evidence`), `[theme]`
|
|
1487
|
-
(a colour per slot), and `[keys]` (a key per action). Flags win over the file, as everything
|
|
1488
|
-
else does. An unknown key, colour or action is a typed error naming what was wrong and what
|
|
1489
|
-
would have been accepted.
|
|
1490
|
-
- **Sampling settings on the wire for a calibration run**: temperature and top-p pinned and
|
|
1491
|
-
recorded in every model-call record, with a seed per repeat. An ordinary task run sends
|
|
1492
|
-
nothing and is unchanged.
|
|
1493
|
-
|
|
1494
|
-
### Fixed
|
|
1495
|
-
|
|
1496
|
-
- **Two consumers of one stdin.** The CLI built a readline interface on `process.stdin` while
|
|
1497
|
-
Ink held the same stdin in raw mode. A confirmation firing mid-run raced them, which is the
|
|
1498
|
-
least acceptable place to drop a keystroke. Confirmation is now a component inside the
|
|
1499
|
-
running screen, answered by the same key dispatcher.
|
|
1500
|
-
- **The curated model shortlist and pricing table answered 404.** Both URLs named the branch
|
|
1501
|
-
`main`, which is the v12 lineage and carries neither file, so `swarm select` fell back to the
|
|
1502
|
-
bundled snapshot on every machine.
|
|
1503
|
-
- **A missing verifier read as a refused bundle.** Node exits 1 on a module it cannot find,
|
|
1504
|
-
which at the exit code is the same as a verifier that ran and said no. One is the absence of
|
|
1505
|
-
a verdict.
|
|
1506
|
-
- **Local models reported no tokens, and so cost nothing.** An OpenAI-compatible server streams
|
|
1507
|
-
a usage chunk only when the request carries `stream_options.include_usage`, and the local
|
|
1508
|
-
provider was not built to send it. Every local run recorded `outputTokens: 0`, so throughput
|
|
1509
|
-
was unmeasurable and every run priced at `$0.0000`, which the routing reward is built from.
|
|
1510
|
-
The router had been learning that local models are free.
|
|
1511
|
-
- **One keychain message for three different failures.** A key that could not be read, an entry
|
|
1512
|
-
holding something that is not a key, and a keychain that would not accept a new one now say
|
|
1513
|
-
which happened and what to do about it. The middle one names the service and the account, and
|
|
1514
|
-
says the entry can be deleted.
|
|
1515
|
-
|
|
1516
|
-
## 13.0.0
|
|
1517
|
-
|
|
1518
|
-
Same package name, different product. If you installed `swarm-orchestrator` before this
|
|
1519
|
-
release, read this before upgrading: v13 is not a newer v12, and nothing in v12's interface
|
|
1520
|
-
survives.
|
|
1521
|
-
|
|
1522
|
-
### What v12 was, and what v13 is
|
|
1523
|
-
|
|
1524
|
-
v12 was a PR auditor. It ran as a GitHub Action, read pull requests opened by AI coding
|
|
1525
|
-
agents, looked for cheat patterns (test relaxation, mock-of-hallucination, assertion strip,
|
|
1526
|
-
no-op fix), posted findings as a comment, and gated merges.
|
|
1527
|
-
|
|
1528
|
-
v13 is a coding agent. It does the work rather than auditing somebody else's, and every
|
|
1529
|
-
claim it makes about that work resolves to machine-captured evidence in a tamper-evident
|
|
1530
|
-
ledger. The two share a name and nothing else: no shared history, no shared interface, no
|
|
1531
|
-
migration path from one to the other, because there is nothing to migrate.
|
|
1532
|
-
|
|
1533
|
-
### Breaking
|
|
1534
|
-
|
|
1535
|
-
- **The `swarm-audit` and `swarm-orchestrator` binaries are gone.** One binary now, `swarm`.
|
|
1536
|
-
- **The GitHub Action is retired.** v13 ships no `action.yml`. There is no v13 equivalent of
|
|
1537
|
-
the merge gate, and none is planned.
|
|
1538
|
-
- **Node 24 or newer.** v12 asked for 20. The floor is not stylistic: the coverage cycle
|
|
1539
|
-
spawns the test runner with `--test-isolation=process`, which Node 22 rejects as a bad
|
|
1540
|
-
option, so on anything older that arm measures nothing.
|
|
1541
|
-
- **The histories share no merge base.** v13 is a separate lineage. `git log` will not show
|
|
1542
|
-
you v12's commits from here.
|
|
1543
|
-
|
|
1544
|
-
### If you are using v12
|
|
1545
|
-
|
|
1546
|
-
Stay on it. It is tagged `v12-final` and that tag is not going away.
|
|
1547
|
-
|
|
1548
|
-
npm install swarm-orchestrator@12.0.0
|
|
1549
|
-
|
|
1550
|
-
That is the newest v12 the registry carries. The `v12-final` tag is at 12.1.1, which was
|
|
1551
|
-
tagged but never published, so `@12.1.1` does not resolve; install from the tag if you need
|
|
1552
|
-
exactly that tree.
|
|
1553
|
-
|
|
1554
|
-
For the Action, pin the tag rather than a branch, since the default branch is moving to the
|
|
1555
|
-
v13 lineage:
|
|
1556
|
-
|
|
1557
|
-
uses: moonrunnerkc/swarm-orchestrator@v12-final
|
|
1558
|
-
|
|
1559
|
-
### What v13 does
|
|
1560
|
-
|
|
1561
|
-
One task, start to finish, in a git workspace: plan, edit through a chokepoint that records
|
|
1562
|
-
every tool call, run the gates, auto-resolve failures under a numeric ratchet, and export a
|
|
1563
|
-
signed evidence bundle a stranger can verify without installing anything.
|
|
1564
|
-
|
|
1565
|
-
The parts worth knowing before you try it:
|
|
1566
|
-
|
|
1567
|
-
- Gate results, claim verdicts and bundle status are computed by the harness. Model prose
|
|
1568
|
-
renders as unverified narrative and cannot render green.
|
|
1569
|
-
- The ledger is append-only and hash-chained, signed with a key from the OS keychain.
|
|
1570
|
-
- The bundle carries its own verifier. `node verify.mjs <bundle>` needs Node and nothing
|
|
1571
|
-
else.
|
|
1572
|
-
- Local model selection is measured on your hardware rather than guessed from model cards.
|
|
971
|
+
## History
|
|
1573
972
|
|
|
1574
|
-
|
|
1575
|
-
|
|
973
|
+
Versions 13.0.0 through 13.1.9 turned the package from v12's pull request auditor into a coding
|
|
974
|
+
agent whose every completion claim resolved to harness-captured evidence in a hash-chained,
|
|
975
|
+
signed ledger: a single tool chokepoint under a lexical path policy, gates declared as data, a
|
|
976
|
+
numeric ratchet across retries, measured local model selection, and an offline verifier. Earlier
|
|
977
|
+
major versions (v6 to v12) were a pull request auditor for AI-authored changes and share nothing
|
|
978
|
+
with the current interface. The full entries are in this file's git history before the
|
|
979
|
+
verifier-first rebuild.
|