Issue #3582968: Report the execute form outcome from one layer
🤖 Generated with the help of an LLM, reviewed and approved by me before posting.
ExecuteToolPluginForm now reports the outcome, once. A denial carries the reason from its AccessResult, a failure is one error, a success is one status. The denial also seeds a failure result on the tool, so a caller reading the result later gets that. Before, it got the BadMethodCallException from getResult().
ToolExecuteForm prints nothing now. Its validateForm() delegates to the plugin form, and a constraint violation lands on the field that carries it. The info markup is built from html_tag elements. The @todo on output display moved next to the line that reads the result, and says what it said before.
ToolExecuteFormTest is the first functional test in tool_explorer. Revert the two form changes, keep the test, and three of the four cases fail. #3582969 (closed) asks for that test too, and covers the list and view pages this one leaves out.