feat(researcher): source-grounded research report plugin (debut)#5
Conversation
An interactive front-end skill gathers a research brief and launches a bundled Dynamic Workflow that fans out firecrawl retrieval (WebSearch fallback) into cited findings, gates rounds on coverage and contradictions, synthesizes once, edits for the audience, and renders an evolving, source-grounded HTML report where every claim traces to a numbered source. - workflows/research.js: Setup -> Plan (distinct sub-queries) -> assessor-gated round loop (parallel retrievers + Conflict-scout + deep-only Verifier feeding a single Assessor) -> Synthesizer (once) -> Editor (audience) -> Persist (state.json + snapshot, retried) -> Composer (retryable HTML render) - skills/research/SKILL.md: infer-first brief, slug/folder resolution (no index; per-report state.json is the registry), scriptPath launch, follow-up checkpoint - assets/: pinned chart.umd.js (4.5.0) + shipped report.css (fixed class vocab) - single evolving report: append-only source ids and content artifacts; prior output.html snapshotted before each overwrite - register researcher v0.1.0 in the marketplace - design captured in CONTEXT.md + docs/adr/0001-0009
…capability-confirming depth - Cross-run state I/O (ADR-0010, amended ADR-0005): on extend the Synthesizer reads the prior findings shards directly (no read-back swarm through the orchestrator); writes are append-only — this run's new findings go to new shards continuing from priorShardCount, prior shards are never rewritten, and the HEAD counts accumulate. - Follow-up checkpoint is now a structured AskUserQuestion (multiSelect) instead of a prose offer, so extending the evolving report is a real choice, not a free-text guess. - Depth: the Plan stage dedicates a primary/official-docs angle per named product/vendor/standard whose capability the goal hinges on; the Assessor treats an unconfirmed capability claim (secondary/community only, or inferred) as a material, resolvable gap rather than green-lighting on inference; the Verifier flags such claims as needs-evidence so the next round confirms them.
There was a problem hiding this comment.
ℹ️ No critical issues — two points worth a look before the post-merge release.
Reviewed changes — debut of the researcher plugin: an interactive research skill that gathers a brief and launches a bundled Dynamic Workflow producing a source-grounded, cited, evolving HTML report.
- Add
researchorchestrator skill (skills/research/SKILL.md) — infers the brief, resolves the report folder/slug, detectsmmdc, launches the Workflow, and runs the follow-up checkpoint as a structuredAskUserQuestion. - Add bundled Dynamic Workflow (
workflows/research.js) — Setup → Plan → Assessor-gated round loop (parallel firecrawl retrievers → Conflict-scout → deep-only Verifier → Assessor) → Synthesize → Edit → append-only sharded Persist → HTML Compose. - Cross-run append-only state I/O — extend reads prior
findings/NNN.jsonshards directly in the Synthesizer; new findings append as new shards frompriorShardCount; thestate.jsonHEAD counts accumulate. - Shipped assets + docs — version-pinned
chart.umd.js(Chart.js 4.5.0),report.css(whose class vocabulary matches the Composer's emitted HTML), ten ADRs, README/CONTEXT, and a workflow diagram. - Marketplace + plugin manifest — registers
researcherat0.1.0with aproductivitycategory.
The workflow orchestration is well-structured and the append-only shard design is sound. The two findings below are inline: a version-baseline inconsistency that will mis-tag the release, and a low-severity index-coherence note on deep runs.
Claude Opus | 𝕏
Addresses pullfrog review on PR #5. - Version baseline: set plugin.json + marketplace.json researcher entry to 0.0.0 so the documented post-merge `release.sh researcher minor` tags researcher/v0.1.0 (was 0.1.0, which would have bumped to v0.2.0). Removes a manual reset step from the release flow. - Round loop: reorder Verifier -> Conflict-scout -> Assessor so the scout's conflict #index references align with the post-splice corpus the Assessor reasons over (the Verifier was splicing refuted findings out from under the scout's indices). Only affects deep runs; quick/standard skip the Verifier.
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — re-review of the single new commit since the prior pullfrog review (6429514), which addresses both findings from that review.
- Reset the version baseline to
0.0.0— bothplugin.jsonand themarketplace.jsonresearcher entry now ship0.0.0, so the documented post-merge./scripts/release.sh researcher minorproduces0.1.0/ tagresearcher/v0.1.0. Bakes the pre-debut baseline into the commit and removes the manual reset step. - Reordered the round loop to Verifier → Conflict-scout → Assessor — the Conflict-scout now builds its
#indexreferences on the post-splice corpus the Assessor reasons over, keeping them aligned. The Verifier still reads its own pre-splice corpus, so its descending-orderspliceremains internally consistent; quick/standard runs (no Verifier) are unchanged.
Both prior threads are resolved. No new issues introduced.
Claude Opus | 𝕏

Introduces the researcher plugin to
main— an interactive skill that gathers a research brief (depth, recency, source mix, audience) and launches a bundled Dynamic Workflow that fans out firecrawl retrieval into cited findings, gates rounds on coverage + contradictions, synthesizes one cited answer, and renders an evolving HTML report. Follow-ups extend the same report.Commits
d7797fd— initial plugin (skill + workflow + assets + ADRs 0001–0009).6429514— cross-run I/O rework + checkpoint/depth fixes (below).What changed in 6429514
priorShardCount, prior shards are never rewritten, and the HEAD counts accumulate.AskUserQuestion(multiSelect): the skill now hands the decision back as selectable options (one per proposed follow-up, full text in the description) instead of a prose offer. Fixes the observed flow where the report ended with a free-text question and the checkpoint was effectively skipped.needs-evidence. Addresses a deep run that settled "does X support Y" by inference instead of fetching X's own docs.Requirements
Dynamic Workflows (Claude Code v2.1.154+, paid plan) + firecrawl MCP with
firecrawl_search/firecrawl_scrapeallow-listed.mmdcoptional (diagrams). See the plugin README.Release (after merge)
Debut as researcher/v0.1.0: reset the version baseline to
0.0.0(matches every other plugin's pre-debut state), then./scripts/release.sh researcher minor→ tagsresearcher/v0.1.0.