You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
SDD sdd-explore returns empty task result via OpenCode task delegation (sdd_task_result_empty) #3318
Delegating the SDD sdd-explore phase through the OpenCode task mechanism fails with the typed envelope gentle-ai.sdd-task-result-failure/v1, code sdd_task_result_empty. The subagent runs, but the runtime receives no valid task result. Reproduced 2/2 attempts.
Environment
gentle-ai: 2.3.0
OS/arch: macOS 26.6.1, arm64
Runtime/client: OpenCode, task delegation with subagent_type: sdd-explore
Artifact store: OpenSpec, repo-local
Repository: a private Bun monorepo (details omitted for privacy)
Run sdd-init — succeeds; openspec/config.yaml is created and validated.
Delegate sdd-explore for a new change via the OpenCode task tool with any investigation prompt (Result-Contract prompt included).
The delegation returns the typed failure envelope instead of the SDD Result Contract.
Retry once → identical failure.
Failure envelope (redacted)
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-explore","summary":"sdd-explore returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user.","continuation":"gentle-ai sdd-status --cwd '<repo>' --json"}
Expected vs actual
Expected: sdd-explore returns the SDD Result Contract (status, executive_summary, artifacts, next_recommended, risks, skill_resolution) and writes the exploration artifact.
Actual: no result is delivered; no artifacts are written (openspec/changes/ remains empty); native status reports nextRecommended: sdd-new with all dependencies blocked.
Mutation outcome
None. No change artifacts were created by the failed phase. Prior sdd-init artifacts remain intact (OpenSpec config valid, bootstrap directories present, Engram observations persisted).
Notes
Observed evidence only; root cause not confirmed.
No further SDD phase was attempted after the failure, per the orchestrator contract (no automatic retry, no phase advancement).
New occurrence, same symptom, observed 2026-08-17.
Observed evidence
gentle-ai: 2.2.4
OS/architecture: Linux, x86_64
Client/runtime: OpenCode task delegation with subagent_type: sdd-init
Artifact store: hybrid (OpenSpec + Engram)
Operation shape: three bounded sdd-init delegation attempts with the required Result Contract prompt
Outcomes: all three returned an empty task result; no status, phase result, or diagnostic envelope was delivered
Mutation outcome: no application source changes and no SDD init artifacts were created by those attempts
Preserved state: repository remained clean; the consumer workflow stopped before any dependent SDD phase
Expected vs actual
Expected: sdd-init detects the stack, initializes hybrid persistence/testing capabilities/registry, and returns the structured init result.
Actual: the delegated actor completed without a user-visible result, so the orchestrator could not verify artifacts or advance safely.
Minimal reproduction
Start an SDD session with interactive mode, hybrid artifact store, automatic PR chaining, and an 800-line review budget.
Delegate sdd-init through the OpenCode task mechanism with the project path and the standard SDD-init executor prompt.
Observe an empty task result.
Repeat with a changed corrective prompt and a third explicit bootstrap prompt; the result remains empty.
This is observed evidence only; root cause is unconfirmed. The consumer was stopped fail-closed and no dependent phase was launched. Please associate this occurrence with the existing sdd_task_result_empty investigation.
Observed evidence only; no root cause is asserted.
Environment
Gentle AI: 2.3.0
OpenCode: 1.18.18
OS/architecture: Darwin arm64
Artifact store: OpenSpec
Operation shape
A dedicated sdd-design planning actor was asked to amend an existing design artifact and return the standard SDD Result Contract. The correction was bounded to one architecture decision and did not include implementation, provider, database, or delivery actions.
Attempts and outcomes
Initial launch returned gentle-ai.sdd-task-result-failure/v1 with code: sdd_task_result_empty and no valid task result.
After the required status continuation and explicit user-authorized retry, the same phase returned the same typed empty-result failure again.
The continuation omitted the launched change selector. Because multiple OpenSpec changes were active, native status returned nextRecommended: select-change with ambiguous change selection rather than the state of the launched change. That continuation behavior is separately tracked by #2790.
Expected behavior
The dedicated design actor should return a valid Result Contract and persist the requested design amendment, or return an actionable provider failure with a recovery path bound to the launched change.
Actual behavior
No valid result was delivered in either attempt. The requested design correction was not persisted. The typed contract prohibited further retry or phase advancement.
Mutation and preserved-state evidence
No source, test, database, provider, staging, commit, push, PR, branch, or worktree mutation occurred.
The pre-existing design amendment remained preserved as the only uncommitted artifact.
Tasks and implementation state were not advanced.
Minimal reproduction shape
Use an OpenSpec repository with multiple active changes.
Launch a dedicated sdd-design actor through OpenCode for an existing change.
Observe sdd_task_result_empty.
Execute the supplied continuation once and observe ambiguous change selection.
With explicit authorization, retry the same bounded phase once.
Observe the same typed empty-result failure and no requested artifact mutation.
New occurrence: sdd-propose phase via OpenCode — observed 2026-08-17. Evidence only; no root cause asserted.
Environment
Gentle AI: 2.3.0
OS/architecture: Linux x86_64
Client/runtime: OpenCode task delegation with an SDD propose phase agent
Artifact store: hybrid (OpenSpec + Engram)
Operation shape
Orchestrated SDD run (automatic mode) for a new change. The planning chain had already completed and persisted the exploration artifact in both stores (file + memory). The next phase (sdd-propose) was delegated with a full Result-Contract prompt: required input artifact references, scope boundaries, skills-to-load paths, Engram topic key, and the exact output-contract fields.
Bounded attempts and outcomes
1/1 attempt for sdd-propose: the phase agent ran, but the runtime received no valid task result; the harness returned the typed failure envelope instead of the SDD Result Contract.
Not retried: the envelope is explicitly terminal (Do not retry or advance SDD).
Failure envelope (redacted)
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-propose","summary":"sdd-propose returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user."}
Mutation outcome
None. No proposal artifact was created on disk or in the memory store. The pre-existing exploration artifact remained intact and readable. The native status continuation command run afterwards reported all planning artifacts for the change as missing and downstream dependencies blocked — consistent with the phase having produced nothing.
Expected vs actual
Expected: a Result Contract envelope (status, executive_summary, artifacts, next_recommended, risks, skill_resolution) and a persisted proposal artifact.
The immediately preceding sdd-explore delegation succeeded with identical topology (same client, same delegation mechanism, same prompt contract shape, same stores) minutes before, which suggests the failure is intermittent rather than prompt-shape-specific.
Minimal reproduction
Complete preflight and sdd-init for a repo (hybrid store).
Complete any one SDD phase via OpenCode task delegation (it succeeds and persists artifacts).
Delegate the next phase (sdd-propose) with the same Result-Contract prompt shape.
Observe the typed sdd_task_result_empty envelope and no persisted artifacts for that phase.
Preserved-state evidence
Consumer state fully preserved: earlier-phase artifacts intact, no partial writes, no repository mutation by the failed phase. Reporting stop-point honored; no further SDD actions taken.
Delegated sdd-explore for a new change via the OpenCode task tool with a standard read-only investigation brief requesting a Result Contract.
Delegation returned the typed failure envelope instead of the SDD Result Contract.
Retried once with an explicit "Result Contract must be the last JSON in your response" instruction -> identical failure.
Reproduced 2/2 attempts.
Failure envelope (redacted)
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-explore","summary":"sdd-explore returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user."}
Note: the continuation field pointed to gentle-ai sdd-status --json, but the session artifact store is Engram. The native SDD dispatcher only reads OpenSpec files and reported artifactStore: openspec with no change root, so the continuation was a no-op for this Engram-backed change (consistent with the orchestrator contract's Engram-vs-OpenSpec scoping).
Expected vs actual
Expected: sdd-explore returns the Result Contract and persists the exploration artifact to Engram.
Actual: no result delivered; no Engram explore artifact written; pipeline blocked at the explore phase.
Mutation outcome
None. No change artifacts created. Preflight observation and prior sdd-init artifacts remain intact.
Notes
Observed evidence only; root cause not confirmed.
No further SDD phase was attempted after the failure (no automatic retry beyond the one explicit re-launch, no phase advancement).
The supplied read-only continuation was executed exactly once.
Preserved artifact state after continuation: proposal, specification, and design were present; tasks were absent.
Native status reported design done, nextRecommended: tasks, and no dispatcher blockers, while the typed transport envelope prohibited retry or downstream advancement. The consumer therefore stopped and did not launch tasks.
Sanitized failure envelope
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-design","summary":"sdd-design returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user.","continuation":"gentle-ai sdd-status --cwd '<repo>' --json"}
Safe reason identifier: sdd_task_result_empty.
Expected behavior
The design correction should persist its intended artifact state and return the documented Result Contract, or return a non-empty actionable failure whose recovery contract agrees with native status.
Actual behavior
The correction returned no valid phase result. Existing planning artifacts remained readable and native status considered design complete, but the typed terminal failure required the consumer to stop before tasks. This left valid-looking persisted design state without an admissible transition to the next phase.
Minimal reproduction shape
Use an OpenSpec-backed SDD change with proposal and specifications complete.
Launch a dedicated sdd-design correction through OpenCode in automatic mode.
Observe sdd_task_result_empty.
Execute the supplied status continuation exactly once.
Observe proposal/specification/design present, tasks absent, and native status recommending tasks without blockers.
Honor the typed failure and do not retry or advance.
Mutation and preserved-state evidence
Planning artifacts before tasks remain available.
No tasks artifact was created.
No application implementation, provider call, database action, commit, push, pull request, deployment, reset, or downstream SDD phase occurred after the terminal envelope.
The consumer state remains preserved and blocked pending a supported recovery.
This comment excludes raw arguments, absolute paths, private project/change names, usernames, hostnames, credentials, environment values, source contents, diffs, and provider payloads.
Operation: delegated sdd-explore for a new bounded Framework change with the standard SDD Result Contract requirement.
Attempt 1: returned gentle-ai.sdd-task-result-failure/v1 with code: sdd_task_result_empty; no valid phase result.
The supplied native status continuation was executed exactly once.
One retry was explicitly authorized.
Attempt 2: returned the same typed failure; no valid phase result.
The native status continuation was executed exactly once again.
Expected vs actual
Expected: a valid Explore Result Contract and a persisted exploration artifact, or an actionable provider failure.
Actual: an empty task result and terminal blocked envelope; native status showed no selected change and no phase artifacts.
Failure evidence
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-explore-cost-optimized","summary":"sdd-explore-cost-optimized returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user."}
Mutation and preserved-state evidence
No change artifact, implementation, commit, push, or downstream SDD phase was created by either attempt.
Repository and OpenSpec state remained unchanged; the consumer stopped before advancement.
Minimal reproduction shape
Start an automatic hybrid SDD session.
Delegate sdd-explore through OpenCode for a new bounded change.
Occurrence report — same observable defect class on gentle-ai 2.4.0 (stable), phase sdd-design, plus session-wide dispatch latch
Observed behavior
An SDD phase delegated through the OpenCode task mechanism returned the typed failure envelope gentle-ai.sdd-task-result-failure/v1 with code sdd_task_result_empty for phase sdd-design: the sub-agent ran, but the runtime received no valid task result. Same envelope shape reported here for sdd-explore on 2.3.0.
A later SDD launch in the SAME session was refused without dispatching, with code sdd_task_dispatch_latched (verbatim redacted envelope below): no provider call, no sub-agent launch, no artifact write. Recovery required starting a new session. This matches the stale-envelope-replayed-without-dispatch dimension previously tracked under bug(sdd): sdd-verify returns empty result twice (sdd_task_result_empty) with nothing persisted (v2.3.0) #2950 (closed completed).
Recurrence on this installation: 3 incidents across separate sessions on different days — phase sdd-explore, then sdd-design, then sdd-design again. Every incident was cleared only by a fresh session.
Failure envelopes (redacted)
Original phase failure (reconstructed from session record; exact bytes lost to client compaction):
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_dispatch_latched","phase":"sdd-archive","latchedPhase":"sdd-design","latchedCode":"sdd_task_result_empty","summary":"<phase> was not dispatched. Earlier in this session <latchedPhase> returned sdd_task_result_empty, and SDD launches stay latched afterwards so a failed phase is never silently retried and no later phase advances on top of it.","continuation":"gentle-ai sdd-status --cwd '<repo>' --json"}
Environment
gentle-ai: 2.4.0 (stable; build string carries no prerelease tag)
OS/arch: Windows x86_64, PowerShell 5.1 host shell
Runtime/client: OpenCode, task delegation with subagent_typesdd-design / sdd-archive
Artifact store: hybrid (Engram + OpenSpec files)
Context of the occurrences
First two incidents occurred during normal proposal→design planning on a private Java/Maven repository (details omitted for privacy).
The third incident surfaced when archiving a fully verified change after client-side context compaction: every pre-archive gate was green (tasks complete, verification report re-validated pass, review authority not applicable), and the archive launch hit the latch left by the earlier sdd-design empty result.
Mutation outcome
None from any failed launch: no change artifacts created, no partial writes, prior artifact state intact at every incident. Work was continued manually outside the SDD pipeline under explicit user authorization.
Expected vs actual
Expected: sdd-design returns the SDD Result Contract (status, executive_summary, artifacts, next_recommended, risks, skill_resolution) and persists its artifact.
Actual: empty result → terminal typed failure → every subsequent SDD launch in that session refuses to dispatch until a new session starts.
Notes
Observed evidence only; root cause not confirmed. No retry loops were attempted, per the orchestrator contract.
Not fixed by #3839, and worth saying so explicitly because this issue was listed as a satellite of #3814 while that work was in flight. That classification was made from the title and was wrong.
#3814 fixed a real cause of empty results: phase agents resolved their own inputs through Engram only, so in an OpenSpec workspace an agent had no instruction naming a path and no resolvable tools. That produces an empty result because the agent never obtains its inputs.
Your evidence rules that out here. You report that "the subagent runs, but the runtime receives no valid task result", with an OpenSpec store and a validated openspec/config.yaml. The agent executing and its output not reaching the runtime is a transport failure, which is a different root cause and one this wave did not touch — no commit in it changed OpenCode delegation or the task-result transport.
#3818 gave the result contract a Go owner and a gentle-ai sdd-task-result command so runtimes without their own validating host can enforce it, but that is the classification surface, not the delivery path your report exercises.
New occurrence — sdd-propose via OpenCode on 2.3.0
Observed evidence only; root cause is unconfirmed. Final privacy scan completed before submission.
Environment
Gentle AI: 2.3.0
OpenCode: 1.15.11
OS/architecture: Linux x86_64
Artifact store: Engram
Execution mode: automatic
Operation and bounded outcome
A prior sdd-explore phase completed and its Engram artifact remained readable.
sdd-propose was delegated through the OpenCode task mechanism with the standard Result Contract requirement.
Attempt 1 returned gentle-ai.sdd-task-result-failure/v1 with code sdd_task_result_empty; no proposal artifact was persisted.
The supplied status continuation was executed exactly once; it projected OpenSpec state and could not observe the Engram-backed change.
One retry was explicitly authorized by the user.
Attempt 2 returned the same typed failure; the continuation was executed exactly once again.
No dependent SDD phase was launched.
Sanitized failure envelope
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-propose-derby","summary":"sdd-propose returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user.","continuation":"gentle-ai sdd-status --cwd <repo> --json"}
Expected vs actual
Expected: sdd-propose returns the documented Result Contract and persists the proposal to the selected Engram store.
Actual: both bounded attempts returned an empty-result terminal envelope and no proposal artifact.
Mutation and preserved-state evidence
Existing initialization and exploration artifacts remained intact and readable.
No proposal, specification, design, tasks, application changes, deployment, commit, push, or pull request was created by the failed phase.
Consumer state remains preserved and blocked at proposal.
Minimal reproduction shape
Complete SDD preflight with Engram storage and automatic execution.
Complete sdd-init and sdd-explore.
Delegate sdd-propose through OpenCode with the standard Result Contract.
Observe sdd_task_result_empty and no Engram proposal artifact.
Execute the supplied continuation once.
With explicit user authorization, retry once and observe the same outcome.
Investigation checkpoint: separate output delivery from the SDD latch
Please complete the required issue-form/pre-flight information in place while retaining the original reproduction and comments. The plan below records how to resume this report. It is an investigation design, not an implemented transport fix or approval to relax dispatch safeguards.
Boundaries to preserve
An empty or malformed task result cannot prove success, phase credit, or readiness. It also cannot prove that the child wrote nothing. Keep output delivery, result classification, native artifact/attempt state, and the adapter's subsequent session latch as separate questions.
Static inspection at 01e6fac15df169e8993e02549b9edcbd01abc0ee locates SDD output validation/latching in internal/assets/opencode/plugins/sdd-task-result-artifacts.ts. gentle-ai sdd-task-result classifies/renders results; that command by itself is not proof of an all-phase dispatch-authority gate. General workers such as those in #2609 bypass this SDD-only hook. The review transport is another lifecycle and must not be conflated with this one.
Bounded investigation
Capture one current, named OpenCode/Gentle AI/provider tuple reproducing the original failure. Preserve the exact selected phase and sanitized launch/completion metadata, distinguishing foreground completion from a background launch acknowledgement.
Locate where a genuine child response or error stops reaching the parent: before generation, during child execution, or during host completion/output delivery. Preserve zero-work and retained-work cases separately. File existence is not an admissible substitute for a result.
Compare the host's completion record with the plugin's actual input. A completed-empty result, an explicit provider/transport failure, and a malformed envelope are distinct observations. Do not infer an authentication/model/region cause without the corresponding evidence.
Fix delivery at its demonstrated owner. Do not add a Gentle AI proxy or intercept general workers merely because the visible symptom is similar. Keep this issue linked to the demonstrated upstream correction when one is available, rather than asserting an unverified root fix.
Evaluate any latch change independently against real phase-dispatch authority and failure controls. No automatic retry/advance, inferred task credit, or artifact-based unlocking is proposed. The hasRealWork style of unlatching in the inspected PR fix(opencode): don't latch the session when a failed SDD phase left real work behind #3062 does not repair output delivery and should not be used as a shortcut.
Acceptance evidence to add
Exercise real host rejection before generation, response loss after work, valid non-empty SDD output, empty/malformed SDD output, and background acknowledgement. Require truthful completion/error delivery and no invented task/evidence credit. Verify that general-worker and review-transport behavior is not changed by an SDD-specific fix.
If latch semantics are later changed through a separate reviewed decision, first inventory every affected phase and the existing old-behavior pins. Update the relevant corpus expectations and prove execution using CI's actual driven bench invocation; declaration tests alone are not execution evidence. No reproduction, host run, or bench run was performed for this design.
Resume here
Complete the missing form information and attach the first bounded host-to-plugin trace before selecting code changes. #2855 and #4032 are related reports, not automatically proven instances of the same current cause. This AI-assisted draft records static findings and an evidence plan; it does not claim these issues are fixed or authorize implementation.
Host-to-plugin trace completed on OpenCode 1.18.18
A bounded real-host reproduction now separates the OpenCode transport from Gentle AI's result classifier and session latch.
Controlled setup
OpenCode: 1.18.18
OpenCode tag commit: 31406ccc51b4bd2a4e1e086b2bcaa5f7f804f26d
Gentle AI baseline: 01e6fac15df169e8993e02549b9edcbd01abc0ee
The installed sdd-task-result-artifacts.ts was byte-identical to the repository asset.
All provider traffic was restricted to a disposable localhost endpoint. No credentials, prompts, raw model output, or private repository data were captured.
Results
Child outcome
Parent/plugin observation
Valid non-empty text
One foreground before/after pair; completed task result; accepted.
Successful result with no text parts
Parent-facing result collapsed to empty; Gentle AI emitted sdd_task_result_empty.
Malformed nested task result
Gentle AI emitted sdd_task_result_malformed.
Child HTTP 400 provider error
OpenCode emitted session.error, but the parent/plugin boundary still received the empty-result shape and Gentle AI emitted sdd_task_result_empty.
Background task
The running acknowledgement was correctly ignored as nonterminal; terminal completion arrived later through synthetic parent-message injection, not a second tool.execute.after.
The relevant OpenCode 1.18.18 TaskTool path returns the child's last text part or "" before rendering the foreground completed task envelope. Once that collapse has happened, the Gentle AI plugin cannot truthfully distinguish a legitimate no-text completion from provider-error/output-delivery loss.
Ownership conclusion
This reproduces the original transport symptom at the OpenCode TaskTool boundary. Changing Gentle AI's fail-closed classifier or session latch would hide the ambiguity rather than restore the missing result. No Gentle AI source patch was selected for this issue.
The existing conforming upstream tracker is anomalyco/opencode#38866. The same controlled evidence has been added there rather than opening a duplicate.
Closing this as not planned because SDD has been removed from Gentle AI. This issue was cataloged as SDD-primary in the BA-23 cleanup, so the requested behavior belongs to a retired workflow and is no longer tracked as active backlog.
Please reopen only with fresh evidence from the latest versions used, including exact Gentle AI/Pi versions or commit SHAs and relevant provider or client versions, showing that the same problem affects ODD or another current, non-SDD flow. Without that current-flow impact, we should not carry this as open work.
Activity
Nesbant commentedon Aug 17, 2026
New occurrence, same symptom, observed 2026-08-17.
Observed evidence
taskdelegation withsubagent_type: sdd-initsdd-initdelegation attempts with the required Result Contract promptstatus, phase result, or diagnostic envelope was deliveredExpected vs actual
sdd-initdetects the stack, initializes hybrid persistence/testing capabilities/registry, and returns the structured init result.Minimal reproduction
sdd-initthrough the OpenCode task mechanism with the project path and the standard SDD-init executor prompt.This is observed evidence only; root cause is unconfirmed. The consumer was stopped fail-closed and no dependent phase was launched. Please associate this occurrence with the existing
sdd_task_result_emptyinvestigation.gabuvi7 commentedon Aug 17, 2026
New occurrence:
sdd-designphase via OpenCodeObserved evidence only; no root cause is asserted.
Environment
2.3.01.18.18Operation shape
A dedicated
sdd-designplanning actor was asked to amend an existing design artifact and return the standard SDD Result Contract. The correction was bounded to one architecture decision and did not include implementation, provider, database, or delivery actions.Attempts and outcomes
gentle-ai.sdd-task-result-failure/v1withcode: sdd_task_result_emptyand no valid task result.The continuation omitted the launched change selector. Because multiple OpenSpec changes were active, native status returned
nextRecommended: select-changewith ambiguous change selection rather than the state of the launched change. That continuation behavior is separately tracked by #2790.Expected behavior
The dedicated design actor should return a valid Result Contract and persist the requested design amendment, or return an actionable provider failure with a recovery path bound to the launched change.
Actual behavior
No valid result was delivered in either attempt. The requested design correction was not persisted. The typed contract prohibited further retry or phase advancement.
Mutation and preserved-state evidence
Minimal reproduction shape
sdd-designactor through OpenCode for an existing change.sdd_task_result_empty.Steven-Quihuire commentedon Aug 17, 2026
New occurrence:
sdd-proposephase via OpenCode — observed 2026-08-17. Evidence only; no root cause asserted.Environment
2.3.0taskdelegation with an SDD propose phase agentOperation shape
Orchestrated SDD run (automatic mode) for a new change. The planning chain had already completed and persisted the exploration artifact in both stores (file + memory). The next phase (
sdd-propose) was delegated with a full Result-Contract prompt: required input artifact references, scope boundaries, skills-to-load paths, Engram topic key, and the exact output-contract fields.Bounded attempts and outcomes
sdd-propose: the phase agent ran, but the runtime received no valid task result; the harness returned the typed failure envelope instead of the SDD Result Contract.Do not retry or advance SDD).Failure envelope (redacted)
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-propose","summary":"sdd-propose returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user."}Mutation outcome
None. No proposal artifact was created on disk or in the memory store. The pre-existing exploration artifact remained intact and readable. The native status continuation command run afterwards reported all planning artifacts for the change as missing and downstream dependencies blocked — consistent with the phase having produced nothing.
Expected vs actual
status,executive_summary,artifacts,next_recommended,risks,skill_resolution) and a persisted proposal artifact.propose.Notable detail
The immediately preceding
sdd-exploredelegation succeeded with identical topology (same client, same delegation mechanism, same prompt contract shape, same stores) minutes before, which suggests the failure is intermittent rather than prompt-shape-specific.Minimal reproduction
sdd-initfor a repo (hybrid store).taskdelegation (it succeeds and persists artifacts).sdd-propose) with the same Result-Contract prompt shape.sdd_task_result_emptyenvelope and no persisted artifacts for that phase.Preserved-state evidence
Consumer state fully preserved: earlier-phase artifacts intact, no partial writes, no repository mutation by the failed phase. Reporting stop-point honored; no further SDD actions taken.
fsagastapolar commentedon Aug 18, 2026
Occurrence comment (scrubbed).
Environment
taskdelegation withsubagent_type: sdd-exploreReproduction
sdd-initpreviously completed (artifacts intact).sdd-explorefor a new change via the OpenCode task tool with a standard read-only investigation brief requesting a Result Contract.Failure envelope (redacted)
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-explore","summary":"sdd-explore returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user."}
Note: the
continuationfield pointed togentle-ai sdd-status --json, but the session artifact store is Engram. The native SDD dispatcher only reads OpenSpec files and reportedartifactStore: openspecwith no change root, so the continuation was a no-op for this Engram-backed change (consistent with the orchestrator contract's Engram-vs-OpenSpec scoping).Expected vs actual
sdd-explorereturns the Result Contract and persists the exploration artifact to Engram.Mutation outcome
None. No change artifacts created. Preflight observation and prior
sdd-initartifacts remain intact.Notes
marioSoftmedic commentedon Aug 20, 2026
Additional user-consented occurrence —
sdd-designcorrection on released 2.4.0Observed evidence only; no root cause is asserted. Final privacy scan completed before duplicate lookup and submission.
Environment
2.4.01.18.19Operation shape and bounded outcome
sdd-designcorrection actor was expected to amend/persist the design and return the standard SDD Result Contract.gentle-ai.sdd-task-result-failure/v1, codesdd_task_result_empty, phasesdd-design.nextRecommended: tasks, and no dispatcher blockers, while the typed transport envelope prohibited retry or downstream advancement. The consumer therefore stopped and did not launch tasks.Sanitized failure envelope
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-design","summary":"sdd-design returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user.","continuation":"gentle-ai sdd-status --cwd '<repo>' --json"}Safe reason identifier:
sdd_task_result_empty.Expected behavior
The design correction should persist its intended artifact state and return the documented Result Contract, or return a non-empty actionable failure whose recovery contract agrees with native status.
Actual behavior
The correction returned no valid phase result. Existing planning artifacts remained readable and native status considered design complete, but the typed terminal failure required the consumer to stop before tasks. This left valid-looking persisted design state without an admissible transition to the next phase.
Minimal reproduction shape
sdd-designcorrection through OpenCode in automatic mode.sdd_task_result_empty.Mutation and preserved-state evidence
This comment excludes raw arguments, absolute paths, private project/change names, usernames, hostnames, credentials, environment values, source contents, diffs, and provider payloads.
lealsergio23 commentedon Aug 21, 2026
New occurrence —
sdd-explorevia OpenCodeObserved evidence only; root cause is unconfirmed.
Environment
taskdelegationOperation and bounded outcome
sdd-explorefor a new bounded Framework change with the standard SDD Result Contract requirement.gentle-ai.sdd-task-result-failure/v1withcode: sdd_task_result_empty; no valid phase result.Expected vs actual
Failure evidence
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-explore-cost-optimized","summary":"sdd-explore-cost-optimized returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user."}Mutation and preserved-state evidence
Minimal reproduction shape
sdd-explorethrough OpenCode for a new bounded change.sdd_task_result_empty.Safe identifiers:
reason=sdd_task_result_empty;phase=sdd-explore-cost-optimized;revision=unavailable.,workdir:/Users/leal.sergio/projects/sharksia-delivery-hubeacunar commentedon Aug 25, 2026
Occurrence report — same observable defect class on gentle-ai 2.4.0 (stable), phase
sdd-design, plus session-wide dispatch latchObserved behavior
gentle-ai.sdd-task-result-failure/v1with codesdd_task_result_emptyfor phasesdd-design: the sub-agent ran, but the runtime received no valid task result. Same envelope shape reported here forsdd-exploreon 2.3.0.sdd_task_dispatch_latched(verbatim redacted envelope below): no provider call, no sub-agent launch, no artifact write. Recovery required starting a new session. This matches the stale-envelope-replayed-without-dispatch dimension previously tracked under bug(sdd): sdd-verify returns empty result twice (sdd_task_result_empty) with nothing persisted (v2.3.0) #2950 (closed completed).sdd-explore, thensdd-design, thensdd-designagain. Every incident was cleared only by a fresh session.Failure envelopes (redacted)
Original phase failure (reconstructed from session record; exact bytes lost to client compaction):
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","code":"sdd_task_result_empty","phase":"sdd-design"}Subsequent latched launch (captured verbatim):
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_dispatch_latched","phase":"sdd-archive","latchedPhase":"sdd-design","latchedCode":"sdd_task_result_empty","summary":"<phase> was not dispatched. Earlier in this session <latchedPhase> returned sdd_task_result_empty, and SDD launches stay latched afterwards so a failed phase is never silently retried and no later phase advances on top of it.","continuation":"gentle-ai sdd-status --cwd '<repo>' --json"}Environment
subagent_typesdd-design/sdd-archiveContext of the occurrences
sdd-designempty result.Mutation outcome
Expected vs actual
sdd-designreturns the SDD Result Contract (status, executive_summary, artifacts, next_recommended, risks, skill_resolution) and persists its artifact.Notes
Alan-TheGentleman commentedon Aug 28, 2026
Not fixed by #3839, and worth saying so explicitly because this issue was listed as a satellite of #3814 while that work was in flight. That classification was made from the title and was wrong.
#3814 fixed a real cause of empty results: phase agents resolved their own inputs through Engram only, so in an OpenSpec workspace an agent had no instruction naming a path and no resolvable tools. That produces an empty result because the agent never obtains its inputs.
Your evidence rules that out here. You report that "the subagent runs, but the runtime receives no valid task result", with an OpenSpec store and a validated
openspec/config.yaml. The agent executing and its output not reaching the runtime is a transport failure, which is a different root cause and one this wave did not touch — no commit in it changed OpenCode delegation or the task-result transport.#3818 gave the result contract a Go owner and a
gentle-ai sdd-task-resultcommand so runtimes without their own validating host can enforce it, but that is the classification surface, not the delivery path your report exercises.Leaving this open against the transport.
AncientGear commentedon Aug 29, 2026
New occurrence —
sdd-proposevia OpenCode on 2.3.0Observed evidence only; root cause is unconfirmed. Final privacy scan completed before submission.
Environment
2.3.01.15.11Operation and bounded outcome
sdd-explorephase completed and its Engram artifact remained readable.sdd-proposewas delegated through the OpenCode task mechanism with the standard Result Contract requirement.gentle-ai.sdd-task-result-failure/v1with codesdd_task_result_empty; no proposal artifact was persisted.Sanitized failure envelope
{"schemaName":"gentle-ai.sdd-task-result-failure/v1","status":"blocked","code":"sdd_task_result_empty","phase":"sdd-propose-derby","summary":"sdd-propose returned no valid task result. Do not retry or advance SDD; inspect the existing artifact state and surface the terminal failure to the user.","continuation":"gentle-ai sdd-status --cwd <repo> --json"}Expected vs actual
sdd-proposereturns the documented Result Contract and persists the proposal to the selected Engram store.Mutation and preserved-state evidence
Minimal reproduction shape
sdd-initandsdd-explore.sdd-proposethrough OpenCode with the standard Result Contract.sdd_task_result_emptyand no Engram proposal artifact.Safe identifier:
reason=sdd_task_result_empty; phasesdd-propose-derby; revision unavailable.Alan-TheGentleman commentedon Sep 12, 2026
Investigation checkpoint: separate output delivery from the SDD latch
Please complete the required issue-form/pre-flight information in place while retaining the original reproduction and comments. The plan below records how to resume this report. It is an investigation design, not an implemented transport fix or approval to relax dispatch safeguards.
Boundaries to preserve
An empty or malformed task result cannot prove success, phase credit, or readiness. It also cannot prove that the child wrote nothing. Keep output delivery, result classification, native artifact/attempt state, and the adapter's subsequent session latch as separate questions.
Static inspection at
01e6fac15df169e8993e02549b9edcbd01abc0eelocates SDD output validation/latching ininternal/assets/opencode/plugins/sdd-task-result-artifacts.ts.gentle-ai sdd-task-resultclassifies/renders results; that command by itself is not proof of an all-phase dispatch-authority gate. General workers such as those in #2609 bypass this SDD-only hook. The review transport is another lifecycle and must not be conflated with this one.Bounded investigation
hasRealWorkstyle of unlatching in the inspected PR fix(opencode): don't latch the session when a failed SDD phase left real work behind #3062 does not repair output delivery and should not be used as a shortcut.Acceptance evidence to add
Exercise real host rejection before generation, response loss after work, valid non-empty SDD output, empty/malformed SDD output, and background acknowledgement. Require truthful completion/error delivery and no invented task/evidence credit. Verify that general-worker and review-transport behavior is not changed by an SDD-specific fix.
If latch semantics are later changed through a separate reviewed decision, first inventory every affected phase and the existing old-behavior pins. Update the relevant corpus expectations and prove execution using CI's actual driven bench invocation; declaration tests alone are not execution evidence. No reproduction, host run, or bench run was performed for this design.
Resume here
Complete the missing form information and attach the first bounded host-to-plugin trace before selecting code changes. #2855 and #4032 are related reports, not automatically proven instances of the same current cause. This AI-assisted draft records static findings and an evidence plan; it does not claim these issues are fixed or authorize implementation.
Alan-TheGentleman commentedon Sep 12, 2026
Host-to-plugin trace completed on OpenCode 1.18.18
A bounded real-host reproduction now separates the OpenCode transport from Gentle AI's result classifier and session latch.
Controlled setup
1.18.1831406ccc51b4bd2a4e1e086b2bcaa5f7f804f26d01e6fac15df169e8993e02549b9edcbd01abc0eesdd-task-result-artifacts.tswas byte-identical to the repository asset.Results
sdd_task_result_empty.sdd_task_result_malformed.session.error, but the parent/plugin boundary still received the empty-result shape and Gentle AI emittedsdd_task_result_empty.tool.execute.after.The relevant OpenCode 1.18.18 TaskTool path returns the child's last text part or
""before rendering the foreground completed task envelope. Once that collapse has happened, the Gentle AI plugin cannot truthfully distinguish a legitimate no-text completion from provider-error/output-delivery loss.Ownership conclusion
This reproduces the original transport symptom at the OpenCode TaskTool boundary. Changing Gentle AI's fail-closed classifier or session latch would hide the ambiguity rather than restore the missing result. No Gentle AI source patch was selected for this issue.
The existing conforming upstream tracker is anomalyco/opencode#38866. The same controlled evidence has been added there rather than opening a duplicate.
egdev6 commentedon Sep 25, 2026
Closing this as not planned because SDD has been removed from Gentle AI. This issue was cataloged as SDD-primary in the BA-23 cleanup, so the requested behavior belongs to a retired workflow and is no longer tracked as active backlog.
Please reopen only with fresh evidence from the latest versions used, including exact Gentle AI/Pi versions or commit SHAs and relevant provider or client versions, showing that the same problem affects ODD or another current, non-SDD flow. Without that current-flow impact, we should not carry this as open work.