@cassiomc1/forgeloop 1.12.0 → 1.14.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/.github/copilot-instructions.md +1 -1
- package/AGENTS.md +1 -1
- package/AGENT_COMPATIBILITY.md +8 -0
- package/CLAUDE.md +1 -1
- package/CONTRIBUTING.md +90 -0
- package/DOCS_INDEX.md +46 -12
- package/ENG/c-development-eng.md +112 -0
- package/ENG/cpp-development-eng.md +109 -0
- package/ENG/dotnet-aspnetcore-development-eng.md +401 -0
- package/ENG/go-development-eng.md +103 -0
- package/ENG/java-development-eng.md +125 -0
- package/ENG/nodejs-backend-development-eng.md +605 -0
- package/ENG/php-development-eng.md +104 -0
- package/ENG/rust-development-eng.md +422 -0
- package/ENG/sec-code-eng.md +7 -7
- package/ENG/sql-development-eng.md +108 -0
- package/ENG/swift-development-eng.md +111 -0
- package/ENG/typescript-development-eng.md +108 -0
- package/EXECUTION_STATE.md +12 -0
- package/GUIDE_ROUTER.md +418 -9
- package/LOOP_ENGINEERING.md +28 -2
- package/ORCHESTRATOR_INTEGRATION.md +9 -5
- package/PROTOCOL_INTEGRATION.md +55 -2
- package/QUALITY_SCORECARD.md +1 -0
- package/README.md +78 -52
- package/TERMINOLOGY.md +2 -0
- package/THIRD_PARTY_NOTICES.md +19 -7
- package/THREAT_MODEL.md +140 -1
- package/completions/_forgeloop +22 -4
- package/completions/forgeloop.bash +40 -4
- package/completions/forgeloop.fish +130 -1
- package/docs/ADVISORY_CONTEXT.md +25 -0
- package/docs/AGENT_BROWSER_ADAPTER.md +81 -0
- package/docs/AGENT_BROWSER_VERIFICATION.md +6 -0
- package/docs/AGENT_PROTOCOL_SUMMARY.md +81 -3
- package/docs/AGENT_SKILL.md +66 -0
- package/docs/ARTIFACT_REFERENCE.md +123 -0
- package/docs/AUDIT_UX.md +46 -0
- package/docs/BROWSER_VERIFICATION.md +136 -0
- package/docs/CLI_REFERENCE.md +392 -10
- package/docs/CODE_ATTESTATION.md +2 -2
- package/docs/DOCUMENTATION_GUIDE.md +34 -12
- package/docs/GETTING_STARTED.md +59 -0
- package/docs/JEV_BENCHMARKS.md +31 -0
- package/docs/MODEL_ROUTING.md +37 -0
- package/docs/OPENSRC_ADAPTER.md +241 -0
- package/docs/PACKAGE_CONTENTS.md +60 -19
- package/docs/PROVIDERS.md +126 -0
- package/docs/PROVIDER_ARCHITECTURE.md +199 -0
- package/docs/RECIPES.md +32 -0
- package/docs/RELEASE_CHECKLIST.md +66 -5
- package/docs/SECURITY_REVIEW.md +71 -0
- package/docs/SEMANTIC_DECISION_PLANE.md +71 -0
- package/docs/TEST_INTELLIGENCE.md +29 -0
- package/docs/TEST_PRUNING.md +14 -0
- package/docs/TROUBLESHOOTING.md +298 -3
- package/docs/UNIVERSAL_INTEGRATION.md +31 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +2 -2
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +5 -5
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +1 -1
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +39 -26
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +26 -26
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +2 -1
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +5 -5
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +1 -1
- package/docs/diagrams/README.md +13 -9
- package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +1 -1
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +24 -19
- package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +1 -0
- package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +4 -4
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +4 -4
- package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +4 -4
- package/docs/documentation-manifest.json +1397 -0
- package/docs/protocol-requirements.json +101 -0
- package/package.json +46 -4
- package/schemas/config.schema.json +14 -0
- package/schemas/context-plan.schema.json +18 -0
- package/schemas/routing-input.schema.json +1 -1
- package/schemas/semantic-decision.schema.json +46 -0
- package/schemas/test-utility.schema.json +44 -0
- package/scripts/CI_VALIDATORS.md +84 -11
- package/scripts/benchmark-jev.mjs +5 -0
- package/scripts/benchmark-test-intelligence.mjs +4 -0
- package/scripts/generate-agent-protocol-summary.mjs +40 -1
- package/scripts/generate-forgeloop-skill.mjs +133 -0
- package/scripts/jev-smoke.mjs +19 -0
- package/skills/forgeloop/README.md +9 -0
- package/skills/forgeloop/SKILL.md +77 -0
- package/skills/forgeloop/references/lifecycle.md +9 -0
- package/skills/forgeloop/references/recovery.md +7 -0
- package/skills/forgeloop/references/verification.md +7 -0
- package/src/adapters/agent-browser/assertions.js +47 -0
- package/src/adapters/agent-browser/commands.js +54 -0
- package/src/adapters/agent-browser/index.js +3 -0
- package/src/adapters/agent-browser/locator.js +40 -0
- package/src/adapters/agent-browser/process.js +215 -0
- package/src/adapters/agent-browser/provider.js +313 -0
- package/src/adapters/emulated-services/constants.js +24 -0
- package/src/adapters/emulated-services/index.js +7 -0
- package/src/adapters/emulated-services/process.js +162 -0
- package/src/adapters/emulated-services/provider.js +282 -0
- package/src/adapters/opensrc/normalize.js +90 -0
- package/src/adapters/opensrc/process.js +248 -0
- package/src/adapters/opensrc/provider.js +338 -0
- package/src/adapters/opensrc/search.js +264 -0
- package/src/adapters/typesafe/client.js +28 -0
- package/src/adapters/typesafe/engine.js +63 -0
- package/src/adapters/typesafe/normalize.js +41 -0
- package/src/cli.js +108 -0
- package/src/commands/checkpoint-revalidate.js +176 -0
- package/src/commands/context-plan.js +38 -0
- package/src/commands/contract-create.js +264 -0
- package/src/commands/contract-revise.js +236 -0
- package/src/commands/decision-show.js +14 -0
- package/src/commands/decision-status.js +22 -0
- package/src/commands/discover.js +41 -0
- package/src/commands/doctor.js +15 -0
- package/src/commands/gate-record.js +205 -0
- package/src/commands/gate-revalidate.js +137 -0
- package/src/commands/model-route.js +32 -0
- package/src/commands/next.js +19 -7
- package/src/commands/route.js +146 -18
- package/src/commands/semantic-plan.js +17 -0
- package/src/commands/task-abandon.js +224 -0
- package/src/commands/task-create.js +84 -25
- package/src/commands/task-list.js +22 -2
- package/src/commands/task-migrate-contract-bootstrap-repair.js +288 -0
- package/src/commands/task-repair-contract-bootstrap.js +263 -0
- package/src/commands/test-inventory.js +5 -0
- package/src/commands/test-prune-plan.js +5 -0
- package/src/commands/test-prune-probe.js +5 -0
- package/src/commands/test-utility.js +5 -0
- package/src/commands/validate-protocol.js +10 -1
- package/src/config/guides.json +44 -0
- package/src/core/artifact-registry.js +24 -0
- package/src/core/audit-ux.js +514 -0
- package/src/core/browser-verification/constants.js +149 -0
- package/src/core/browser-verification/normalize.js +254 -0
- package/src/core/browser-verification/provider.js +519 -0
- package/src/core/browser-verification/service.js +115 -0
- package/src/core/build-script.js +151 -0
- package/src/core/c-cpp-project.js +143 -0
- package/src/core/checkpoint-revalidation.js +319 -0
- package/src/core/cli-command-definitions.js +249 -1
- package/src/core/command-executors.js +115 -3
- package/src/core/command-input.js +212 -102
- package/src/core/completion-artifacts.js +14 -5
- package/src/core/completion.js +4 -6
- package/src/core/config.js +3 -0
- package/src/core/context-compiler/budget.js +9 -0
- package/src/core/context-compiler/candidates.js +39 -0
- package/src/core/context-compiler/compiler.js +63 -0
- package/src/core/context-compiler/fingerprint.js +11 -0
- package/src/core/context-compiler/policy.js +13 -0
- package/src/core/context-compiler/result.js +23 -0
- package/src/core/contract-bootstrap-recovery.js +655 -0
- package/src/core/contract-presets.js +82 -0
- package/src/core/contract-revision.js +210 -0
- package/src/core/decision/artifact.js +69 -0
- package/src/core/decision/benchmarks.js +103 -0
- package/src/core/decision/cache.js +27 -0
- package/src/core/decision/constants.js +58 -0
- package/src/core/decision/cutover.js +34 -0
- package/src/core/decision/engine.js +22 -0
- package/src/core/decision/errors.js +68 -0
- package/src/core/decision/events.js +101 -0
- package/src/core/decision/freshness.js +19 -0
- package/src/core/decision/normalizers/index.js +115 -0
- package/src/core/decision/policy.js +18 -0
- package/src/core/decision/projection.js +16 -0
- package/src/core/decision/question-registry.js +201 -0
- package/src/core/decision/request.js +26 -0
- package/src/core/decision/resolver.js +130 -0
- package/src/core/decision/result.js +58 -0
- package/src/core/decision/service.js +156 -0
- package/src/core/decision/state-builder.js +65 -0
- package/src/core/decision/task-bindings.js +30 -0
- package/src/core/decision/test-provider.js +32 -0
- package/src/core/decision/thresholds.js +15 -0
- package/src/core/error-codes.js +281 -3
- package/src/core/events.js +226 -57
- package/src/core/evidence-readiness.js +9 -0
- package/src/core/execution-prerequisites.js +14 -0
- package/src/core/execution-profile.js +63 -38
- package/src/core/filesystem.js +1 -10
- package/src/core/gate-provenance.js +124 -0
- package/src/core/go-project.js +206 -0
- package/src/core/integration-invocation-policy.js +27 -4
- package/src/core/integration-resources.js +86 -61
- package/src/core/java-project.js +403 -0
- package/src/core/model-router/constants.js +10 -0
- package/src/core/model-router/policy.js +103 -0
- package/src/core/model-router/router.js +37 -0
- package/src/core/multi-language-project.js +117 -0
- package/src/core/next-action-model.js +58 -0
- package/src/core/next-action-phases.js +130 -42
- package/src/core/next-action-refresh.js +43 -9
- package/src/core/next-action-review-phase.js +7 -2
- package/src/core/next-action.js +35 -7
- package/src/core/next-explanation.js +63 -0
- package/src/core/phase.js +128 -10
- package/src/core/php-project.js +85 -0
- package/src/core/preflight-consistency.js +23 -9
- package/src/core/preflight-loaders.js +37 -5
- package/src/core/project-detection.js +1760 -52
- package/src/core/protocol-info.js +65 -0
- package/src/core/protocol.js +20 -0
- package/src/core/reconcile-closure.js +132 -53
- package/src/core/recovery-history.js +1 -0
- package/src/core/resumability.js +154 -44
- package/src/core/route-artifact.js +15 -1
- package/src/core/router.js +223 -4
- package/src/core/runtime-context.js +118 -61
- package/src/core/rust-project.js +400 -0
- package/src/core/schema-validation.js +3 -0
- package/src/core/security-review/constants.js +64 -0
- package/src/core/security-review/normalize.js +245 -0
- package/src/core/security-review/provider.js +204 -0
- package/src/core/security-review/service.js +134 -0
- package/src/core/semantic-planning/constants.js +19 -0
- package/src/core/semantic-planning/projection.js +94 -0
- package/src/core/semantic-planning/service.js +15 -0
- package/src/core/sources.js +37 -0
- package/src/core/sql-project.js +141 -0
- package/src/core/swift-project.js +200 -0
- package/src/core/task-claim-state.js +201 -1
- package/src/core/task-conflict-inspection.js +31 -5
- package/src/core/task-paths.js +13 -0
- package/src/core/task-recovery.js +1 -0
- package/src/core/templates.js +3 -0
- package/src/core/test-intelligence/benchmarks.js +68 -0
- package/src/core/test-intelligence/inventory.js +73 -0
- package/src/core/test-intelligence/prune.js +90 -0
- package/src/core/test-intelligence/semantic-state.js +15 -0
- package/src/core/test-intelligence/service.js +40 -0
- package/src/core/test-intelligence/utility.js +50 -0
- package/src/core/trace.js +11 -7
- package/src/core/transaction.js +1 -0
- package/src/core/typescript-project.js +349 -0
- package/src/core/xml-structure.js +123 -0
- package/src/integration.d.ts +492 -0
- package/src/integration.js +54 -0
- package/src/providers/README.md +47 -0
- package/src/providers/capabilities.js +46 -0
- package/src/providers/errors.js +15 -0
- package/src/providers/index.js +29 -0
- package/src/providers/json-snapshot.js +105 -0
- package/src/providers/registry.js +152 -0
|
@@ -71,6 +71,188 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
71
71
|
mayExecuteExternalProcess: false,
|
|
72
72
|
description: "Reports versioning, lifecycle, command, guide, and public error compatibility metadata for external harnesses.",
|
|
73
73
|
}),
|
|
74
|
+
"decision-status": Object.freeze({
|
|
75
|
+
name: "decision-status",
|
|
76
|
+
category: "diagnostics",
|
|
77
|
+
mutation: "READ_ONLY",
|
|
78
|
+
options: Object.freeze({
|
|
79
|
+
...CLI_COMMON_OPTIONS,
|
|
80
|
+
"--health": Object.freeze({ targetKey: "health", parseType: "boolean", takesValue: false, description: "perform a bounded live Jev health check when credentials are configured" }),
|
|
81
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit decision-plane status as JSON" }),
|
|
82
|
+
}),
|
|
83
|
+
writes: [], removes: [], mayExecuteExternalProcess: true,
|
|
84
|
+
description: "Reports the pinned semantic decision-plane configuration without exposing credentials.",
|
|
85
|
+
}),
|
|
86
|
+
"decision-show": Object.freeze({
|
|
87
|
+
name: "decision-show",
|
|
88
|
+
category: "diagnostics",
|
|
89
|
+
mutation: "READ_ONLY",
|
|
90
|
+
options: Object.freeze({
|
|
91
|
+
...CLI_COMMON_OPTIONS,
|
|
92
|
+
...CLI_TASK_OPTION,
|
|
93
|
+
"--decision": Object.freeze({ targetKey: "decisionId", parseType: "string", takesValue: true, valueName: "id", missingValueMessage: "--decision requires an ID", description: "decision artifact ID" }),
|
|
94
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit the decision artifact as JSON" }),
|
|
95
|
+
}),
|
|
96
|
+
writes: [], removes: [], mayExecuteExternalProcess: false,
|
|
97
|
+
description: "Shows one persisted semantic decision artifact without performing a live request.",
|
|
98
|
+
}),
|
|
99
|
+
"context-plan": Object.freeze({
|
|
100
|
+
name: "context-plan",
|
|
101
|
+
category: "diagnostics",
|
|
102
|
+
mutation: "READ_ONLY",
|
|
103
|
+
options: Object.freeze({
|
|
104
|
+
...CLI_COMMON_OPTIONS,
|
|
105
|
+
...CLI_TASK_OPTION,
|
|
106
|
+
"--decision": Object.freeze({ targetKey: "decisionId", parseType: "string", takesValue: true, valueName: "id", missingValueMessage: "--decision requires an ID", description: "persisted Jev decision artifact ID" }),
|
|
107
|
+
"--profile": Object.freeze({ targetKey: "profile", parseType: "string", takesValue: true, valueName: "profile", missingValueMessage: "--profile requires light, balanced, or full", description: "bounded context budget profile" }),
|
|
108
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit the bounded context plan as JSON" }),
|
|
109
|
+
}),
|
|
110
|
+
writes: [], removes: [], mayExecuteExternalProcess: false,
|
|
111
|
+
description: "Compiles a bounded non-authoritative context plan from deterministic candidates.",
|
|
112
|
+
}),
|
|
113
|
+
"model-route": Object.freeze({
|
|
114
|
+
name: "model-route",
|
|
115
|
+
category: "diagnostics",
|
|
116
|
+
mutation: "READ_ONLY",
|
|
117
|
+
options: Object.freeze({
|
|
118
|
+
...CLI_COMMON_OPTIONS,
|
|
119
|
+
...CLI_TASK_OPTION,
|
|
120
|
+
"--decision": Object.freeze({ targetKey: "decisionId", parseType: "string", takesValue: true, valueName: "id", missingValueMessage: "--decision requires an ID", description: "persisted Jev decision artifact ID" }),
|
|
121
|
+
"--work": Object.freeze({ targetKey: "workType", parseType: "string", takesValue: true, valueName: "type", missingValueMessage: "--work requires a type", description: "declared work type" }),
|
|
122
|
+
"--surface": Object.freeze({ targetKey: "surfaces", parseType: "string", takesValue: true, valueName: "value", repeatable: true, missingValueMessage: "--surface requires a value", description: "affected surface" }),
|
|
123
|
+
"--risk": Object.freeze({ targetKey: "risks", parseType: "string", takesValue: true, valueName: "value", repeatable: true, missingValueMessage: "--risk requires a value", description: "task risk" }),
|
|
124
|
+
"--platform": Object.freeze({ targetKey: "platforms", parseType: "string", takesValue: true, valueName: "value", repeatable: true, missingValueMessage: "--platform requires a value", description: "affected platform" }),
|
|
125
|
+
"--behavior-change": Object.freeze({ targetKey: "behaviorChange", parseType: "boolean", takesValue: false, description: "declare behavior change" }),
|
|
126
|
+
"--executable-change": Object.freeze({ targetKey: "executableChange", parseType: "boolean", takesValue: false, description: "declare executable/configuration change" }),
|
|
127
|
+
"--generation-required": Object.freeze({ targetKey: "generationRequired", parseType: "boolean", takesValue: false, description: "declare that generation is required" }),
|
|
128
|
+
"--architecture-change": Object.freeze({ targetKey: "architectureChange", parseType: "boolean", takesValue: false, description: "declare an architectural change" }),
|
|
129
|
+
"--ambiguous": Object.freeze({ targetKey: "ambiguity", parseType: "boolean", takesValue: false, description: "declare unresolved ambiguity" }),
|
|
130
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit model-route projection as JSON" }),
|
|
131
|
+
}),
|
|
132
|
+
writes: [], removes: [], mayExecuteExternalProcess: false,
|
|
133
|
+
description: "Projects a deterministic model-routing floor with advisory Jev escalation only.",
|
|
134
|
+
}),
|
|
135
|
+
"semantic-plan": Object.freeze({
|
|
136
|
+
name: "semantic-plan",
|
|
137
|
+
category: "diagnostics",
|
|
138
|
+
mutation: "READ_ONLY",
|
|
139
|
+
options: Object.freeze({
|
|
140
|
+
...CLI_COMMON_OPTIONS,
|
|
141
|
+
...CLI_TASK_OPTION,
|
|
142
|
+
"--decision": Object.freeze({ targetKey: "decisionId", parseType: "string", takesValue: true, valueName: "id", missingValueMessage: "--decision requires an ID", description: "persisted Jev decision artifact ID" }),
|
|
143
|
+
"--kind": Object.freeze({ targetKey: "semanticPlanKind", parseType: "string", takesValue: true, valueName: "failure|diagnosis|review", missingValueMessage: "--kind requires failure, diagnosis, or review", description: "bounded semantic planning projection" }),
|
|
144
|
+
"--input": Object.freeze({ targetKey: "semanticPlanInput", parseType: "json-object", takesValue: true, valueName: "json", missingValueMessage: "--input requires a JSON object", description: "bounded failure, diagnosis, or review context" }),
|
|
145
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit semantic plan projection as JSON" }),
|
|
146
|
+
}),
|
|
147
|
+
writes: [], removes: [], mayExecuteExternalProcess: false,
|
|
148
|
+
description: "Projects fail-closed failure triage, diagnosis priority, or review planning without authority.",
|
|
149
|
+
}),
|
|
150
|
+
"test-inventory": Object.freeze({
|
|
151
|
+
name: "test-inventory",
|
|
152
|
+
category: "diagnostics",
|
|
153
|
+
mutation: "READ_ONLY",
|
|
154
|
+
options: Object.freeze({
|
|
155
|
+
...CLI_COMMON_OPTIONS,
|
|
156
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit deterministic test inventory as JSON" }),
|
|
157
|
+
}),
|
|
158
|
+
writes: [], removes: [], mayExecuteExternalProcess: false,
|
|
159
|
+
description: "Discovers tests deterministically and assigns stable semantic test IDs without pruning authority.",
|
|
160
|
+
}),
|
|
161
|
+
"test-utility": Object.freeze({
|
|
162
|
+
name: "test-utility",
|
|
163
|
+
category: "diagnostics",
|
|
164
|
+
mutation: "MUTATING",
|
|
165
|
+
options: Object.freeze({
|
|
166
|
+
...CLI_COMMON_OPTIONS,
|
|
167
|
+
...CLI_TASK_OPTION,
|
|
168
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit test utility analysis as JSON" }),
|
|
169
|
+
}),
|
|
170
|
+
writes: [".forgeloop/task-state/<taskKey>/test-utility.json"], removes: [], mayExecuteExternalProcess: false,
|
|
171
|
+
description: "Persists non-evidence test utility analysis; never deletes tests or authorizes pruning.",
|
|
172
|
+
}),
|
|
173
|
+
"test-prune-plan": Object.freeze({
|
|
174
|
+
name: "test-prune-plan", category: "diagnostics", mutation: "READ_ONLY",
|
|
175
|
+
options: Object.freeze({ ...CLI_COMMON_OPTIONS, ...CLI_TASK_OPTION, "--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit test prune plan as JSON" }) }),
|
|
176
|
+
writes: [], removes: [], mayExecuteExternalProcess: false,
|
|
177
|
+
description: "Projects KEEP, PROBE_REMOVAL, or BLOCKED without deleting tests.",
|
|
178
|
+
}),
|
|
179
|
+
"test-prune-probe": Object.freeze({
|
|
180
|
+
name: "test-prune-probe", category: "verification", mutation: "EXTERNAL_EXECUTION",
|
|
181
|
+
options: Object.freeze({ ...CLI_COMMON_OPTIONS, ...CLI_TASK_OPTION, "--test": Object.freeze({ targetKey: "testId", parseType: "string", takesValue: true, valueName: "id", missingValueMessage: "--test requires a test ID", description: "stable test ID to probe in isolation" }), "--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit test prune probe as JSON" }) }),
|
|
182
|
+
writes: [], removes: [], mayExecuteExternalProcess: true,
|
|
183
|
+
description: "Runs only an isolated, fail-closed removal probe; never modifies the live worktree.",
|
|
184
|
+
}),
|
|
185
|
+
discover: Object.freeze({
|
|
186
|
+
name: "discover",
|
|
187
|
+
category: "lifecycle",
|
|
188
|
+
mutation: "MUTATING",
|
|
189
|
+
options: Object.freeze({
|
|
190
|
+
...CLI_COMMON_OPTIONS,
|
|
191
|
+
...CLI_TASK_OPTION,
|
|
192
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured discovery output as JSON" }),
|
|
193
|
+
}),
|
|
194
|
+
writes: [".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
195
|
+
removes: [],
|
|
196
|
+
mayExecuteExternalProcess: false,
|
|
197
|
+
description: "Records the canonical initial discovery milestone for a newly created task.",
|
|
198
|
+
}),
|
|
199
|
+
"contract-create": Object.freeze({
|
|
200
|
+
name: "contract-create",
|
|
201
|
+
category: "lifecycle",
|
|
202
|
+
mutation: "MUTATING",
|
|
203
|
+
options: Object.freeze({
|
|
204
|
+
...CLI_COMMON_OPTIONS,
|
|
205
|
+
...CLI_TASK_OPTION,
|
|
206
|
+
"--contract-file": Object.freeze({ targetKey: "contractFile", parseType: "string", takesValue: true, valueName: "path", missingValueMessage: "--contract-file requires a path", description: "validated JSON contract relative to the target" }),
|
|
207
|
+
"--preset": Object.freeze({ targetKey: "preset", parseType: "string", takesValue: true, valueName: "name", missingValueMessage: "--preset requires a name", description: "bounded contract preset: documentation, bug, feature, or release" }),
|
|
208
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured contract output as JSON" }),
|
|
209
|
+
}),
|
|
210
|
+
writes: [".forgeloop/task-state/<taskKey>/contract.json", ".forgeloop/task-state/<taskKey>/work-state.json", ".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
211
|
+
removes: [],
|
|
212
|
+
mayExecuteExternalProcess: false,
|
|
213
|
+
description: "Persists a validated contract and materializes the first real lifecycle checkpoint.",
|
|
214
|
+
}),
|
|
215
|
+
"contract-revise": Object.freeze({
|
|
216
|
+
name: "contract-revise",
|
|
217
|
+
category: "project-maintenance",
|
|
218
|
+
mutation: "MUTATING",
|
|
219
|
+
options: Object.freeze({
|
|
220
|
+
...CLI_COMMON_OPTIONS,
|
|
221
|
+
...CLI_TASK_OPTION,
|
|
222
|
+
"--contract-file": Object.freeze({ targetKey: "contractFile", parseType: "string", takesValue: true, valueName: "path", missingValueMessage: "--contract-file requires a path", description: "validated replacement JSON contract relative to the target" }),
|
|
223
|
+
"--preset": Object.freeze({ targetKey: "preset", parseType: "string", takesValue: true, valueName: "name", missingValueMessage: "--preset requires a name", description: "bounded replacement contract preset: documentation, bug, feature, or release" }),
|
|
224
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured contract revision output as JSON" }),
|
|
225
|
+
}),
|
|
226
|
+
writes: [".forgeloop/task-state/<taskKey>/contract.json", ".forgeloop/task-state/<taskKey>/work-state.json", ".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
227
|
+
removes: [],
|
|
228
|
+
mayExecuteExternalProcess: false,
|
|
229
|
+
description: "Replaces an existing contract canonically before execution while preserving task identity and invalidating derived evidence.",
|
|
230
|
+
}),
|
|
231
|
+
"gate-record": Object.freeze({
|
|
232
|
+
name: "gate-record", category: "lifecycle", mutation: "MUTATING",
|
|
233
|
+
options: Object.freeze({ ...CLI_COMMON_OPTIONS, ...CLI_TASK_OPTION,
|
|
234
|
+
"--gate": Object.freeze({ targetKey: "gate", parseType: "string", takesValue: true, valueName: "name", missingValueMessage: "--gate requires a name", description: "required gate name" }),
|
|
235
|
+
"--status": Object.freeze({ targetKey: "gateStatus", parseType: "string", takesValue: true, valueName: "status", missingValueMessage: "--status requires a status", description: "satisfied, unverified, or blocked" }),
|
|
236
|
+
"--artifact": Object.freeze({ targetKey: "gateArtifacts", parseType: "string", takesValue: true, repeatable: true, valueName: "path", missingValueMessage: "--artifact requires a path", description: "project-relative evidence artifact" }),
|
|
237
|
+
"--decision": Object.freeze({ targetKey: "gateDecisions", parseType: "string", takesValue: true, repeatable: true, valueName: "text", missingValueMessage: "--decision requires text", description: "caller-recorded gate decision" }),
|
|
238
|
+
"--unknown": Object.freeze({ targetKey: "gateUnknowns", parseType: "string", takesValue: true, repeatable: true, valueName: "text", missingValueMessage: "--unknown requires text", description: "known unresolved item" }),
|
|
239
|
+
"--assumption": Object.freeze({ targetKey: "gateAssumptions", parseType: "string", takesValue: true, repeatable: true, valueName: "text", missingValueMessage: "--assumption requires text", description: "approved local assumption" }),
|
|
240
|
+
"--evidence-file": Object.freeze({ targetKey: "gateEvidenceFile", parseType: "string", takesValue: true, valueName: "path", missingValueMessage: "--evidence-file requires a path", description: "bounded local descriptive evidence JSON" }),
|
|
241
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured gate output as JSON" }),
|
|
242
|
+
}),
|
|
243
|
+
writes: [".forgeloop/task-state/<taskKey>/gates/<gate>.json"], removes: [], mayExecuteExternalProcess: false,
|
|
244
|
+
description: "Records a required pre-execution gate with ForgeLoop-owned artifact hashes.",
|
|
245
|
+
}),
|
|
246
|
+
"gate-revalidate": Object.freeze({
|
|
247
|
+
name: "gate-revalidate", category: "lifecycle", mutation: "MUTATING",
|
|
248
|
+
options: Object.freeze({ ...CLI_COMMON_OPTIONS, ...CLI_TASK_OPTION,
|
|
249
|
+
"--gate": Object.freeze({ targetKey: "gate", parseType: "string", takesValue: true, valueName: "name", missingValueMessage: "--gate requires a name", description: "satisfied gate to refresh after safe artifact drift" }),
|
|
250
|
+
"--acknowledge-stale": Object.freeze({ targetKey: "acknowledgeStale", parseType: "boolean", takesValue: false, description: "explicitly acknowledge refresh of stale gate artifacts inside active task claims" }),
|
|
251
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured gate revalidation output as JSON" }),
|
|
252
|
+
}),
|
|
253
|
+
writes: [".forgeloop/task-state/<taskKey>/gates/<gate>.json", ".forgeloop/task-state/<taskKey>/events.ndjson"], removes: [], mayExecuteExternalProcess: false,
|
|
254
|
+
description: "Refreshes a stale satisfied gate after execution only when current identity and active claims prove the change is safe.",
|
|
255
|
+
}),
|
|
74
256
|
init: Object.freeze({
|
|
75
257
|
name: "init",
|
|
76
258
|
category: "project-maintenance",
|
|
@@ -324,6 +506,7 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
324
506
|
...CLI_COMMON_OPTIONS,
|
|
325
507
|
...CLI_TASK_OPTION,
|
|
326
508
|
"--compact": Object.freeze({ targetKey: "compact", parseType: "boolean", takesValue: false, description: "emit a bounded next-action projection" }),
|
|
509
|
+
"--explain": Object.freeze({ targetKey: "explain", parseType: "boolean", takesValue: false, description: "include bounded read-only blocker and recovery explanation" }),
|
|
327
510
|
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured output as JSON" }),
|
|
328
511
|
}),
|
|
329
512
|
writes: [],
|
|
@@ -975,6 +1158,20 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
975
1158
|
mayExecuteExternalProcess: false,
|
|
976
1159
|
description: "Removes work-state.json for the active task only, preserving sibling contract, routing, and ledger files.",
|
|
977
1160
|
}),
|
|
1161
|
+
"checkpoint-revalidate": Object.freeze({
|
|
1162
|
+
name: "checkpoint-revalidate",
|
|
1163
|
+
category: "project-maintenance",
|
|
1164
|
+
mutation: "MUTATING",
|
|
1165
|
+
options: Object.freeze({
|
|
1166
|
+
...CLI_COMMON_OPTIONS,
|
|
1167
|
+
...CLI_TASK_OPTION,
|
|
1168
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured revalidation output as JSON" }),
|
|
1169
|
+
}),
|
|
1170
|
+
writes: [".forgeloop/task-state/<taskKey>/work-state.json", ".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
1171
|
+
removes: [],
|
|
1172
|
+
mayExecuteExternalProcess: false,
|
|
1173
|
+
description: "Revalidates a safe ROUTED checkpoint after repository-only drift without changing contract or route identity.",
|
|
1174
|
+
}),
|
|
978
1175
|
"reconcile-closure": Object.freeze({
|
|
979
1176
|
name: "reconcile-closure",
|
|
980
1177
|
category: "lifecycle",
|
|
@@ -991,7 +1188,7 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
991
1188
|
writes: [".forgeloop/task-state/<taskKey>/executions/exec-<id>.json", ".forgeloop/task-state/<taskKey>/work-state.json", ".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
992
1189
|
removes: [],
|
|
993
1190
|
mayExecuteExternalProcess: true,
|
|
994
|
-
description: "Refreshes the work-state checkpoint of an EXECUTING task whose objective is already satisfied in the current repository, after contract-bound executed evidence, so canonical completion can proceed.",
|
|
1191
|
+
description: "Refreshes the work-state checkpoint of an EXECUTING, VERIFYING, or REVIEWING task whose objective is already satisfied in the current repository, after contract-bound executed evidence, so canonical completion can proceed.",
|
|
995
1192
|
}),
|
|
996
1193
|
"validate-receipt": Object.freeze({
|
|
997
1194
|
name: "validate-receipt",
|
|
@@ -1038,6 +1235,8 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
1038
1235
|
...CLI_TASK_OPTION,
|
|
1039
1236
|
"--claim": Object.freeze({ targetKey: "claims", parseType: "string", takesValue: true, repeatable: true, valueName: "path", missingValueMessage: "--claim requires a path", description: "scoped file path or directory prefix claimed for mutation" }),
|
|
1040
1237
|
"--contract-file": Object.freeze({ targetKey: "contractFile", parseType: "string", takesValue: true, valueName: "path", missingValueMessage: "--contract-file requires a path", description: "path to initial contract file" }),
|
|
1238
|
+
"--preset": Object.freeze({ targetKey: "preset", parseType: "string", takesValue: true, valueName: "name", missingValueMessage: "--preset requires a name", description: "bounded contract preset: documentation, bug, feature, or release" }),
|
|
1239
|
+
"--preview": Object.freeze({ targetKey: "preview", parseType: "boolean", takesValue: false, description: "preview the contract without creating lifecycle state" }),
|
|
1041
1240
|
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured output as JSON" }),
|
|
1042
1241
|
}),
|
|
1043
1242
|
writes: [".forgeloop/task-state/<taskKey>/task.json", ".forgeloop/task-state/<taskKey>/contract.json"],
|
|
@@ -1051,6 +1250,10 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
1051
1250
|
mutation: "READ_ONLY",
|
|
1052
1251
|
options: Object.freeze({
|
|
1053
1252
|
...CLI_COMMON_OPTIONS,
|
|
1253
|
+
"--phase": Object.freeze({ targetKey: "phase", parseType: "string", takesValue: true, valueName: "phase", missingValueMessage: "--phase requires a phase", description: "only return tasks in this lifecycle phase" }),
|
|
1254
|
+
"--active": Object.freeze({ targetKey: "active", parseType: "boolean", takesValue: false, description: "only return healthy tasks with active ownership and a non-terminal phase" }),
|
|
1255
|
+
"--limit": Object.freeze({ targetKey: "limit", parseType: "non-negative-integer", takesValue: true, valueName: "number", missingValueMessage: "--limit requires a non-negative integer", description: "maximum tasks to return" }),
|
|
1256
|
+
"--offset": Object.freeze({ targetKey: "offset", parseType: "non-negative-integer", takesValue: true, valueName: "number", missingValueMessage: "--offset requires a non-negative integer", description: "number of sorted tasks to skip" }),
|
|
1054
1257
|
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured output as JSON" }),
|
|
1055
1258
|
}),
|
|
1056
1259
|
writes: [],
|
|
@@ -1163,6 +1366,51 @@ export const CLI_COMMAND_DEFINITIONS = Object.freeze({
|
|
|
1163
1366
|
mayExecuteExternalProcess: false,
|
|
1164
1367
|
description: "Caller-acknowledged recovery of a STALE or ABANDONED task; records durable state and releases effective write claims.",
|
|
1165
1368
|
}),
|
|
1369
|
+
"task-abandon": Object.freeze({
|
|
1370
|
+
name: "task-abandon",
|
|
1371
|
+
category: "project-maintenance",
|
|
1372
|
+
mutation: "MUTATING",
|
|
1373
|
+
options: Object.freeze({
|
|
1374
|
+
...CLI_COMMON_OPTIONS,
|
|
1375
|
+
...CLI_TASK_OPTION,
|
|
1376
|
+
"--acknowledge-abandonment": Object.freeze({ targetKey: "acknowledgeAbandonment", parseType: "boolean", takesValue: false, description: "explicitly acknowledge abandonment of an active task (required; not completion authority)" }),
|
|
1377
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured abandonment output as JSON" }),
|
|
1378
|
+
}),
|
|
1379
|
+
writes: [".forgeloop/task-state/<taskKey>/recovery.json", ".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
1380
|
+
removes: [],
|
|
1381
|
+
mayExecuteExternalProcess: false,
|
|
1382
|
+
description: "Explicitly abandons an active non-terminal task; records append-only evidence and releases claims without completion authority.",
|
|
1383
|
+
}),
|
|
1384
|
+
"task-repair-contract-bootstrap": Object.freeze({
|
|
1385
|
+
name: "task-repair-contract-bootstrap",
|
|
1386
|
+
category: "project-maintenance",
|
|
1387
|
+
mutation: "MUTATING",
|
|
1388
|
+
options: Object.freeze({
|
|
1389
|
+
...CLI_COMMON_OPTIONS,
|
|
1390
|
+
...CLI_TASK_OPTION,
|
|
1391
|
+
"--acknowledge-repair": Object.freeze({ targetKey: "acknowledgeRepair", parseType: "boolean", takesValue: false, description: "explicit caller acknowledgement of the exact append-only repair (required)" }),
|
|
1392
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured repair output as JSON" }),
|
|
1393
|
+
}),
|
|
1394
|
+
writes: [".forgeloop/task-state/<taskKey>/work-state.json", ".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
1395
|
+
removes: [],
|
|
1396
|
+
mayExecuteExternalProcess: false,
|
|
1397
|
+
description: "Repairs the exact duplicate contract bootstrap defect without rewriting history; idempotent and append-only.",
|
|
1398
|
+
}),
|
|
1399
|
+
"task-migrate-contract-bootstrap-repair": Object.freeze({
|
|
1400
|
+
name: "task-migrate-contract-bootstrap-repair",
|
|
1401
|
+
category: "project-maintenance",
|
|
1402
|
+
mutation: "MUTATING",
|
|
1403
|
+
options: Object.freeze({
|
|
1404
|
+
...CLI_COMMON_OPTIONS,
|
|
1405
|
+
...CLI_TASK_OPTION,
|
|
1406
|
+
"--acknowledge-migration": Object.freeze({ targetKey: "acknowledgeMigration", parseType: "boolean", takesValue: false, description: "fresh explicit caller acknowledgement of the exact legacy marker migration (required)" }),
|
|
1407
|
+
"--json": Object.freeze({ targetKey: "json", parseType: "boolean", takesValue: false, description: "emit structured migration output as JSON" }),
|
|
1408
|
+
}),
|
|
1409
|
+
writes: [".forgeloop/task-state/<taskKey>/events.ndjson"],
|
|
1410
|
+
removes: [],
|
|
1411
|
+
mayExecuteExternalProcess: false,
|
|
1412
|
+
description: "Migrates the exact legacy contract bootstrap repair marker by appending a bound migration event; the original marker and artifacts remain unchanged.",
|
|
1413
|
+
}),
|
|
1166
1414
|
"task-repair-legacy-recovery": Object.freeze({
|
|
1167
1415
|
name: "task-repair-legacy-recovery",
|
|
1168
1416
|
category: "project-maintenance",
|
|
@@ -2,6 +2,7 @@ import { runDoctor } from "../commands/doctor.js";
|
|
|
2
2
|
import { runStatus } from "../commands/status.js";
|
|
3
3
|
import { runValidateState } from "../commands/validate-state.js";
|
|
4
4
|
import { runClearState } from "../commands/clear-state.js";
|
|
5
|
+
import { runCheckpointRevalidate } from "../commands/checkpoint-revalidate.js";
|
|
5
6
|
import { inspectTarget } from "../commands/inspect.js";
|
|
6
7
|
import { runInit } from "../commands/init.js";
|
|
7
8
|
import { runRoute } from "../commands/route.js";
|
|
@@ -57,6 +58,11 @@ import { runRecordContinuity } from "../commands/record-continuity.js";
|
|
|
57
58
|
import { runReconcileContinuity } from "../commands/reconcile-continuity.js";
|
|
58
59
|
import { runClearContinuity } from "../commands/clear-continuity.js";
|
|
59
60
|
import { runTaskCreate } from "../commands/task-create.js";
|
|
61
|
+
import { runDiscover } from "../commands/discover.js";
|
|
62
|
+
import { runContractCreate } from "../commands/contract-create.js";
|
|
63
|
+
import { runContractRevise } from "../commands/contract-revise.js";
|
|
64
|
+
import { runGateRecord } from "../commands/gate-record.js";
|
|
65
|
+
import { runGateRevalidate } from "../commands/gate-revalidate.js";
|
|
60
66
|
import { runTaskList } from "../commands/task-list.js";
|
|
61
67
|
import { runTaskShow } from "../commands/task-show.js";
|
|
62
68
|
import { runTaskScope } from "../commands/task-scope.js";
|
|
@@ -64,10 +70,22 @@ import { runTaskMigrate } from "../commands/task-migrate.js";
|
|
|
64
70
|
import { runMigrateProtocol } from "../commands/migrate-protocol.js";
|
|
65
71
|
import { runTaskUnlock } from "../commands/task-unlock.js";
|
|
66
72
|
import { runTaskRecover } from "../commands/task-recover.js";
|
|
73
|
+
import { runTaskAbandon } from "../commands/task-abandon.js";
|
|
67
74
|
import { runTaskResume } from "../commands/task-resume.js";
|
|
68
75
|
import { runTaskRepairLegacyRecovery } from "../commands/task-repair-legacy-recovery.js";
|
|
76
|
+
import { runTaskRepairContractBootstrap } from "../commands/task-repair-contract-bootstrap.js";
|
|
77
|
+
import { runTaskMigrateContractBootstrapRepair } from "../commands/task-migrate-contract-bootstrap-repair.js";
|
|
69
78
|
import { runTaskLockStatus } from "../commands/task-lock-status.js";
|
|
70
79
|
import { runProtocolInfo } from "../commands/protocol-info.js";
|
|
80
|
+
import { runDecisionStatus } from "../commands/decision-status.js";
|
|
81
|
+
import { runDecisionShow } from "../commands/decision-show.js";
|
|
82
|
+
import { runContextPlan } from "../commands/context-plan.js";
|
|
83
|
+
import { runModelRoute } from "../commands/model-route.js";
|
|
84
|
+
import { runSemanticPlan } from "../commands/semantic-plan.js";
|
|
85
|
+
import { runTestInventory } from "../commands/test-inventory.js";
|
|
86
|
+
import { runTestUtility } from "../commands/test-utility.js";
|
|
87
|
+
import { runTestPrunePlan } from "../commands/test-prune-plan.js";
|
|
88
|
+
import { runTestPruneProbe } from "../commands/test-prune-probe.js";
|
|
71
89
|
import { runWorkspaceBind } from "../commands/workspace-bind.js";
|
|
72
90
|
import { runWorkspaceStatus } from "../commands/workspace-status.js";
|
|
73
91
|
import { runHandoffCreate } from "../commands/handoff-create.js";
|
|
@@ -103,10 +121,81 @@ import {
|
|
|
103
121
|
* directly. No ownership, recovery, or lifecycle logic may live here.
|
|
104
122
|
*/
|
|
105
123
|
export const COMMAND_EXECUTORS = {
|
|
124
|
+
discover: async ({ target, packageRoot, options }) => ({
|
|
125
|
+
result: await runDiscover({ target, packageRoot, taskId: options.taskId }),
|
|
126
|
+
exitCode: 0,
|
|
127
|
+
}),
|
|
128
|
+
"contract-create": async ({ target, packageRoot, options }) => ({
|
|
129
|
+
result: await runContractCreate({ target, packageRoot, taskId: options.taskId, preset: options.preset, contractFile: options.contractFile }),
|
|
130
|
+
exitCode: 0,
|
|
131
|
+
}),
|
|
132
|
+
"contract-revise": async ({ target, packageRoot, options }) => ({
|
|
133
|
+
result: await runContractRevise({ target, packageRoot, taskId: options.taskId, preset: options.preset, contractFile: options.contractFile }),
|
|
134
|
+
exitCode: 0,
|
|
135
|
+
}),
|
|
136
|
+
"gate-record": async ({ target, packageRoot, options }) => ({
|
|
137
|
+
result: await runGateRecord({ target, packageRoot, taskId: options.taskId, gate: options.gate, status: options.gateStatus, artifacts: options.gateArtifacts, decisions: options.gateDecisions, unknowns: options.gateUnknowns, assumptions: options.gateAssumptions, evidenceFile: options.gateEvidenceFile }),
|
|
138
|
+
exitCode: 0,
|
|
139
|
+
}),
|
|
140
|
+
"gate-revalidate": async ({ target, packageRoot, options }) => ({
|
|
141
|
+
result: await runGateRevalidate({ target, packageRoot, taskId: options.taskId, gate: options.gate, acknowledgeStale: options.acknowledgeStale }),
|
|
142
|
+
exitCode: 0,
|
|
143
|
+
}),
|
|
106
144
|
"protocol-info": async ({ packageVersion }) => ({
|
|
107
145
|
result: await runProtocolInfo({ packageVersion }),
|
|
108
146
|
exitCode: 0,
|
|
109
147
|
}),
|
|
148
|
+
"decision-status": async ({ target, packageRoot, options }) => ({
|
|
149
|
+
result: await runDecisionStatus({ target, packageRoot, health: options.health }),
|
|
150
|
+
exitCode: 0,
|
|
151
|
+
}),
|
|
152
|
+
"decision-show": async ({ target, packageRoot, options }) => ({
|
|
153
|
+
result: await runDecisionShow({ target, packageRoot, taskId: options.taskId, decisionId: options.decisionId }),
|
|
154
|
+
exitCode: 0,
|
|
155
|
+
}),
|
|
156
|
+
"context-plan": async ({ target, packageRoot, options }) => ({
|
|
157
|
+
result: await runContextPlan({ target, packageRoot, taskId: options.taskId, decisionId: options.decisionId, profile: options.profile ?? "balanced" }),
|
|
158
|
+
exitCode: 0,
|
|
159
|
+
}),
|
|
160
|
+
"model-route": async ({ target, packageRoot, options }) => ({
|
|
161
|
+
result: await runModelRoute({
|
|
162
|
+
target, packageRoot, taskId: options.taskId, decisionId: options.decisionId,
|
|
163
|
+
workType: options.workType,
|
|
164
|
+
surfaces: options.surfaces,
|
|
165
|
+
risks: options.risks,
|
|
166
|
+
platforms: options.platforms,
|
|
167
|
+
behaviorChange: options.behaviorChange,
|
|
168
|
+
executableChange: options.executableChange,
|
|
169
|
+
generationRequired: options.generationRequired,
|
|
170
|
+
architectureChange: options.architectureChange,
|
|
171
|
+
ambiguity: options.ambiguity,
|
|
172
|
+
}),
|
|
173
|
+
exitCode: 0,
|
|
174
|
+
}),
|
|
175
|
+
"semantic-plan": async ({ target, packageRoot, options }) => ({
|
|
176
|
+
result: await runSemanticPlan({
|
|
177
|
+
target, packageRoot, taskId: options.taskId, decisionId: options.decisionId,
|
|
178
|
+
kind: options.semanticPlanKind,
|
|
179
|
+
input: options.semanticPlanInput ?? {},
|
|
180
|
+
}),
|
|
181
|
+
exitCode: 0,
|
|
182
|
+
}),
|
|
183
|
+
"test-inventory": async ({ target }) => ({
|
|
184
|
+
result: await runTestInventory({ target }),
|
|
185
|
+
exitCode: 0,
|
|
186
|
+
}),
|
|
187
|
+
"test-utility": async ({ target, packageRoot, options }) => ({
|
|
188
|
+
result: await runTestUtility({ target, packageRoot, taskId: options.taskId }),
|
|
189
|
+
exitCode: 0,
|
|
190
|
+
}),
|
|
191
|
+
"test-prune-plan": async ({ target, packageRoot, options }) => ({
|
|
192
|
+
result: await runTestPrunePlan({ target, packageRoot, taskId: options.taskId }),
|
|
193
|
+
exitCode: 0,
|
|
194
|
+
}),
|
|
195
|
+
"test-prune-probe": async ({ target, packageRoot, options }) => ({
|
|
196
|
+
result: await runTestPruneProbe({ target, packageRoot, taskId: options.taskId, testId: options.testId }),
|
|
197
|
+
exitCode: 0,
|
|
198
|
+
}),
|
|
110
199
|
init: async ({ target, packageRoot, packageVersion, options }) => ({
|
|
111
200
|
result: await runInit({ target, dryRun: options.dryRun, packageRoot, packageVersion, repositoryIndex: true }),
|
|
112
201
|
exitCode: 0,
|
|
@@ -170,7 +259,7 @@ export const COMMAND_EXECUTORS = {
|
|
|
170
259
|
exitCode: 0,
|
|
171
260
|
}),
|
|
172
261
|
next: async ({ target, packageRoot, options, authorityContext, runtimeContext }) => ({
|
|
173
|
-
result: await runNext({ target, packageRoot, taskId: options.taskId, authorityContext, runtimeContext, compact: options.compact }),
|
|
262
|
+
result: await runNext({ target, packageRoot, taskId: options.taskId, authorityContext, runtimeContext, compact: options.compact, explain: options.explain }),
|
|
174
263
|
exitCode: 0,
|
|
175
264
|
}),
|
|
176
265
|
continuity: async ({ target, packageRoot, options }) => ({
|
|
@@ -593,6 +682,10 @@ export const COMMAND_EXECUTORS = {
|
|
|
593
682
|
result: await runClearState({ target, taskId: options.taskId }),
|
|
594
683
|
exitCode: 0,
|
|
595
684
|
}),
|
|
685
|
+
"checkpoint-revalidate": async ({ target, packageRoot, options }) => ({
|
|
686
|
+
result: await runCheckpointRevalidate({ target, packageRoot, taskId: options.taskId }),
|
|
687
|
+
exitCode: 0,
|
|
688
|
+
}),
|
|
596
689
|
"task-create": async ({ target, packageRoot, options }) => ({
|
|
597
690
|
result: await runTaskCreate({
|
|
598
691
|
target,
|
|
@@ -600,11 +693,13 @@ export const COMMAND_EXECUTORS = {
|
|
|
600
693
|
taskId: options.taskId,
|
|
601
694
|
claims: options.claims,
|
|
602
695
|
contractFile: options.contractFile,
|
|
696
|
+
preset: options.preset,
|
|
697
|
+
preview: options.preview,
|
|
603
698
|
}),
|
|
604
699
|
exitCode: 0,
|
|
605
700
|
}),
|
|
606
|
-
"task-list": async ({ target, packageRoot }) => ({
|
|
607
|
-
result: await runTaskList({ target, packageRoot }),
|
|
701
|
+
"task-list": async ({ target, packageRoot, options }) => ({
|
|
702
|
+
result: await runTaskList({ target, packageRoot, phase: options.phase, active: options.active, limit: options.limit, offset: options.offset }),
|
|
608
703
|
exitCode: 0,
|
|
609
704
|
}),
|
|
610
705
|
"task-show": async ({ target, packageRoot, options }) => ({
|
|
@@ -646,10 +741,27 @@ export const COMMAND_EXECUTORS = {
|
|
|
646
741
|
}),
|
|
647
742
|
exitCode: 0,
|
|
648
743
|
}),
|
|
744
|
+
"task-abandon": async ({ target, packageRoot, options }) => ({
|
|
745
|
+
result: await runTaskAbandon({
|
|
746
|
+
target,
|
|
747
|
+
packageRoot,
|
|
748
|
+
taskId: options.taskId,
|
|
749
|
+
acknowledgeAbandonment: options.acknowledgeAbandonment,
|
|
750
|
+
}),
|
|
751
|
+
exitCode: 0,
|
|
752
|
+
}),
|
|
649
753
|
"task-resume": async ({ target, packageRoot, options }) => ({
|
|
650
754
|
result: await runTaskResume({ target, packageRoot, taskId: options.taskId, claims: options.claims }),
|
|
651
755
|
exitCode: 0,
|
|
652
756
|
}),
|
|
757
|
+
"task-repair-contract-bootstrap": async ({ target, packageRoot, options }) => ({
|
|
758
|
+
result: await runTaskRepairContractBootstrap({ target, packageRoot, taskId: options.taskId, acknowledgeRepair: options.acknowledgeRepair }),
|
|
759
|
+
exitCode: 0,
|
|
760
|
+
}),
|
|
761
|
+
"task-migrate-contract-bootstrap-repair": async ({ target, packageRoot, options }) => ({
|
|
762
|
+
result: await runTaskMigrateContractBootstrapRepair({ target, packageRoot, taskId: options.taskId, acknowledgeMigration: options.acknowledgeMigration }),
|
|
763
|
+
exitCode: 0,
|
|
764
|
+
}),
|
|
653
765
|
"task-repair-legacy-recovery": async ({ target, packageRoot, options }) => ({
|
|
654
766
|
result: await runTaskRepairLegacyRecovery({
|
|
655
767
|
target,
|