Skip to content

feat(researcher): source-grounded research report plugin (debut)#5

Merged
grixu merged 3 commits into
mainfrom
feat/researcher-plugin
Jun 22, 2026
Merged

feat(researcher): source-grounded research report plugin (debut)#5
grixu merged 3 commits into
mainfrom
feat/researcher-plugin

Conversation

@grixu

@grixu grixu commented Jun 22, 2026

Copy link
Copy Markdown
Owner

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

  • 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 → structured 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.
  • Capability-confirming 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 (high bar on deep); the Verifier flags such claims as 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_scrape allow-listed. mmdc optional (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 → tags researcher/v0.1.0.

grixu added 2 commits June 18, 2026 21:52
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.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ 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 research orchestrator skill (skills/research/SKILL.md) — infers the brief, resolves the report folder/slug, detects mmdc, launches the Workflow, and runs the follow-up checkpoint as a structured AskUserQuestion.
  • 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.json shards directly in the Synthesizer; new findings append as new shards from priorShardCount; the state.json HEAD 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 researcher at 0.1.0 with a productivity category.

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.

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Claude Opus𝕏

Comment thread plugins/researcher/.claude-plugin/plugin.json Outdated
Comment thread plugins/researcher/workflows/research.js
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.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 — both plugin.json and the marketplace.json researcher entry now ship 0.0.0, so the documented post-merge ./scripts/release.sh researcher minor produces 0.1.0 / tag researcher/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 #index references on the post-splice corpus the Assessor reasons over, keeping them aligned. The Verifier still reads its own pre-splice corpus, so its descending-order splice remains internally consistent; quick/standard runs (no Verifier) are unchanged.

Both prior threads are resolved. No new issues introduced.

Pullfrog  | View workflow run | Using Claude Opus𝕏

@grixu grixu merged commit 0746502 into main Jun 22, 2026
2 checks passed
@grixu grixu deleted the feat/researcher-plugin branch June 22, 2026 09:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant