Skip to content

discovery/research: a single topic with N gaps has no fan-out path at either the skill or the researcher level #4151

Description

@kyle-sexton

Summary

A single research topic that decomposes into N gaps has no fan-out path at either level of the discovery plugin. /discovery:research absorbs it as one run under one researcher's fixed 40-turn ceiling; /discovery:research-deep splits only on separable topics and would keep gaps that share claims together; and the researcher body's parallel-worker clause is a principle with no step in the phase procedure that fires it. The lever exists twice and neither copy engages. The cost is depth, not correctness: the run passes its gates while leaving on-point primaries unfetched.

Observed

Claude Code 2.1.270, Windows, this repo's orchestration-audit worktree, 2026-09-13.

One discovery:researcher was dispatched through /discovery:research with a brief carrying five numbered gaps (G1 to G5) across five vendor pools (Anthropic, OpenAI, Google, Microsoft, LangChain) plus a 28-row do-not-re-research corpus. The envelope carried Capability flags: nested spawning available.

Dispatched 01:32:43Z
Finished 01:50:35Z (17.8 min)
Tool uses (harness trailer) 67
Subagent tokens (harness trailer) 307,384
Nested Agent tool uses 0 (grep of the run's task output at the time)

The run passed the artifact gate and the coverage ledger, and its falsification lane found real counter-evidence, so the artifact is usable. What it gave up:

  • Two on-point measurements were surfaced and recorded as Tier 3 but never fetched, for want of turns: an Osmani/ETH-Zurich context-file study and the IFScale instruction-density preprint (arXiv 2507.11538). Both bear directly on the decision the research was commissioned for.
  • Three sub-questions were left "not stated" that a worker holding one gap would have chased.

What the bodies say

  • plugins/discovery/skills/research/SKILL.md:29 routes "a multi-topic or workflow-driven pass" to research-deep. Line 98 auto-detects a broad topic (2+ vendors, 3+ products, comparison, migration) but the only consequence is doubled query minimums. It neither splits the run nor refuses it.
  • plugins/discovery/skills/research-deep/SKILL.md:41 runs the multi-topic check on "separable subjects that share no claims" and spawns one researcher per topic. Gaps that share a source (here, one sub-agents page fed three of the five) fail that test, so the check keeps them in one dispatch by design.
  • plugins/discovery/agents/researcher.md:9 fixes maxTurns: 40. Lines 313 to 315 allow parallel workers "only for genuine throughput, meaning several independent queries of equal standing," which reads as a restriction and biases toward inline.
  • plugins/discovery/skills/research/SKILL.md:196 states the permission as a principle: "Use parallel workers for breadth within a phase." skills/research/context/discipline.md:180 already assumes phases "launch queries in parallel." Nothing in the numbered phase procedure turns either into a step, so in practice a worker with N gaps runs them serially against one turn budget.
  • discipline.md:244 forbids running phases in parallel with each other, which is right, and says nothing about parallelism within a phase.

So the ask lands in a gap: too coupled for research-deep's split, too big for one researcher's ceiling, and the broad-topic detector only raises the floor the single worker has to clear.

Candidate fixes (competing, pick one)

  1. /discovery:research runs the multi-topic check itself and refuses a brief carrying N numbered gaps, pointing at research-deep instead of absorbing it. Cheapest; moves the problem rather than solving it if research-deep's check still keeps shared-claim gaps together.
  2. research-deep's multi-topic check counts numbered gaps as well as separable topics, grouping gaps that share a primary into one worker rather than keeping the whole ask whole. Keeps the split at the orchestrator, where the post-dispatch boundary and per-sub-slice gating already live.
  3. The researcher body gains a Phase 2 rule: when the dispatch says nesting is available, one worker per numbered gap, parent-side merge of the fetch logs; Phase 1 breadth queries run in parallel across source categories. Turns the line-196 principle into a procedure step and relaxes the line-313 restriction. Fan-out inside a topic is the shape the miss actually had, and this is the only option that addresses it directly.

Option 3 alone would have covered this case. Options 1 and 2 leave a single-topic multi-gap ask under one ceiling unless paired with 3.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions