agentscope-ai / agentscope-ai/agentscope-java

[Bug]: Dynamic subagent notifications drop FAILED/CANCELLED payloads

Open
#2,159 1 comment 0 reactions 0 assignees View on GitHub
area/harness bug
Dominant language
Java
Stars
5.6k
Forks
1.3k
Avg merge
4d 12h
Merged PRs (30d)
77

Description

## Summary

Dynamic/background subagent completion notifications lose authoritative FAILED/CANCELLED terminal information. A failed task is announced to the parent as "has completed" with `(no output)`, while the Harness `TaskRecord` contains the real failed status and error.

## Reproduction

Using AgentScope Java main at `e3a412ed2cc944e401da861c8d5e464b967724e9` / `2.0.1-SNAPSHOT`:

1. Build a `HarnessAgent` with dynamic subagents and the default workspace-backed task repository/message bus.
2. Spawn a background child whose invocation terminates with `IllegalStateException("failure-marker")`.
3. Wait until `TaskRepository.getTask(...)` reports `FAILED` and contains `failure-marker`.
4. Continue the parent so `InboxMiddleware` drains the completion notification.
5. Inspect the injected `HintBlock`.

Actual hint:

```
Background subagent task '...' (agent=...) has completed.

Result:

(no output)
```

The parent never receives the authoritative failed status or error. The same callback shape cannot represent cancellation reason/status either.

## Source evidence

`HarnessAgent.Builder.wireTaskRepositoryMessageBus(...)` installs a `WorkspaceTaskRepository` completion callback whose arguments end at nullable `result`. It formats every terminal callback as "has completed" and uses:

```java
result != null ? result : "(no output)"
```

No task status, error message, or cancellation payload is available to the notification formatter.

## Expected behavior

The Harness-owned completion delivery should carry a typed terminal outcome into parent reasoning:

- task id and subagent identity
- terminal status (COMPLETED / FAILED / CANCELLED)
- result for success
- authoritative error for failure
- cancellation reason when available

The fix should remain in the Harness task/message-bus lifecycle. Consumers should not need to add a second completion callback, task store, or delivery registry.

## Impact

This blocks reliable parent aggregation and user-visible partial-failure reporting for background collaboration: the task readback says FAILED while automatic parent reasoning says only "(no output)".

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.