Files
Arvin Xu 185d3c4858 🐛 fix(goal): lay manager plans out by round and surface agent-written deliverables (#19587)
* 🐛 fix(goal): lay manager plans out round by round

The main Agent plan had no dependency field and every planned task was wired
only to the problem node, so a multi-round Goal rendered as one flat row.
Plans now accept dependsOn (existing task node IDs or earlier indexes in the
same plan), written as depends_on edges after validating every reference; the
terminal acceptance Task depends on the delivered leaf Tasks so it renders last.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(task): title a run handoff with its result, not a status

The handoff title becomes the Goal finding title, and titles like 'Completed X'
told the reader nothing about what was found.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(document): credit documents written by lh doc to the agent run

Agents that write reports through lh doc create/edit never passed a tool
runtime, so no document Work was registered and a Goal's deliverables stayed
empty. The CLI now sends LOBEHUB_OPERATION_ID and the document router credits
the write to the run's root operation when the operation is owned and running.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(goal): create the Goal acceptance node and its links atomically

The acceptance node and its decomposes/depends_on edges were written in
separate transactions. An interruption between them left the node detached
for good, because no later tick comes back to link an existing node. They now
commit in one transaction, so a failure rolls the node back and the next tick
retries.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

*  feat(goal): show the final acceptance as a module awaiting sign-off

The terminal Goal acceptance row only carried a small status chip, so the
owner could not tell a delivery awaiting sign-off from one that failed, and
the final report was out of reach. The row now states the acceptance itself
(awaiting your acceptance / did not pass / in progress / accepted), previews
the latest acceptance report under it (also under a gate opened on that
acceptance), and opens the full report in the side panel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(goal): show the final acceptance report only once the goal ran through

The report view appeared on a final acceptance that was still lost, retrying
or parked on a gate, next to a ledger of failed attempts. It now renders only
when the acceptance task is resolved and its latest round passed (awaiting
sign-off) or was accepted; every other state keeps the ordinary row. Drops the
gate-attached report card and the copy for states that no longer render.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(goal): preview the acceptance task delivery when the round wrote no report

A final acceptance judged by the verifier agent settles without a verify report,
so a finished Goal showed only a placeholder. The preview now falls back to the
document the acceptance task registered, then to its newest finding, and opens
that in the side panel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 💄 feat(goal): replace the task list with the final acceptance document

Once the goal's final acceptance finished and passed, nothing is left to
advance, so the whole current-task list gives way to the acceptance document:
its title, a content preview and the sign-off action, with the full text in the
side panel. Until then the list is unchanged. The preview now carries the full
report text, the document body, or the delivery finding.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(goal): preview the acceptance report, not the task delivery

The final acceptance card replacing the task list previewed the acceptance
Task's own delivery when no round wrote a report. That is the product being
accepted, not the judgment the owner signs off on. Read the report the round
wrote, else each check's verdict and reasoning from the latest round, and open
that round's verify report in the Portal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🐛 fix(goal): show the goal's final document in place of the task list

The finished Goal replaced its task list with the acceptance report, while the
owner opens a finished Goal to read what it produced. Show the newest document
the work registered as a deliverable instead (preferring the work over the
acceptance task), preview its content, and open the document itself in the
Portal. Goals that left no document keep the list. Drops the report helpers
and their now-unused copy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 01:15:53 +08:00
..