Skip to content

fix(report): explain how to synthesize a flat-saved result (#537)#543

Merged
the-data-viking merged 1 commit into
mainfrom
fix/save-persists-synthesis
Jun 3, 2026
Merged

fix(report): explain how to synthesize a flat-saved result (#537)#543
the-data-viking merged 1 commit into
mainfrom
fix/save-persists-synthesis

Conversation

@claude-dataviking

Copy link
Copy Markdown
Contributor

Summary

synthpanel report <id> on a flat result saved via panel run --save that has no synthesis rendered ## Synthesis — _Not run._ with no path forward. Dogfooders were surprised: the synthesis block (summary/themes/agreements/recommendation) is the headline value of a run, and analyze is descriptive-only/non-LLM.

Investigation / scope (conservative, per the issue's alternative ask)

I traced the --save flow before changing behavior:

  • The single-model panel run --save path already computes synthesis (on by default) and persists it — save_panel_result(..., synthesis=synthesis_dict) (cli/commands.py), threaded in commit f2803c6. I verified end-to-end (mocked run) that the saved JSON carries top-level synthesis and report renders Status: ran. So the originally-reported single-model gap is already fixed on main.
  • The remaining Not run cases are legitimate, not bugs: --no-synthesis, a halted/invalid run (synthesis is intentionally skipped on truncated panels), and the bare ensemble path (--models a,b), which by design produces a per-model comparison rather than a synthesized narrative (and the bare-ensemble save does not pass synthesis because none is computed).

Forcing synthesis onto those paths would be an invasive behavior change with real cost/latency implications. Instead I took the issue's explicit alternative: have report explain how to generate synthesis for a flat-saved result. The report now points the user at the existing synthpanel panel synthesize <id> re-synthesis command and notes that panel run synthesizes by default at run time.

The hint is scoped to flat saves (not rounds-shaped payloads), and uses the result's id when present, falling back to a <result-id> placeholder.

Why not auto-persist on the ensemble path

The bare ensemble path doesn't compute synthesis at all (documented design: blend mode synthesizes, bare ensemble compares). Wiring synthesis into it is a feature, not a bug fix, and out of scope for a conservative single-purpose change. Flagging here per instructions.

Tests (in tests/test_reporting_markdown.py)

Gates

  • ruff check . / ruff format --check .: pass
  • pytest tests/test_reporting_markdown.py tests/test_cli_report.py tests/test_reporting_loader.py tests/test_inspect.py: 37 passed

Closes #537

🤖 Generated with Claude Code

A flat result saved via `panel run --save` that carries no synthesis
rendered `## Synthesis — _Not run._` with no path forward, which
surprised dogfooders: the synthesis block is the headline value of a
run, and `analyze` is descriptive-only.

Note on scope: the single-model `--save` path already persists synthesis
when it runs (threaded through save_panel_result; verified end-to-end).
The remaining "Not run" cases are legitimate — `--no-synthesis`, a
halted/invalid run, or the bare ensemble path which intentionally
produces a per-model comparison rather than a synthesized narrative.
Rather than force synthesis onto those paths (a behavior change), the
report now tells the user how to produce it for an already-saved result:
`synthpanel panel synthesize <id>` (the existing re-synthesis command),
and notes that `panel run` synthesizes by default at run time.

The hint is scoped to flat saves (not rounds-shaped payloads) and uses
the result's id when present, falling back to a `<result-id>`
placeholder.

Closes #537

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying synthpanel with  Cloudflare Pages  Cloudflare Pages

Latest commit: ea76be1
Status: ✅  Deploy successful!
Preview URL: https://1dd578d5.synthpanel.pages.dev
Branch Preview URL: https://fix-save-persists-synthesis.synthpanel.pages.dev

View logs

@claude-dataviking claude-dataviking added the semver:patch Bump patch version on merge label Jun 3, 2026
@the-data-viking the-data-viking merged commit fe893ea into main Jun 3, 2026
19 checks passed
@the-data-viking the-data-viking deleted the fix/save-persists-synthesis branch June 3, 2026 23:12
the-data-viking added a commit that referenced this pull request Jun 3, 2026
Cuts the patch release containing the four bug fixes merged today (#540 cost
hint, #541 mcp-install path, #542 dry-run vision guard, #543 report synthesize
hint) plus the attachments docs (#535).

Pre-bumps __version__.py and re-renders the version artifacts (render_site.py,
render_site_markdown.py, render_server_card.py) so auto-tag.yml hits its
"nothing to commit" path and only tags v1.5.6 — its direct version-bump push
to main is currently rejected by branch protection (GH013), which is why
applying semver:patch to a regular fix PR (#543) failed to release. Filing
that pipeline issue separately.

Co-authored-by: Wesley Johnson <wesley@dataviking.tech>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patch Bump patch version on merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

panel run --save persists raw Q&A but no synthesis; report shows 'Synthesis: Not run'

2 participants