How this command is triggered — by the user, by Claude, or both
Slash command
/researcher:SKILLopusresearch/cross-ref/The summary Claude sees in its command listing — used to decide when to auto-load this command
# /research:cross-ref
Analyze all processed source notes for cross-cutting patterns.
## Process
1. **Read all files in `research/notes/`.**
2. **Read `research/cross-reference.md`** for previously identified patterns.
3. **Read `${CLAUDE_PLUGIN_ROOT}/reference/pattern-recognition-guide.md`** for the types of patterns worth surfacing and how to assess pattern strength.
4. **Check for existing contradiction resolutions.** If cross-reference.md contains previously resolved contradictions, record them. These will be carried forward if the contradiction still exists after re-analysis.
5. **Id...Analyze all processed source notes for cross-cutting patterns.
Read all files in research/notes/.
Read research/cross-reference.md for previously identified patterns.
Read ${CLAUDE_PLUGIN_ROOT}/reference/pattern-recognition-guide.md for the types of patterns worth surfacing and how to assess pattern strength.
Check for existing contradiction resolutions. If cross-reference.md contains previously resolved contradictions, record them. These will be carried forward if the contradiction still exists after re-analysis.
Identify contradictions (XREF-01). For each pair of sources that address the same claim or question, compare their assertions. A contradiction exists when sources make incompatible claims about the same fact — not when they cover different aspects or use different terminology. For each contradiction found:
Detect shared-origin clusters (XREF-03). Read the origin chain field from each source note. Group sources that cite the same original study, dataset, report, or primary source. For each cluster:
Calculate saturation signals (XREF-02). For each phase question (from research-plan.md):
Thresholds and advisories (explicit):
Fire frequency: these advisories regenerate on every cross-ref run. They are NOT sticky — if a question is still saturated on the next run, the advisory fires again. Do not suppress a repeated advisory; the user needs the current state each run.
Identify cross-cutting patterns (convergence, gap clusters, temporal trends, source-type skew, outliers). When assessing pattern strength, apply shared-origin cluster adjustments: sources in the same cluster count as one data point.
Regenerate research/cross-reference.md using the template structure (Dashboard -> Contradictions -> Saturation Summary -> Shared-Origin Clusters -> pattern types). Carry forward existing contradiction resolutions if the contradiction still exists. Drop resolutions for contradictions that no longer exist in the data. Update the dashboard counts.
Update research/STATE.md — set last cross-reference date to today and reset "Sources since last cross-reference" to 0. After the edit, re-read STATE.md and confirm Last cross-reference is today's date and Sources since last cross-reference is 0. If either field does not match, do not report cross-ref as complete — surface the write failure with the expected vs. actual values and stop. The next /research:process-source call will trust this counter to decide whether to block on the checkpoint; silent drift here produces either a premature or a skipped checkpoint.
confirm: <side-A | side-B | both | neither> (accepting or overriding the suggestion with a specific side) or resolve: <free-text> (providing a custom resolution that gets recorded verbatim in the Contradictions section with user_override=true). Any other response — including implicit agreement by moving forward, lukewarm affirmatives like "sure" without a side specified, or deferrals — is treated as still-unresolved; re-surface the contradiction and re-ask. Do not infer user agreement from silence or from the user starting the next command.| Failure Mode | Prevention |
|---|---|
| Forcing patterns that do not exist — connecting unrelated sources to show "insight" | Each pattern must cite at least two independent sources. If you cannot name them, the pattern is not real. |
| Missing contradictions between sources | Actively compare sources that address the same question. Check whether Source A's numbers match Source B's for the same metric. |
| Recency bias — treating newer sources as automatically more reliable | Note the date of each source contributing to a pattern. Recent is not synonymous with correct, especially for historical or structural claims. |
| Overlooking absence patterns — gaps visible only when comparing across sources | Look for questions that multiple sources reference but none answer with evidence. These are significant gaps, not irrelevant omissions. |
| Echo-chamber patterns — multiple sources tracing to the same original | Trace claims to their origin. If three articles cite the same study, that is one source, not convergence. |
| Treating shared-origin sources as independent corroboration | Check origin chain fields. If two sources cite the same study, they are one data point. Label as Echo in pattern strength. |
| Resolving contradictions without user confirmation | Log contradictions with a suggested resolution, but mark as "unresolved" until the user explicitly confirms. Synthesis is blocked on unresolved core contradictions. |
| Reporting raw saturation % without actionable guidance | Every saturation signal must include direction: "saturated — consider synthesis" or "under-covered — prioritize discovery here." A number alone is not useful. |
| Dropping previous contradiction resolutions on regeneration | Before regenerating, read existing cross-reference.md and extract resolved contradictions. Carry them forward if the contradiction still exists in re-analyzed data. |
| Signal | Count |
|---|---|
| Contradictions (unresolved) | N |
| Contradictions (total) | N |
| Shared-origin clusters | N |
| Saturation advisory | triggered / not triggered |
| Patterns identified | N |
Aggregate saturation: [N%] confirmatory — [converging / still building]
[Contradictions detail, saturation per-question, cluster list, pattern list follow below]
Summarize new patterns found since the last cross-reference. Report: number of contradictions found (unresolved/total), saturation status (aggregate % and any per-question advisories), shared-origin clusters detected. Highlight any contradictions that block synthesis and any questions that are under-covered. If aggregate saturation advisory is triggered, suggest the user consider moving saturated questions to synthesis.
Context-sensitive next-action block (per D-08):
If unresolved contradictions exist:
───────────────────────────────────────────────────────────
▶ NEXT: Resolve the [N] unresolved contradiction(s) above — synthesis is blocked until core contradictions are confirmed.
Also available:
/research:check-gaps — Check coverage after resolving contradictions./research:phase-insight — Get a full picture of phase strength before deciding next steps.───────────────────────────────────────────────────────────
If no blocking contradictions and coverage is converging:
───────────────────────────────────────────────────────────
▶ NEXT: /research:check-gaps — Confirm coverage for Phase [N] before synthesis.
Also available:
/research:process-source <url> — Process additional sources if any questions remain under-covered./research:phase-insight — Analyze phase strength in detail before deciding.───────────────────────────────────────────────────────────
npx claudepluginhub kenziecreative/kenzie-creative --plugin researcher/SKILLResolves GitHub issue via isolated worktree, TDD workflow, and auto-closing PR creation.
/SKILLCreates conventional git commit from conversation intent using git-agent and pushes to remote. Accepts optional Claude model name for co-author.
/SKILLSurfaces current session task from state file, evaluates clarity (prompts for clarification if needed), assesses completion, and verifies if fully done.