The harness now validates a skill's output again after PostProcess, so
output that post-processing makes invalid (e.g. a whitespace-only echo
trimmed to empty) enters the single repair turn instead of returning as
a success. The repair turn now quotes Response.JSON as the previous
assistant reply whenever structured output was returned, falling back to
Response.Text only when there is none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
internal/ai/harness defines the generic Skill interface (Name, Version,
Render, Schema, Validate, PostProcess) and Run, which renders the prompt,
calls Provider.Generate with the skill's schema and the household
temperature, strictly decodes and validates the reply, and on failure sends
exactly one repair turn quoting the problems. A second failure returns a
*BadOutputError matching llm.ErrBadOutput with both problem lists. Provider
errors other than ErrBadOutput pass through unchanged.
Maestro task 38e7bf98-f1d1-4301-b73b-7ec4b51e8b68.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>