deep-research: Synthesize stage emits schema-valid but degenerate report (verified claims dropped)

Resolved 💬 2 comments Opened Jun 28, 2026 by emmanuel-conflux Closed Jun 28, 2026

Summary

The built-in deep-research skill's Synthesize stage (final stage of a run) can emit a
schema-valid but degenerate report: a placeholder summary that silently discards the verified
claims gathered earlier in the run. No error is raised, so the run looks successful while the
final report is a stub.

Symptom

At the end of a run, the final report is:

{
  "summary": "test summary to isolate schema parsing",
  "findings": ["test claim"]
}

This passes schema validation and is emitted as the result, but the content is a test/placeholder,
not the actual synthesis of the research.

Evidence

Observed on a real run:

  • 26 sources retrieved and processed
  • 23 claims verified and present in the intermediate logs/preview
  • Final report: only the stub values above (summary + a single placeholder finding)
  • Reproducibility: observed twice with the same pattern

The verified claims were visible in the output logs before the Synthesize stage. The substance of
the research existed; the final report did not reflect it.

Probable cause

The Synthesize stage generates a script at runtime that composes the report. That script includes a
fallback branch for report == null, but no branch for the "schema-valid yet stub-content" case
(e.g. findings being a single placeholder element). The synthesis agent, for some reason
(internal test path / parsing fallback), produces the test output at runtime; the script accepts it
as valid and emits it. This is not a hardcoded stub in the skill source — it emerges at runtime
from the script-generating agent.

Proposed fix

In the Synthesize stage, add a post-generation guard that detects degenerate-but-schema-valid
reports. Detection criteria (any of):

  • findings is empty, or
  • findings contains exactly one element matching a known placeholder (e.g. "test claim",

"placeholder"), or

  • summary matches known test values (e.g. "test summary…").

If detected, apply the same behavior as the !report branch: save the raw verified claims from the
run logs instead of emitting the stub report.

Environment

  • Claude Code, built-in deep-research skill.
  • Reported by: emmanuel-conflux (project: ux-process).

---

*Mitigation in our project, pending an upstream fix: after each deep-research, verify the
synthesis; if findings is empty or contains a placeholder, recompose the report from the verified
claims in the run logs instead of discarding the research.*

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗