flonat-research 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/domain-reviewer.md +336 -0
- package/.claude/agents/fixer.md +226 -0
- package/.claude/agents/paper-critic.md +370 -0
- package/.claude/agents/peer-reviewer.md +289 -0
- package/.claude/agents/proposal-reviewer.md +215 -0
- package/.claude/agents/referee2-reviewer.md +367 -0
- package/.claude/agents/references/journal-referee-profiles.md +354 -0
- package/.claude/agents/references/paper-critic/council-personas.md +77 -0
- package/.claude/agents/references/paper-critic/council-prompts.md +198 -0
- package/.claude/agents/references/peer-reviewer/report-template.md +199 -0
- package/.claude/agents/references/peer-reviewer/sa-prompts.md +260 -0
- package/.claude/agents/references/peer-reviewer/security-scan.md +188 -0
- package/.claude/agents/references/proposal-reviewer/report-template.md +144 -0
- package/.claude/agents/references/proposal-reviewer/sa-prompts.md +149 -0
- package/.claude/agents/references/referee-config.md +114 -0
- package/.claude/agents/references/referee2-reviewer/audit-checklists.md +287 -0
- package/.claude/agents/references/referee2-reviewer/report-template.md +334 -0
- package/.claude/rules/design-before-results.md +52 -0
- package/.claude/rules/ignore-agents-md.md +17 -0
- package/.claude/rules/ignore-gemini-md.md +17 -0
- package/.claude/rules/lean-claude-md.md +45 -0
- package/.claude/rules/learn-tags.md +99 -0
- package/.claude/rules/overleaf-separation.md +67 -0
- package/.claude/rules/plan-first.md +175 -0
- package/.claude/rules/read-docs-first.md +50 -0
- package/.claude/rules/scope-discipline.md +28 -0
- package/.claude/settings.json +125 -0
- package/.context/current-focus.md +33 -0
- package/.context/preferences/priorities.md +36 -0
- package/.context/preferences/task-naming.md +28 -0
- package/.context/profile.md +29 -0
- package/.context/projects/_index.md +41 -0
- package/.context/projects/papers/nudge-exp.md +22 -0
- package/.context/projects/papers/uncertainty.md +31 -0
- package/.context/resources/claude-scientific-writer-review.md +48 -0
- package/.context/resources/cunningham-multi-analyst-agents.md +104 -0
- package/.context/resources/cunningham-multilang-code-audit.md +62 -0
- package/.context/resources/google-ai-co-scientist-review.md +72 -0
- package/.context/resources/karpathy-llm-council-review.md +58 -0
- package/.context/resources/multi-coder-reliability-protocol.md +175 -0
- package/.context/resources/pedro-santanna-takeaways.md +96 -0
- package/.context/resources/venue-rankings/abs_ajg_2024.csv +1823 -0
- package/.context/resources/venue-rankings/abs_ajg_2024_econ.csv +356 -0
- package/.context/resources/venue-rankings/cabs_4_4star_theory.csv +40 -0
- package/.context/resources/venue-rankings/core_2026.csv +801 -0
- package/.context/resources/venue-rankings.md +147 -0
- package/.context/workflows/README.md +69 -0
- package/.context/workflows/daily-review.md +91 -0
- package/.context/workflows/meeting-actions.md +108 -0
- package/.context/workflows/replication-protocol.md +155 -0
- package/.context/workflows/weekly-review.md +113 -0
- package/.mcp-server-biblio/formatters.py +158 -0
- package/.mcp-server-biblio/pyproject.toml +11 -0
- package/.mcp-server-biblio/server.py +678 -0
- package/.mcp-server-biblio/sources/__init__.py +14 -0
- package/.mcp-server-biblio/sources/base.py +73 -0
- package/.mcp-server-biblio/sources/formatters.py +83 -0
- package/.mcp-server-biblio/sources/models.py +22 -0
- package/.mcp-server-biblio/sources/multi_source.py +243 -0
- package/.mcp-server-biblio/sources/openalex_source.py +183 -0
- package/.mcp-server-biblio/sources/scopus_source.py +309 -0
- package/.mcp-server-biblio/sources/wos_source.py +508 -0
- package/.mcp-server-biblio/uv.lock +896 -0
- package/.scripts/README.md +161 -0
- package/.scripts/ai_pattern_density.py +446 -0
- package/.scripts/conf +445 -0
- package/.scripts/config.py +122 -0
- package/.scripts/count_inventory.py +275 -0
- package/.scripts/daily_digest.py +288 -0
- package/.scripts/done +177 -0
- package/.scripts/extract_meeting_actions.py +223 -0
- package/.scripts/focus +176 -0
- package/.scripts/generate-codex-agents-md.py +217 -0
- package/.scripts/inbox +194 -0
- package/.scripts/notion_helpers.py +325 -0
- package/.scripts/openalex/query_helpers.py +306 -0
- package/.scripts/papers +227 -0
- package/.scripts/query +223 -0
- package/.scripts/session-history.py +201 -0
- package/.scripts/skill-health.py +516 -0
- package/.scripts/skill-log-miner.py +273 -0
- package/.scripts/sync-to-codex.sh +252 -0
- package/.scripts/task +213 -0
- package/.scripts/tasks +190 -0
- package/.scripts/week +206 -0
- package/CLAUDE.md +197 -0
- package/LICENSE +21 -0
- package/MEMORY.md +38 -0
- package/README.md +269 -0
- package/docs/agents.md +44 -0
- package/docs/bibliography-setup.md +55 -0
- package/docs/council-mode.md +36 -0
- package/docs/getting-started.md +245 -0
- package/docs/hooks.md +38 -0
- package/docs/mcp-servers.md +82 -0
- package/docs/notion-setup.md +109 -0
- package/docs/rules.md +33 -0
- package/docs/scripts.md +303 -0
- package/docs/setup-overview/setup-overview.pdf +0 -0
- package/docs/skills.md +70 -0
- package/docs/system.md +159 -0
- package/hooks/block-destructive-git.sh +66 -0
- package/hooks/context-monitor.py +114 -0
- package/hooks/postcompact-restore.py +157 -0
- package/hooks/precompact-autosave.py +181 -0
- package/hooks/promise-checker.sh +124 -0
- package/hooks/protect-source-files.sh +81 -0
- package/hooks/resume-context-loader.sh +53 -0
- package/hooks/startup-context-loader.sh +102 -0
- package/package.json +51 -0
- package/packages/cli-council/.github/workflows/claude-code-review.yml +44 -0
- package/packages/cli-council/.github/workflows/claude.yml +50 -0
- package/packages/cli-council/README.md +100 -0
- package/packages/cli-council/pyproject.toml +43 -0
- package/packages/cli-council/src/cli_council/__init__.py +19 -0
- package/packages/cli-council/src/cli_council/__main__.py +185 -0
- package/packages/cli-council/src/cli_council/backends/__init__.py +8 -0
- package/packages/cli-council/src/cli_council/backends/base.py +81 -0
- package/packages/cli-council/src/cli_council/backends/claude.py +25 -0
- package/packages/cli-council/src/cli_council/backends/codex.py +27 -0
- package/packages/cli-council/src/cli_council/backends/gemini.py +26 -0
- package/packages/cli-council/src/cli_council/checkpoint.py +212 -0
- package/packages/cli-council/src/cli_council/config.py +51 -0
- package/packages/cli-council/src/cli_council/council.py +391 -0
- package/packages/cli-council/src/cli_council/models.py +46 -0
- package/packages/llm-council/.github/workflows/claude-code-review.yml +44 -0
- package/packages/llm-council/.github/workflows/claude.yml +50 -0
- package/packages/llm-council/README.md +453 -0
- package/packages/llm-council/pyproject.toml +42 -0
- package/packages/llm-council/src/llm_council/__init__.py +23 -0
- package/packages/llm-council/src/llm_council/__main__.py +259 -0
- package/packages/llm-council/src/llm_council/checkpoint.py +193 -0
- package/packages/llm-council/src/llm_council/client.py +253 -0
- package/packages/llm-council/src/llm_council/config.py +232 -0
- package/packages/llm-council/src/llm_council/council.py +482 -0
- package/packages/llm-council/src/llm_council/models.py +46 -0
- package/packages/mcp-bibliography/MEMORY.md +31 -0
- package/packages/mcp-bibliography/_app.py +226 -0
- package/packages/mcp-bibliography/formatters.py +158 -0
- package/packages/mcp-bibliography/log/2026-03-13-2100.md +35 -0
- package/packages/mcp-bibliography/pyproject.toml +15 -0
- package/packages/mcp-bibliography/run.sh +20 -0
- package/packages/mcp-bibliography/scholarly_formatters.py +83 -0
- package/packages/mcp-bibliography/server.py +1857 -0
- package/packages/mcp-bibliography/tools/__init__.py +28 -0
- package/packages/mcp-bibliography/tools/_registry.py +19 -0
- package/packages/mcp-bibliography/tools/altmetric.py +107 -0
- package/packages/mcp-bibliography/tools/core.py +92 -0
- package/packages/mcp-bibliography/tools/dblp.py +52 -0
- package/packages/mcp-bibliography/tools/openalex.py +296 -0
- package/packages/mcp-bibliography/tools/opencitations.py +102 -0
- package/packages/mcp-bibliography/tools/openreview.py +179 -0
- package/packages/mcp-bibliography/tools/orcid.py +131 -0
- package/packages/mcp-bibliography/tools/scholarly.py +575 -0
- package/packages/mcp-bibliography/tools/unpaywall.py +63 -0
- package/packages/mcp-bibliography/tools/zenodo.py +123 -0
- package/packages/mcp-bibliography/uv.lock +711 -0
- package/scripts/setup.sh +143 -0
- package/skills/beamer-deck/SKILL.md +199 -0
- package/skills/beamer-deck/references/quality-rubric.md +54 -0
- package/skills/beamer-deck/references/review-prompts.md +106 -0
- package/skills/bib-validate/SKILL.md +261 -0
- package/skills/bib-validate/references/council-mode.md +34 -0
- package/skills/bib-validate/references/deep-verify.md +79 -0
- package/skills/bib-validate/references/fix-mode.md +36 -0
- package/skills/bib-validate/references/openalex-verification.md +45 -0
- package/skills/bib-validate/references/preprint-check.md +31 -0
- package/skills/bib-validate/references/ref-manager-crossref.md +41 -0
- package/skills/bib-validate/references/report-template.md +82 -0
- package/skills/code-archaeology/SKILL.md +141 -0
- package/skills/code-review/SKILL.md +265 -0
- package/skills/code-review/references/quality-rubric.md +67 -0
- package/skills/consolidate-memory/SKILL.md +208 -0
- package/skills/context-status/SKILL.md +126 -0
- package/skills/creation-guard/SKILL.md +230 -0
- package/skills/devils-advocate/SKILL.md +130 -0
- package/skills/devils-advocate/references/competing-hypotheses.md +83 -0
- package/skills/init-project/SKILL.md +115 -0
- package/skills/init-project-course/references/memory-and-settings.md +92 -0
- package/skills/init-project-course/references/organise-templates.md +94 -0
- package/skills/init-project-course/skill.md +147 -0
- package/skills/init-project-light/skill.md +139 -0
- package/skills/init-project-research/SKILL.md +368 -0
- package/skills/init-project-research/references/atlas-pipeline-sync.md +70 -0
- package/skills/init-project-research/references/atlas-schema.md +81 -0
- package/skills/init-project-research/references/confirmation-report.md +39 -0
- package/skills/init-project-research/references/domain-profile-template.md +104 -0
- package/skills/init-project-research/references/interview-round3.md +34 -0
- package/skills/init-project-research/references/literature-discovery.md +43 -0
- package/skills/init-project-research/references/scaffold-details.md +197 -0
- package/skills/init-project-research/templates/field-calibration.md +60 -0
- package/skills/init-project-research/templates/pipeline-manifest.md +63 -0
- package/skills/init-project-research/templates/run-all.sh +116 -0
- package/skills/init-project-research/templates/seed-files.md +337 -0
- package/skills/insights-deck/SKILL.md +151 -0
- package/skills/interview-me/SKILL.md +157 -0
- package/skills/latex/SKILL.md +141 -0
- package/skills/latex/references/latex-configs.md +183 -0
- package/skills/latex-autofix/SKILL.md +230 -0
- package/skills/latex-autofix/references/known-errors.md +183 -0
- package/skills/latex-autofix/references/quality-rubric.md +50 -0
- package/skills/latex-health-check/SKILL.md +161 -0
- package/skills/learn/SKILL.md +220 -0
- package/skills/learn/scripts/validate_skill.py +265 -0
- package/skills/lessons-learned/SKILL.md +201 -0
- package/skills/literature/SKILL.md +335 -0
- package/skills/literature/references/agent-templates.md +393 -0
- package/skills/literature/references/bibliometric-apis.md +44 -0
- package/skills/literature/references/cli-council-search.md +79 -0
- package/skills/literature/references/openalex-api-guide.md +371 -0
- package/skills/literature/references/openalex-common-queries.md +381 -0
- package/skills/literature/references/openalex-workflows.md +248 -0
- package/skills/literature/references/reference-manager-sync.md +36 -0
- package/skills/literature/references/scopus-api-guide.md +208 -0
- package/skills/literature/references/wos-api-guide.md +308 -0
- package/skills/multi-perspective/SKILL.md +311 -0
- package/skills/multi-perspective/references/computational-many-analysts.md +77 -0
- package/skills/pipeline-manifest/SKILL.md +226 -0
- package/skills/pre-submission-report/SKILL.md +153 -0
- package/skills/process-reviews/SKILL.md +244 -0
- package/skills/process-reviews/references/rr-routing.md +101 -0
- package/skills/project-deck/SKILL.md +87 -0
- package/skills/project-safety/SKILL.md +135 -0
- package/skills/proofread/SKILL.md +254 -0
- package/skills/proofread/references/quality-rubric.md +104 -0
- package/skills/python-env/SKILL.md +57 -0
- package/skills/quarto-deck/SKILL.md +226 -0
- package/skills/quarto-deck/references/markdown-format.md +143 -0
- package/skills/quarto-deck/references/quality-rubric.md +54 -0
- package/skills/save-context/SKILL.md +174 -0
- package/skills/session-log/SKILL.md +98 -0
- package/skills/shared/concept-validation-gate.md +161 -0
- package/skills/shared/council-protocol.md +265 -0
- package/skills/shared/distribution-diagnostics.md +164 -0
- package/skills/shared/engagement-stratified-sampling.md +218 -0
- package/skills/shared/escalation-protocol.md +74 -0
- package/skills/shared/external-audit-protocol.md +205 -0
- package/skills/shared/intercoder-reliability.md +256 -0
- package/skills/shared/mcp-degradation.md +81 -0
- package/skills/shared/method-probing-questions.md +163 -0
- package/skills/shared/multi-language-conventions.md +143 -0
- package/skills/shared/paid-api-safety.md +174 -0
- package/skills/shared/palettes.md +90 -0
- package/skills/shared/progressive-disclosure.md +92 -0
- package/skills/shared/project-documentation-content.md +443 -0
- package/skills/shared/project-documentation-format.md +281 -0
- package/skills/shared/project-documentation.md +100 -0
- package/skills/shared/publication-output.md +138 -0
- package/skills/shared/quality-scoring.md +70 -0
- package/skills/shared/reference-resolution.md +77 -0
- package/skills/shared/research-quality-rubric.md +165 -0
- package/skills/shared/rhetoric-principles.md +54 -0
- package/skills/shared/skill-design-patterns.md +272 -0
- package/skills/shared/skill-index.md +240 -0
- package/skills/shared/system-documentation.md +334 -0
- package/skills/shared/tikz-rules.md +402 -0
- package/skills/shared/validation-tiers.md +121 -0
- package/skills/shared/venue-guides/README.md +46 -0
- package/skills/shared/venue-guides/cell_press_style.md +483 -0
- package/skills/shared/venue-guides/conferences_formatting.md +564 -0
- package/skills/shared/venue-guides/cs_conference_style.md +463 -0
- package/skills/shared/venue-guides/examples/cell_summary_example.md +247 -0
- package/skills/shared/venue-guides/examples/medical_structured_abstract.md +313 -0
- package/skills/shared/venue-guides/examples/nature_abstract_examples.md +213 -0
- package/skills/shared/venue-guides/examples/neurips_introduction_example.md +245 -0
- package/skills/shared/venue-guides/journals_formatting.md +486 -0
- package/skills/shared/venue-guides/medical_journal_styles.md +535 -0
- package/skills/shared/venue-guides/ml_conference_style.md +556 -0
- package/skills/shared/venue-guides/nature_science_style.md +405 -0
- package/skills/shared/venue-guides/reviewer_expectations.md +417 -0
- package/skills/shared/venue-guides/venue_writing_styles.md +321 -0
- package/skills/split-pdf/SKILL.md +172 -0
- package/skills/split-pdf/methodology.md +48 -0
- package/skills/sync-notion/SKILL.md +93 -0
- package/skills/system-audit/SKILL.md +157 -0
- package/skills/system-audit/references/sub-agent-prompts.md +294 -0
- package/skills/task-management/SKILL.md +131 -0
- package/skills/update-focus/SKILL.md +204 -0
- package/skills/update-project-doc/SKILL.md +194 -0
- package/skills/validate-bib/SKILL.md +242 -0
- package/skills/validate-bib/references/council-mode.md +34 -0
- package/skills/validate-bib/references/deep-verify.md +71 -0
- package/skills/validate-bib/references/openalex-verification.md +45 -0
- package/skills/validate-bib/references/preprint-check.md +31 -0
- package/skills/validate-bib/references/report-template.md +62 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bib-validate
|
|
3
|
+
description: "Cross-reference \\cite{} keys against .bib files or embedded \\bibitem entries. Finds missing, unused, and typo'd citation keys. Deep verification mode spawns parallel agents for DOI/metadata validation at scale. Fix mode auto-adds missing entries to Zotero."
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Task, Write, Bash(mkdir*), Bash(ls*), Bash(rm*), mcp__refpile__add_item, mcp__refpile__add_to_collection, mcp__refpile__search_library, mcp__paperpile__search_library, mcp__paperpile__export_bib
|
|
5
|
+
argument-hint: [project-path or tex-file]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Bibliography Validation
|
|
9
|
+
|
|
10
|
+
**LIBRARY-FIRST RULE: ALWAYS cross-reference cited keys against both Zotero (`mcp__refpile__search_library`) and Paperpile (`mcp__paperpile__search_library`) during validation.** This catches drift between the `.bib` file and reference managers. See the Reference Manager Cross-Reference section.
|
|
11
|
+
|
|
12
|
+
**Citation key rule:** Existing keys in the project always take precedence. They come from the user's reference management system and are canonical. When suggesting replacements (typo corrections, preprint upgrades, metadata fixes), always keep the user's key and update the `.bib` entry metadata around it — never suggest renaming a key to match some "standard" format.
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- Before compiling a final version of a paper
|
|
17
|
+
- After adding new citations to check nothing was missed
|
|
18
|
+
- When `biber`/`bibtex` reports undefined citations
|
|
19
|
+
- As part of a pre-submission checklist (pair with `/proofread`)
|
|
20
|
+
|
|
21
|
+
## When NOT to Use
|
|
22
|
+
|
|
23
|
+
- **Finding new references** — use `/literature` for discovery
|
|
24
|
+
- **Building a bibliography from scratch** — use `/literature` with `.bib` generation
|
|
25
|
+
- **General proofreading** — use `/proofread` (which also flags citation format issues)
|
|
26
|
+
|
|
27
|
+
## Phase 0: Session Log (Suggested)
|
|
28
|
+
|
|
29
|
+
Bibliography validation with preprint staleness checks can be context-heavy (OpenAlex lookups, web searches for published versions). Before starting, **suggest** running `/session-log` to capture prior work as a recovery checkpoint. If the user declines, proceed without it.
|
|
30
|
+
|
|
31
|
+
## Convention
|
|
32
|
+
|
|
33
|
+
**Default bibliography file is `references.bib`** — this is the standard across all projects (per the `/latex` skill convention). However, the skill also supports:
|
|
34
|
+
|
|
35
|
+
- Any `.bib` file found in the same directory as the `.tex` files being audited
|
|
36
|
+
- Embedded bibliographies using `\begin{thebibliography}` / `\bibitem{key}` blocks
|
|
37
|
+
- Both external and embedded simultaneously (rare but possible)
|
|
38
|
+
|
|
39
|
+
## Bibliography Detection
|
|
40
|
+
|
|
41
|
+
At the start of validation, detect which bibliography method the project uses:
|
|
42
|
+
|
|
43
|
+
### 1. External `.bib` file (standard)
|
|
44
|
+
|
|
45
|
+
Look for `.bib` files in the project directory. Priority order:
|
|
46
|
+
1. `references.bib` (preferred — standard naming convention across all projects)
|
|
47
|
+
2. Any other `.bib` file in the same directory as the `.tex` files
|
|
48
|
+
|
|
49
|
+
If **multiple `.bib` files** are found, validate all of them and produce a combined report. Note which file each issue belongs to. If a legacy-named `.bib` file (e.g., `paperpile.bib`) exists alongside `references.bib`, flag it as a potential cleanup opportunity (the project may have migrated from Paperpile).
|
|
50
|
+
|
|
51
|
+
Full validation applies: cross-reference checks **and** quality checks.
|
|
52
|
+
|
|
53
|
+
### 2. Embedded `\begin{thebibliography}` / `\bibitem{key}`
|
|
54
|
+
|
|
55
|
+
Some LaTeX documents define references inline rather than using an external `.bib` file. Detect by scanning `.tex` files for `\begin{thebibliography}`.
|
|
56
|
+
|
|
57
|
+
Extract keys from `\bibitem` entries:
|
|
58
|
+
- `\bibitem{key}` — standard form, key is the argument in braces
|
|
59
|
+
- `\bibitem[label]{key}` — optional label form (e.g., `\bibitem[Smith et al., 2020]{smith2020}`), key is in the **second** set of braces
|
|
60
|
+
|
|
61
|
+
Only **cross-reference checks** apply (missing keys, unused keys, typos). Quality checks (required fields, year, author formatting) are **skipped** because embedded bibliographies don't have structured metadata.
|
|
62
|
+
|
|
63
|
+
### 3. Both (rare)
|
|
64
|
+
|
|
65
|
+
If a project has both a `.bib` file and `\begin{thebibliography}` blocks, validate both:
|
|
66
|
+
- Run full validation on the `.bib` file
|
|
67
|
+
- Run cross-reference checks on `\bibitem` entries
|
|
68
|
+
- Merge both key sets when checking for missing citations
|
|
69
|
+
|
|
70
|
+
## Workflow
|
|
71
|
+
|
|
72
|
+
1. **Find files**: Locate all `.tex` files in the project
|
|
73
|
+
2. **Detect bibliography type**: Check for `.bib` files and/or `\begin{thebibliography}` blocks
|
|
74
|
+
3. **Extract citation keys from .tex**: Scan for all citation commands
|
|
75
|
+
4. **Extract entry keys from bibliography source(s)**:
|
|
76
|
+
- External: Parse all `@type{key,` entries from `.bib` file(s)
|
|
77
|
+
- Embedded: Parse all `\bibitem{key}` and `\bibitem[label]{key}` entries
|
|
78
|
+
5. **Cross-reference**: Compare the two sets
|
|
79
|
+
6. **Quality checks**: Validate `.bib` entry completeness (external only)
|
|
80
|
+
7. **Produce report**: Write results to stdout (or save if requested)
|
|
81
|
+
|
|
82
|
+
## Citation Commands to Scan
|
|
83
|
+
|
|
84
|
+
Scan `.tex` files for all of these patterns:
|
|
85
|
+
|
|
86
|
+
| Command | Example |
|
|
87
|
+
|---------|---------|
|
|
88
|
+
| `\cite{key}` | Basic citation |
|
|
89
|
+
| `\citet{key}` | Textual: Author (Year) |
|
|
90
|
+
| `\citep{key}` | Parenthetical: (Author, Year) |
|
|
91
|
+
| `\textcite{key}` | biblatex textual |
|
|
92
|
+
| `\autocite{key}` | biblatex auto |
|
|
93
|
+
| `\parencite{key}` | biblatex parenthetical |
|
|
94
|
+
| `\citeauthor{key}` | Author name only |
|
|
95
|
+
| `\citeyear{key}` | Year only |
|
|
96
|
+
| `\nocite{key}` | Include in bibliography without in-text citation |
|
|
97
|
+
|
|
98
|
+
Also handle **multi-key citations**: `\citep{key1, key2, key3}`
|
|
99
|
+
|
|
100
|
+
## Cross-Reference Checks
|
|
101
|
+
|
|
102
|
+
### Critical: Missing Entries
|
|
103
|
+
|
|
104
|
+
Citation keys used in `.tex` but not defined in the bibliography source (`.bib` file or `\bibitem` entries).
|
|
105
|
+
|
|
106
|
+
These will cause compilation errors.
|
|
107
|
+
|
|
108
|
+
### Warning: Unused Entries
|
|
109
|
+
|
|
110
|
+
Keys defined in the bibliography source but never cited in any `.tex` file.
|
|
111
|
+
|
|
112
|
+
Not errors, but may indicate:
|
|
113
|
+
- Forgotten citations (should they be `\nocite`?)
|
|
114
|
+
- Leftover entries from earlier drafts
|
|
115
|
+
- Entries intended for a different paper
|
|
116
|
+
|
|
117
|
+
### Warning: Possible Typos (Fuzzy Match)
|
|
118
|
+
|
|
119
|
+
For each missing key, check if a similar key exists in the bibliography using edit distance:
|
|
120
|
+
- Edit distance = 1: Very likely a typo
|
|
121
|
+
- Edit distance = 2: Possibly a typo
|
|
122
|
+
- Flag these with the suggested correction
|
|
123
|
+
|
|
124
|
+
Common typo patterns:
|
|
125
|
+
- Year off by one: `smith2020` vs `smith2021`
|
|
126
|
+
- Missing/extra letter: `santanna` vs `sant'anna` vs `santana`
|
|
127
|
+
- Underscore vs camelCase: `smith_jones` vs `smithjones`
|
|
128
|
+
|
|
129
|
+
## Reference Manager Cross-Reference
|
|
130
|
+
|
|
131
|
+
After the disk-based cross-reference, check each cited key against Zotero (via RefPile MCP) and Paperpile (read-only). Produces a combined status table (HEALTHY / MIGRATE_TO_ZOTERO / DRIFT / EXPORT_GAP / MISSING).
|
|
132
|
+
|
|
133
|
+
Full steps, MCP calls, and status categories: [`references/ref-manager-crossref.md`](references/ref-manager-crossref.md)
|
|
134
|
+
|
|
135
|
+
## Quality Checks on .bib Entries
|
|
136
|
+
|
|
137
|
+
**These checks apply only to external `.bib` files.** Embedded bibliographies lack structured metadata, so quality checks are skipped for them.
|
|
138
|
+
|
|
139
|
+
### Required Fields by Entry Type
|
|
140
|
+
|
|
141
|
+
| Entry Type | Required Fields |
|
|
142
|
+
|-----------|----------------|
|
|
143
|
+
| `@article` | author, title, journal, year |
|
|
144
|
+
| `@book` | author/editor, title, publisher, year |
|
|
145
|
+
| `@incollection` | author, title, booktitle, publisher, year |
|
|
146
|
+
| `@inproceedings` | author, title, booktitle, year |
|
|
147
|
+
| `@techreport` | author, title, institution, year |
|
|
148
|
+
| `@unpublished` | author, title, note, year |
|
|
149
|
+
| `@phdthesis` | author, title, school, year |
|
|
150
|
+
|
|
151
|
+
### Year Reasonableness
|
|
152
|
+
|
|
153
|
+
- Flag entries with year < 1900 or year > current year + 1
|
|
154
|
+
- Flag entries with no year at all
|
|
155
|
+
|
|
156
|
+
### Author Formatting
|
|
157
|
+
|
|
158
|
+
- Check for inconsistent author formats within the file
|
|
159
|
+
- **Flag entries where author field contains "and others" or "et al."** — this is never valid in BibTeX. All authors must be listed explicitly. Severity: **Warning**.
|
|
160
|
+
- Flag entries with organisation names that might need `{{braces}}` to prevent splitting
|
|
161
|
+
|
|
162
|
+
### DOI Resolution (optional — triggered by `--verify-dois` flag or when issues are suspected)
|
|
163
|
+
|
|
164
|
+
**Preferred method: bibliography MCP `scholarly_verify_dois`.** Collect all DOIs from the `.bib` file and call `scholarly_verify_dois` (up to 50 per call). This batch-verifies each DOI against all enabled sources (OpenAlex, Scopus, WoS). Results:
|
|
165
|
+
- **VERIFIED** (2+ sources confirm) — DOI is valid, metadata can be trusted
|
|
166
|
+
- **SINGLE_SOURCE** (1 source only) — DOI exists but warrants a manual spot-check
|
|
167
|
+
- **NOT_FOUND** — DOI not found in any source; resolve manually via WebFetch
|
|
168
|
+
|
|
169
|
+
**Fallback for NOT_FOUND DOIs:** Resolve via `https://doi.org/[DOI]` and confirm the returned metadata matches the entry:
|
|
170
|
+
|
|
171
|
+
1. **Title match**: Does the DOI landing page title match the `.bib` title?
|
|
172
|
+
2. **Author match**: Does the first author on the landing page match the `.bib` first author?
|
|
173
|
+
3. **Journal match**: Does the venue match?
|
|
174
|
+
|
|
175
|
+
Flag mismatches as:
|
|
176
|
+
- **Warning: DOI mismatch** — DOI resolves to a different paper than claimed. This usually means the DOI is wrong (adjacent DOI in the same journal volume) or the authors are wrong (conflation of researchers in the same subfield).
|
|
177
|
+
|
|
178
|
+
This check catches:
|
|
179
|
+
- Wrong DOIs (e.g., off-by-one in the DOI suffix)
|
|
180
|
+
- Author conflation (real researchers incorrectly attributed to a paper)
|
|
181
|
+
- Metadata copied from secondary sources without verification
|
|
182
|
+
|
|
183
|
+
For manual WebFetch resolution, process in batches of 5 to avoid rate limiting. Only flag confirmed mismatches — if the DOI cannot be resolved (404, timeout), note it as "unresolvable" at Info level.
|
|
184
|
+
|
|
185
|
+
### Preprint Staleness Check
|
|
186
|
+
|
|
187
|
+
**For every entry that looks like a preprint**, check whether a peer-reviewed version has since been published. Full detection signals, lookup protocol, and classification: [`references/preprint-check.md`](references/preprint-check.md)
|
|
188
|
+
|
|
189
|
+
## Severity Levels
|
|
190
|
+
|
|
191
|
+
| Level | Meaning |
|
|
192
|
+
|-------|---------|
|
|
193
|
+
| **Critical** | Missing entry for a cited key — will cause compilation error |
|
|
194
|
+
| **Warning** | Unused entry, possible typo, missing required field |
|
|
195
|
+
| **Info** | Year oddity, formatting suggestion, bibliography type note |
|
|
196
|
+
|
|
197
|
+
## Bibliography Output
|
|
198
|
+
|
|
199
|
+
After validation, offer these actions if applicable:
|
|
200
|
+
|
|
201
|
+
- **Embedded bibliography → offer to create `references.bib`**: If the project uses `\begin{thebibliography}`, offer to extract the references into a proper `references.bib` file (one `@misc` entry per `\bibitem`, with the full text as a `note` field). The author can then enrich the entries with proper metadata.
|
|
202
|
+
- **Non-standard `.bib` name → offer to rename**: If the existing `.bib` file is not named `references.bib`, offer to rename it to `references.bib` and update the `\bibliography{}` command in the `.tex` file.
|
|
203
|
+
|
|
204
|
+
These are **offers only** — do not make changes without explicit confirmation.
|
|
205
|
+
|
|
206
|
+
## Report Format
|
|
207
|
+
|
|
208
|
+
Full report template with all sections: [`references/report-template.md`](references/report-template.md)
|
|
209
|
+
|
|
210
|
+
Sections: Summary table → Critical (missing entries) → Warning (typos, unused, missing fields, DOI mismatches, stale preprints) → Info (year issues) → Limitations (for embedded bibliographies).
|
|
211
|
+
|
|
212
|
+
## Optional: Metadata Verification via MCP Tools
|
|
213
|
+
|
|
214
|
+
When missing entries or suspicious metadata are flagged, check these sources in order:
|
|
215
|
+
|
|
216
|
+
1. **Paperpile** (paperpile MCP) — call `mcp__paperpile__search_library` by title. If found, use `mcp__paperpile__export_bib` to get correct BibTeX.
|
|
217
|
+
2. **Zotero library** (refpile MCP) — call `search_library` by title. The user may already have the reference but with a different key.
|
|
218
|
+
3. **Bibliography MCP** (scholarly sources):
|
|
219
|
+
- **`scholarly_search`** — search by title to find the correct entry across OpenAlex + S2 + Scopus + WoS
|
|
220
|
+
- **`scholarly_verify_dois`** — batch-verify DOIs across all sources (preferred over manual DOI resolution)
|
|
221
|
+
- **`scholarly_paper_detail`** — get full metadata including pre-formatted BibTeX (via S2 `citationStyles`), TLDR summary, and open access PDF link. Use for auto-generating BibTeX entries for missing references.
|
|
222
|
+
- **`scholarly_citations`** / **`scholarly_references`** — check citation context (how many papers cite this? what does it cite?) to assess relevance when deciding whether to keep or drop questionable entries
|
|
223
|
+
- **`openalex_lookup_doi`** — look up full metadata for a specific DOI
|
|
224
|
+
|
|
225
|
+
For Python client fallback (citation networks, institution analysis): [`references/openalex-verification.md`](references/openalex-verification.md)
|
|
226
|
+
|
|
227
|
+
## Deep Verification Mode (Parallel, Disk-Based)
|
|
228
|
+
|
|
229
|
+
Triggered by: `--deep-verify` flag, 40+ entries, or "deep verify" / "verify all references". Spawns parallel sub-agents that verify batches and write results to disk. Full architecture, batch JSON format, and assembly: [references/deep-verify.md](references/deep-verify.md)
|
|
230
|
+
|
|
231
|
+
## Council Mode (Optional)
|
|
232
|
+
|
|
233
|
+
For high-stakes submissions. Trigger: "council bib-validate", "thorough bib check". Full details: [references/council-mode.md](references/council-mode.md)
|
|
234
|
+
|
|
235
|
+
## Fix Mode
|
|
236
|
+
|
|
237
|
+
After producing the validation report, automatically fix resolvable issues (DRIFT → add to Zotero, MISSING → search + add, MIGRATE → auto-add, metadata → correct BibTeX).
|
|
238
|
+
|
|
239
|
+
Full auto-fix actions, post-fix maintenance, and skip conditions: [`references/fix-mode.md`](references/fix-mode.md)
|
|
240
|
+
|
|
241
|
+
## Quality Scoring
|
|
242
|
+
|
|
243
|
+
When producing a full validation report, apply numeric quality scoring using the shared framework:
|
|
244
|
+
|
|
245
|
+
- **Framework:** [`../shared/quality-scoring.md`](../shared/quality-scoring.md) — severity tiers, thresholds, verdict rules
|
|
246
|
+
|
|
247
|
+
Map validation findings to the framework tiers:
|
|
248
|
+
- **Critical** (-15 to -25): Missing entry for a cited key (compilation error)
|
|
249
|
+
- **Major** (-5 to -14): DOI mismatch, stale preprint with published version available, "et al." in author field
|
|
250
|
+
- **Minor** (-1 to -4): Missing optional fields, year oddities, unused entries
|
|
251
|
+
|
|
252
|
+
Compute the score and include the Score Block in the report after the summary table.
|
|
253
|
+
|
|
254
|
+
## Cross-References
|
|
255
|
+
|
|
256
|
+
- **`/proofread`** — For overall paper quality including citation format
|
|
257
|
+
- **`/literature`** — For finding and adding new references (includes full OpenAlex workflows)
|
|
258
|
+
- **`/bib-coverage`** — Compare project `.bib` vs Zotero topic collection — find uncited papers and unfiled references
|
|
259
|
+
- **`/latex`** — For compilation with reference checking
|
|
260
|
+
- **`/latex-autofix`** — For compilation and error resolution. Run after fixing bibliography issues to verify citations compile cleanly.
|
|
261
|
+
- **`shared/reference-resolution.md`** — Canonical lookup + filing sequence used by Ref Manager Cross-Reference and Fix Mode
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Council Mode for Bibliography Validation
|
|
2
|
+
|
|
3
|
+
> For high-stakes submissions, run bibliography validation in council mode. Different models have different knowledge of the academic literature -- one model may know a paper's correct DOI while another catches a metadata mismatch that the first misses.
|
|
4
|
+
|
|
5
|
+
## When to Trigger
|
|
6
|
+
|
|
7
|
+
- "Council bib-validate"
|
|
8
|
+
- "Thorough bib check"
|
|
9
|
+
|
|
10
|
+
## How It Works
|
|
11
|
+
|
|
12
|
+
1. The main session collects all `\cite{}` keys and `.bib` entries
|
|
13
|
+
2. The prompt is sent to 3 models via `cli-council`
|
|
14
|
+
3. Each model independently cross-references keys, checks for typos, and verifies metadata
|
|
15
|
+
4. Cross-review catches false positives (flagged entries that are actually correct) and surfaces additional issues
|
|
16
|
+
5. Chairman synthesis produces a single `VALIDATION-REPORT.md`
|
|
17
|
+
|
|
18
|
+
## Invocation (CLI backend -- free)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cd packages/cli-council
|
|
22
|
+
uv run python -m cli_council \
|
|
23
|
+
--prompt-file /tmp/bib-validate-prompt.txt \
|
|
24
|
+
--context-file /tmp/bib-and-tex-content.txt \
|
|
25
|
+
--output-md /tmp/bib-validate-council.md \
|
|
26
|
+
--chairman claude \
|
|
27
|
+
--timeout 180
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
See the shared council protocol documentation for the full orchestration protocol.
|
|
31
|
+
|
|
32
|
+
## Value
|
|
33
|
+
|
|
34
|
+
Moderate to high -- most valuable in deep verification mode where DOI/metadata accuracy matters. Different models have genuinely different bibliographic knowledge.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Deep Verification Mode
|
|
2
|
+
|
|
3
|
+
> Triggered by: `--deep-verify` flag, or when the .bib has 40+ entries, or when the user says "deep verify" / "verify all references".
|
|
4
|
+
|
|
5
|
+
This mode spawns parallel sub-agents that each verify a batch of entries and write structured results to disk -- bypassing context window limits entirely.
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
**MCP constraint:** MCP tools (`scholarly_verify_dois`, `scholarly_search`, etc.) are NOT available inside sub-agents — they are permission-scoped to the main conversation context only. The orchestrator must handle all MCP calls, and sub-agents must use Crossref REST API and WebFetch for DOI verification.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
You (orchestrator)
|
|
13
|
+
+-- Read .bib file, extract all entries
|
|
14
|
+
+-- **Pre-verify all DOIs via MCP (main context):**
|
|
15
|
+
| +-- Call `scholarly_verify_dois` with all DOIs (max 50 per call)
|
|
16
|
+
| +-- Write results to verification_results/mcp_preverify.json
|
|
17
|
+
+-- Create verification_results/ directory in project root
|
|
18
|
+
+-- Batch entries into groups of 5
|
|
19
|
+
+-- Spawn parallel agents (max 5 concurrent), each:
|
|
20
|
+
| +-- Read mcp_preverify.json for pre-verified DOI status
|
|
21
|
+
| +-- For each entry in batch:
|
|
22
|
+
| | +-- If DOI pre-verified as VERIFIED: check title match only
|
|
23
|
+
| | +-- If DOI NOT_FOUND or SINGLE_SOURCE: verify via Crossref API (curl)
|
|
24
|
+
| | +-- Check title matches DOI metadata
|
|
25
|
+
| | +-- Check author consistency
|
|
26
|
+
| | +-- Check year correctness
|
|
27
|
+
| | +-- Check for published version if preprint (via WebSearch, NOT MCP)
|
|
28
|
+
| +-- Write results to verification_results/batch_N.json
|
|
29
|
+
+-- Wait for all agents to complete
|
|
30
|
+
+-- Read all batch JSON files
|
|
31
|
+
+-- Merge into verification_results/full_report.json
|
|
32
|
+
+-- Generate markdown summary highlighting entries needing attention
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Batch JSON Format
|
|
36
|
+
|
|
37
|
+
Each agent writes a file `verification_results/batch_N.json`:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"cite_key": "Author2020-ab",
|
|
43
|
+
"doi_valid": true,
|
|
44
|
+
"title_match": true,
|
|
45
|
+
"author_match": true,
|
|
46
|
+
"year_correct": true,
|
|
47
|
+
"preprint_status": "published_version_exists",
|
|
48
|
+
"published_doi": "10.1234/...",
|
|
49
|
+
"issues": [],
|
|
50
|
+
"suggested_fixes": {}
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Agent Prompt Template
|
|
56
|
+
|
|
57
|
+
Each sub-agent receives:
|
|
58
|
+
- The batch of .bib entries (raw text)
|
|
59
|
+
- The batch number
|
|
60
|
+
- The output path: `verification_results/batch_N.json`
|
|
61
|
+
- The path to `verification_results/mcp_preverify.json` (pre-verified DOI results from orchestrator)
|
|
62
|
+
- Instructions to use **Crossref REST API** (`curl -sL "https://api.crossref.org/works?query.bibliographic=..."`) and **WebFetch** for DOI verification — **NOT** MCP tools (MCP is unavailable in sub-agents)
|
|
63
|
+
- Instruction to write results to disk only -- never return large payloads
|
|
64
|
+
|
|
65
|
+
## Assembly & Report
|
|
66
|
+
|
|
67
|
+
After all agents complete:
|
|
68
|
+
1. Read all `verification_results/batch_*.json` files
|
|
69
|
+
2. Merge into `verification_results/full_report.json`
|
|
70
|
+
3. Generate `verification_results/summary.md` with:
|
|
71
|
+
- Total entries verified
|
|
72
|
+
- Entries with issues (grouped by issue type)
|
|
73
|
+
- Suggested fixes
|
|
74
|
+
- Entries needing manual attention
|
|
75
|
+
4. Print the summary to the user
|
|
76
|
+
|
|
77
|
+
## Cleanup
|
|
78
|
+
|
|
79
|
+
After the report is delivered, offer to delete `verification_results/` or keep it for reference.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Fix Mode
|
|
2
|
+
|
|
3
|
+
> Referenced from: `bib-validate/SKILL.md`
|
|
4
|
+
|
|
5
|
+
After producing the validation report, automatically fix resolvable issues using the filing sequence from [`../shared/reference-resolution.md`](../../shared/reference-resolution.md).
|
|
6
|
+
|
|
7
|
+
## Auto-Fix Actions
|
|
8
|
+
|
|
9
|
+
1. **`DRIFT` entries** (in .bib but not in any reference manager):
|
|
10
|
+
- Add to Zotero via `mcp__refpile__add_item` using metadata from the `.bib` entry.
|
|
11
|
+
- File into topic collection + `_Needs Review` per the filing sequence.
|
|
12
|
+
|
|
13
|
+
2. **`MISSING` entries** (cited in .tex but not found anywhere):
|
|
14
|
+
- Search via the resolution order (Zotero → Paperpile → bibliography MCP → Crossref → web).
|
|
15
|
+
- If found, export correct BibTeX and add the entry to the `.bib` file.
|
|
16
|
+
- Add to Zotero and file per the filing sequence.
|
|
17
|
+
|
|
18
|
+
3. **`MIGRATE_TO_ZOTERO` entries** (in Paperpile but not Zotero):
|
|
19
|
+
- Auto-add to Zotero using Paperpile metadata.
|
|
20
|
+
- File into topic collection + `_Needs Review`.
|
|
21
|
+
|
|
22
|
+
4. **Metadata issues** (DOI mismatch, stale preprint, missing fields):
|
|
23
|
+
- Export correct BibTeX from Paperpile (`mcp__paperpile__export_bib`) or bibliography MCP (`scholarly_search`) for entries with metadata problems.
|
|
24
|
+
- Present corrected entries for confirmation before overwriting.
|
|
25
|
+
|
|
26
|
+
## Post-Fix Maintenance
|
|
27
|
+
|
|
28
|
+
1. **Update `zotero-collections.md`** — increment item counts for affected collections.
|
|
29
|
+
2. **Report summary** — show a table of all fixes applied: entry key, issue, action taken, status.
|
|
30
|
+
|
|
31
|
+
## Skip Fix Mode
|
|
32
|
+
|
|
33
|
+
Fix mode is skipped when:
|
|
34
|
+
- The skill is invoked with `--report-only` or `--dry-run`
|
|
35
|
+
- No actionable issues are found (all entries are `HEALTHY`)
|
|
36
|
+
- Both refpile MCP and paperpile MCP are unavailable
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Metadata Verification
|
|
2
|
+
|
|
3
|
+
> Reference file for `/bib-validate`. Use when missing entries or suspicious metadata are found.
|
|
4
|
+
|
|
5
|
+
## Preferred: Biblio MCP Tools
|
|
6
|
+
|
|
7
|
+
**Always prefer MCP tools over the Python client** — they're faster, require no boilerplate, and query multiple sources.
|
|
8
|
+
|
|
9
|
+
| Tool | Use for |
|
|
10
|
+
|------|---------|
|
|
11
|
+
| `scholarly_verify_dois` | Batch-verify DOIs across OpenAlex + Scopus + WoS (up to 50 per call) |
|
|
12
|
+
| `scholarly_search` | Find a paper by title across all sources — useful when a cited key is missing |
|
|
13
|
+
| `openalex_lookup_doi` | Look up full metadata for a single DOI |
|
|
14
|
+
| `scholarly_similar_works` | Find related papers when a title search doesn't match exactly |
|
|
15
|
+
|
|
16
|
+
## Fallback: Python Client
|
|
17
|
+
|
|
18
|
+
**Python:** Always use `uv run python`. Never bare `python`, `python3`, `pip`, or `pip3`.
|
|
19
|
+
|
|
20
|
+
Use the Python client only for workflows not exposed via MCP (citation networks, institution analysis):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
uv run python -c "
|
|
24
|
+
import sys
|
|
25
|
+
sys.path.insert(0, '.scripts/openalex')
|
|
26
|
+
from openalex_client import OpenAlexClient
|
|
27
|
+
|
|
28
|
+
client = OpenAlexClient(email='user@example.edu')
|
|
29
|
+
|
|
30
|
+
# Look up a specific DOI
|
|
31
|
+
result = client.get_entity('works', 'doi:10.1016/j.ejor.2024.01.001')
|
|
32
|
+
|
|
33
|
+
# Search by title to find the correct entry
|
|
34
|
+
results = client.search_works(search='decision making under uncertainty', per_page=5)
|
|
35
|
+
"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## When to use:
|
|
39
|
+
|
|
40
|
+
- A cited key is missing and you want to confirm whether the paper exists
|
|
41
|
+
- Year or author formatting looks suspicious and you want to cross-check
|
|
42
|
+
- The user asks to enrich `.bib` entries with verified metadata
|
|
43
|
+
- Batch DOI verification (use `scholarly_verify_dois` first)
|
|
44
|
+
|
|
45
|
+
Do NOT use this by default — only when the report flags issues worth verifying.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Preprint Staleness Check
|
|
2
|
+
|
|
3
|
+
> Reference file for `/bib-validate`. Protocol for checking whether preprints have been published.
|
|
4
|
+
|
|
5
|
+
## Detection — identify preprint entries by any of:
|
|
6
|
+
|
|
7
|
+
| Signal | Examples |
|
|
8
|
+
|--------|----------|
|
|
9
|
+
| URL/DOI contains preprint host | `arxiv.org`, `ssrn.com`, `nber.org`, `repec.org`, `econpapers`, `ideas.repec` |
|
|
10
|
+
| Journal/howpublished field | "arXiv preprint", "SSRN", "NBER Working Paper", "Working Paper", "mimeo" |
|
|
11
|
+
| Entry type | `@techreport`, `@unpublished`, `@misc` with working-paper-like metadata |
|
|
12
|
+
| Note field | Contains "preprint", "working paper", "wp", "discussion paper" |
|
|
13
|
+
|
|
14
|
+
## Lookup — find the published version:
|
|
15
|
+
|
|
16
|
+
1. **Biblio MCP `scholarly_search` first** (preferred — queries OpenAlex + Scopus + WoS with dedup):
|
|
17
|
+
Call `scholarly_search` with the paper title as query. Check if any result has a journal/venue and is not itself a preprint. Cross-source search increases the chance of finding the published version.
|
|
18
|
+
2. **DOI resolution fallback**: If the preprint has a DOI, check if it redirects to or links to a published version.
|
|
19
|
+
3. **Web search last resort**: Search for the paper title + "published" or "journal" if MCP returns nothing.
|
|
20
|
+
|
|
21
|
+
## Classification:
|
|
22
|
+
|
|
23
|
+
| Finding | Severity | Message |
|
|
24
|
+
|---------|----------|---------|
|
|
25
|
+
| Published version exists | **Warning** | "Preprint `key` appears published in *Journal Name* (Year). Consider updating the .bib entry." |
|
|
26
|
+
| Published version exists with different title/authors | **Warning** | "Preprint `key` may have been published as '*new title*' in *Journal*. Verify and update." |
|
|
27
|
+
| No published version found | **Info** | "Preprint `key` — no published version found (checked YYYY-MM-DD)." |
|
|
28
|
+
|
|
29
|
+
## Report section:
|
|
30
|
+
|
|
31
|
+
Add a `## Warning: Stale Preprints` section to the report listing all preprints where a published version was found, with the suggested replacement metadata (journal, year, DOI).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Reference Manager Cross-Reference
|
|
2
|
+
|
|
3
|
+
> Referenced from: `bib-validate/SKILL.md`
|
|
4
|
+
|
|
5
|
+
After the disk-based cross-reference, check each cited key against the user's reference libraries using the resolution order from [`../shared/reference-resolution.md`](../../shared/reference-resolution.md). Two sources are available — check both when possible.
|
|
6
|
+
|
|
7
|
+
## Zotero (Active Write Target — via RefPile MCP)
|
|
8
|
+
|
|
9
|
+
Cross-reference via the `refpile` MCP server. For each citation key:
|
|
10
|
+
|
|
11
|
+
1. Call `mcp__refpile__search_library` with the citation key as query
|
|
12
|
+
2. Match on the `citationKey` field in results
|
|
13
|
+
|
|
14
|
+
## Paperpile (Read-Only Cross-Reference)
|
|
15
|
+
|
|
16
|
+
Cross-reference via the `paperpile` MCP server. For each citation key found in the `.tex` files:
|
|
17
|
+
|
|
18
|
+
1. Call `mcp__paperpile__search_library` with the citation key as query
|
|
19
|
+
2. Match on the citekey field in results
|
|
20
|
+
3. For entries with issues, call `mcp__paperpile__get_item` for full metadata
|
|
21
|
+
4. Use `mcp__paperpile__export_bib` to generate correct BibTeX for missing/outdated entries
|
|
22
|
+
|
|
23
|
+
**Additional checks:**
|
|
24
|
+
- Call `mcp__paperpile__get_labels` to verify folder organisation matches project themes
|
|
25
|
+
- For projects with a known Paperpile label, call `mcp__paperpile__get_items_by_label` to find papers in the folder but not cited (potential missing citations)
|
|
26
|
+
|
|
27
|
+
## Combined Status Categories
|
|
28
|
+
|
|
29
|
+
| .bib | Zotero | Paperpile | Status | Report |
|
|
30
|
+
|------|--------|-----------|--------|--------|
|
|
31
|
+
| Yes | Yes | Yes | `HEALTHY` | `✓ In sync across all` |
|
|
32
|
+
| Yes | Yes | No | `HEALTHY` | `✓ Zotero ↔ .bib in sync (not in Paperpile)` |
|
|
33
|
+
| Yes | No | Yes | `MIGRATE_TO_ZOTERO` | `⚠ In Paperpile + .bib but not Zotero — auto-add?` |
|
|
34
|
+
| Yes | No | No | `DRIFT` | `⚠ In local .bib but not in any reference manager` |
|
|
35
|
+
| No | Yes | — | `EXPORT_GAP` | `ℹ In Zotero but not exported to local .bib` |
|
|
36
|
+
| No | No | Yes | `EXPORT_GAP` | `ℹ In Paperpile but not exported to local .bib` |
|
|
37
|
+
| No | No | No | `MISSING` | `✗ Missing from all — will add to Zotero in Fix Mode` |
|
|
38
|
+
|
|
39
|
+
Include this as a "Reference Manager Sync" section in the report, after cross-reference results and before quality checks.
|
|
40
|
+
|
|
41
|
+
**Graceful degradation:** If either MCP is unavailable, skip that source with a warning and continue with whatever is available. If both are unavailable, continue with disk-only validation.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Bibliography Validation Report Template
|
|
2
|
+
|
|
3
|
+
> Reference file for `/bib-validate`. Use this format for all validation reports.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# Bibliography Validation Report
|
|
7
|
+
|
|
8
|
+
**Project:** [path]
|
|
9
|
+
**Date:** YYYY-MM-DD
|
|
10
|
+
**Files scanned:** [list of .tex files]
|
|
11
|
+
**Bibliography type:** External .bib / Embedded / Both
|
|
12
|
+
**Bibliography:** [filename] ([N] entries) | Embedded ([N] \bibitem entries) | Both ([N] .bib + [N] \bibitem)
|
|
13
|
+
**Citations found:** [N] unique keys across [N] citation commands
|
|
14
|
+
|
|
15
|
+
## Summary
|
|
16
|
+
|
|
17
|
+
| Check | Count |
|
|
18
|
+
|-------|-------|
|
|
19
|
+
| Missing entries (Critical) | 0 |
|
|
20
|
+
| Possible typos (Warning) | 0 |
|
|
21
|
+
| Unused entries (Warning) | 0 |
|
|
22
|
+
| Missing required fields (Warning) | 0 |
|
|
23
|
+
| DOI mismatches (Warning) | 0 |
|
|
24
|
+
| Stale preprints (Warning) | 0 |
|
|
25
|
+
| Year issues (Info) | 0 |
|
|
26
|
+
|
|
27
|
+
## Critical: Missing Entries
|
|
28
|
+
|
|
29
|
+
| Cited Key | File | Line | Suggested Match |
|
|
30
|
+
|-----------|------|------|-----------------|
|
|
31
|
+
| `smith2020` | main.tex | 42 | `smith2021` (edit dist: 1) |
|
|
32
|
+
|
|
33
|
+
## Warning: Possible Typos
|
|
34
|
+
|
|
35
|
+
[Keys with close fuzzy matches]
|
|
36
|
+
|
|
37
|
+
## Warning: Unused Entries
|
|
38
|
+
|
|
39
|
+
[Keys in bibliography not cited anywhere — listed for review]
|
|
40
|
+
|
|
41
|
+
## Warning: Missing Required Fields
|
|
42
|
+
|
|
43
|
+
*External .bib only — skipped for embedded bibliographies.*
|
|
44
|
+
|
|
45
|
+
| Key | Type | Missing Fields |
|
|
46
|
+
|-----|------|---------------|
|
|
47
|
+
| `jones2019` | article | journal |
|
|
48
|
+
|
|
49
|
+
## Warning: Stale Preprints
|
|
50
|
+
|
|
51
|
+
| Key | Current Source | Published In | Year | DOI |
|
|
52
|
+
|-----|---------------|--------------|------|-----|
|
|
53
|
+
| `smith2020arxiv` | arXiv:2020.12345 | *J. of ML Research* | 2022 | 10.xxxx/yyyy |
|
|
54
|
+
|
|
55
|
+
## Info: Year Issues
|
|
56
|
+
|
|
57
|
+
[Entries with suspicious years]
|
|
58
|
+
|
|
59
|
+
## Reference Manager Cross-Reference
|
|
60
|
+
|
|
61
|
+
| Key | .bib | Zotero | Paperpile | Status |
|
|
62
|
+
|-----|------|--------|-----------|--------|
|
|
63
|
+
| `smith2020` | Yes | Yes | Yes | HEALTHY |
|
|
64
|
+
| `jones2019` | Yes | No | Yes | MIGRATE_TO_ZOTERO |
|
|
65
|
+
| `doe2021` | Yes | No | No | MISSING |
|
|
66
|
+
|
|
67
|
+
## Fix Mode Actions
|
|
68
|
+
|
|
69
|
+
*Omit this section if `--no-fix` was passed or no fixable issues were found.*
|
|
70
|
+
|
|
71
|
+
| Action | Key | Result |
|
|
72
|
+
|--------|-----|--------|
|
|
73
|
+
| Added to Zotero | `doe2021` | Filed → [Topic Collection] + _Needs Review |
|
|
74
|
+
| Migrated to Zotero | `jones2019` | Copied from Paperpile → [Topic Collection] + _Needs Review |
|
|
75
|
+
| Metadata corrected | `smith2020` | Updated year: 2019 → 2020 |
|
|
76
|
+
|
|
77
|
+
**Post-fix:** Updated `zotero-collections.md` item counts for [collection].
|
|
78
|
+
|
|
79
|
+
## Limitations
|
|
80
|
+
|
|
81
|
+
*If embedded:* Embedded bibliographies (`\bibitem`) lack structured metadata (author, year, journal as separate fields). Only cross-reference checks were performed. Quality checks (required fields, year reasonableness, author formatting) require an external `.bib` file.
|
|
82
|
+
```
|