receiptscc 0.9.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 James Weatherhead
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,261 @@
1
+ <h1 align="center">RECEIPTS</h1>
2
+
3
+ <p align="center">
4
+ <strong>GPTZero: "Is this citation real?"<br>receipts: "Is this citation <em>right</em>?"</strong>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/receiptscc"><img src="https://img.shields.io/npm/v/receiptscc.svg" alt="npm version"></a>
9
+ <a href="https://github.com/JamesWeatherhead/receipts/stargazers"><img src="https://img.shields.io/github/stars/JamesWeatherhead/receipts" alt="GitHub stars"></a>
10
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
11
+ </p>
12
+
13
+ <p align="center">
14
+ <img src="assets/terminal.png" alt="receipts" width="550">
15
+ </p>
16
+
17
+ <p align="center">
18
+ <em>Works on Mac, Windows, and Linux</em>
19
+ </p>
20
+
21
+ ---
22
+
23
+ ## The Problem
24
+
25
+ [GPTZero found 100 hallucinated citations across 51 papers at NeurIPS 2024.](https://techcrunch.com/2026/01/21/irony-alert-hallucinated-citations-found-in-papers-from-neurips-the-prestigious-ai-conference/) Those are the **fake** ones.
26
+
27
+ Nobody is counting the **real** papers that don't say what authors claim.
28
+
29
+ Your manuscript says: *"Smith et al. achieved 99% accuracy on all benchmarks"*
30
+
31
+ The actual paper says: *"We achieve 73% accuracy on the standard benchmark"*
32
+
33
+ Not fraud. Just human memory + exhaustion + LLM assistance = systematic misquotation.
34
+
35
+ **receipts catches this before your reviewers do.**
36
+
37
+ ---
38
+
39
+ ## What is this?
40
+
41
+ Give it your paper. Give it the PDFs you cited. It reads both. Tells you what's wrong.
42
+
43
+ Runs inside **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** (Anthropic's terminal assistant). One command. ~$0.50-$5 per paper.
44
+
45
+ Built by an MD/PhD student who got tired of manually re-checking citations at 2am before deadlines.
46
+
47
+ ---
48
+
49
+ ## Before You Start
50
+
51
+ You need two things:
52
+
53
+ ### 1. Node.js
54
+
55
+ Check if you have it:
56
+
57
+ ```bash
58
+ node --version
59
+ ```
60
+
61
+ If you see a version number, you're good. If you see "command not found", download Node.js from **[nodejs.org](https://nodejs.org/)** and install it.
62
+
63
+ ### 2. Anthropic API Key or Pro/Max Plan
64
+
65
+ You need one of these to use Claude Code:
66
+
67
+ - **API key:** Get one at **[console.anthropic.com](https://console.anthropic.com/)**. Requires a payment method.
68
+ - **Pro or Max plan:** If you subscribe to Claude Pro ($20/mo) or Max ($100/mo), you can use Claude Code without a separate API key.
69
+
70
+ ---
71
+
72
+ ## Setup (5 minutes)
73
+
74
+ ### Step 1: Open your terminal
75
+
76
+ **Mac:** Press `Cmd + Space`, type `Terminal`, press Enter
77
+
78
+ **Windows:** Press `Win + X`, click "Terminal" or "PowerShell"
79
+
80
+ **Linux:** Press `Ctrl + Alt + T`
81
+
82
+ ---
83
+
84
+ ### Step 2: Install Claude Code
85
+
86
+ Copy this command and paste it into your terminal:
87
+
88
+ ```bash
89
+ npm install -g @anthropic-ai/claude-code
90
+ ```
91
+
92
+ <p align="center">
93
+ <img src="assets/screenshots/step0.png" alt="Install Claude Code" width="550">
94
+ </p>
95
+
96
+ Wait for it to finish.
97
+
98
+ ---
99
+
100
+ ### Step 3: Install receiptscc
101
+
102
+ Copy and run this:
103
+
104
+ ```bash
105
+ npx receiptscc
106
+ ```
107
+
108
+ <p align="center">
109
+ <img src="assets/screenshots/step1.png" alt="Install receiptscc" width="420">
110
+ </p>
111
+
112
+ You will see a receipt banner. That means it worked. You only do this once.
113
+
114
+ ---
115
+
116
+ ### Step 4: Set up your paper folder
117
+
118
+ Create a folder with your paper and sources:
119
+
120
+ <p align="center">
121
+ <img src="assets/screenshots/step2.png" alt="Folder structure" width="380">
122
+ </p>
123
+
124
+ ```
125
+ thesis/
126
+ ├── my_paper.pdf ← your paper (any name)
127
+ └── sources/ ← create this folder
128
+ ├── smith_2020.pdf ← PDFs you cited
129
+ ├── jones_2021.pdf
130
+ └── chen_2019.pdf
131
+ ```
132
+
133
+ **Put your paper in the folder. Create a subfolder called `sources`. Put the PDFs you cited inside `sources`.**
134
+
135
+ ---
136
+
137
+ ### Step 5: Open Claude Code
138
+
139
+ Navigate to your paper folder and start Claude Code:
140
+
141
+ ```bash
142
+ cd ~/Desktop/thesis
143
+ claude
144
+ ```
145
+
146
+ <p align="center">
147
+ <img src="assets/screenshots/step3a.png" alt="Start Claude Code" width="460">
148
+ </p>
149
+
150
+ **Windows users:** Replace `~/Desktop/thesis` with your actual path, like `C:\Users\YourName\Desktop\thesis`
151
+
152
+ The first time you run `claude`, it will ask for your API key. Paste it in.
153
+
154
+ ---
155
+
156
+ ### Step 6: Run receipts
157
+
158
+ Now you are inside Claude Code. Type this command:
159
+
160
+ ```
161
+ /receipts
162
+ ```
163
+
164
+ <p align="center">
165
+ <img src="assets/screenshots/step3.png" alt="Run /receipts" width="500">
166
+ </p>
167
+
168
+ **Important:** The `/receipts` command only works inside Claude Code. If you type it in your regular terminal, it will not work.
169
+
170
+ receipts will read your paper, read your sources, and check every citation. When it finishes, it creates a file called `RECIEPTS.md` in your folder with the results.
171
+
172
+ ---
173
+
174
+ ## What You Get
175
+
176
+ A report showing which citations check out and which don't:
177
+
178
+ ```
179
+ # Citation Verification Report
180
+
181
+ | Status | Count |
182
+ |---------|-------|
183
+ | VALID | 47 |
184
+ | ADJUST | 2 |
185
+ | INVALID | 1 |
186
+
187
+ ## Issues Found
188
+
189
+ ### [23] Smith et al. (2020)
190
+
191
+ **Your claim:** "achieved 99% accuracy on all benchmarks"
192
+ **Source says:** "achieves 73% accuracy on the standard benchmark"
193
+ **Fix:** Change "99%" to "73%", remove "all benchmarks"
194
+ ```
195
+
196
+ | Status | What it means |
197
+ |--------|---------------|
198
+ | **VALID** | Your citation is accurate |
199
+ | **ADJUST** | Small fix needed (wrong number, slightly off wording) |
200
+ | **INVALID** | Source does not support your claim |
201
+
202
+ ---
203
+
204
+ ## Cost
205
+
206
+ | Paper Size | Citations | Haiku 3.5 | Sonnet 4 | Opus 4.5 |
207
+ |------------|-----------|-----------|----------|----------|
208
+ | Short | 10 | ~$0.50 | ~$2 | ~$9 |
209
+ | Medium | 25 | ~$1.30 | ~$5 | ~$24 |
210
+ | Full | 50 | ~$3 | ~$11 | ~$56 |
211
+
212
+ Use Haiku for drafts. Opus for final submission.
213
+
214
+ ---
215
+
216
+ ## Lightweight Install
217
+
218
+ receipts adds only **29 tokens** to your Claude Code context:
219
+
220
+ | Component | What it is | Tokens |
221
+ |-----------|------------|--------|
222
+ | `/receipts` | The command definition | 13 |
223
+ | `receipts-verifier` | Agent template for verification | 16 |
224
+
225
+ That's the install footprint—two tiny files. The actual verification work uses Claude's normal token budget (hence the ~$0.50-$5 cost per paper).
226
+
227
+ ---
228
+
229
+ ## Troubleshooting
230
+
231
+ **"npm: command not found"**
232
+
233
+ You need Node.js. Download it from [nodejs.org](https://nodejs.org/).
234
+
235
+ **"bash: /receipts: No such file or directory"**
236
+
237
+ You typed `/receipts` in your regular terminal. You need to type it inside Claude Code. First run `claude` to start Claude Code, then type `/receipts`.
238
+
239
+ **"No manuscript found"**
240
+
241
+ Make sure your PDF is in the root folder, not inside a subfolder.
242
+
243
+ **"No sources directory"**
244
+
245
+ Create a folder called exactly `sources` (lowercase) and put your cited PDFs inside.
246
+
247
+ **Claude Code asks for an API key**
248
+
249
+ Either get an API key at [console.anthropic.com](https://console.anthropic.com/), or subscribe to Claude Pro/Max at [claude.ai](https://claude.ai/).
250
+
251
+ ---
252
+
253
+ ## License
254
+
255
+ MIT
256
+
257
+ ---
258
+
259
+ <p align="center">
260
+ <strong>Your citations are only as good as your memory. receipts is better than your memory.</strong>
261
+ </p>
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: receipts-verifier
3
+ description: Citation verification agent
4
+ ---
5
+
6
+ # Citation Verifier
7
+
8
+ Verify one citation against its source.
9
+
10
+ ## Input
11
+
12
+ - Manuscript path
13
+ - Reference number and citation text
14
+ - Source document path
15
+
16
+ ## Task
17
+
18
+ 1. Read manuscript, find where this reference is cited
19
+ 2. Copy the EXACT claim text
20
+ 3. Read the source document
21
+ 4. Copy the EXACT supporting/contradicting text
22
+ 5. Compare and assess
23
+
24
+ ## Output Format
25
+
26
+ Write to verdicts/ref_[N].md:
27
+
28
+ ```
29
+ ---
30
+ ref: [N]
31
+ status: [VALID | ADJUST | INVALID]
32
+ ---
33
+
34
+ **Claim:** [verbatim from manuscript]
35
+
36
+ **Source:** [verbatim from source]
37
+
38
+ **Assessment:** [SUPPORTED | NOT SUPPORTED | CONTRADICTED]
39
+
40
+ **Fix:** [correction needed, or "None"]
41
+ ```
42
+
43
+ ## Rules
44
+
45
+ - VERBATIM quotes only. No paraphrasing.
46
+ - Copy-paste exact text from both documents.
47
+ - Be specific about discrepancies.
package/bin/install.js ADDED
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const os = require('os');
6
+
7
+ const VERSION = '0.9.0';
8
+ const PACKAGE_NAME = 'receiptscc';
9
+
10
+ // Colors
11
+ const colors = {
12
+ reset: '\x1b[0m',
13
+ bright: '\x1b[1m',
14
+ dim: '\x1b[2m',
15
+ red: '\x1b[31m',
16
+ green: '\x1b[32m',
17
+ yellow: '\x1b[33m',
18
+ cyan: '\x1b[36m'
19
+ };
20
+
21
+ function log(msg, color = '') {
22
+ console.log(`${color}${msg}${colors.reset}`);
23
+ }
24
+
25
+ function banner() {
26
+ const now = new Date();
27
+ const date = now.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
28
+ const time = now.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });
29
+ const session = '#' + Math.random().toString(16).substring(2, 9);
30
+
31
+ console.log(`
32
+ ┌─────────────────────────────────┐
33
+ │ │
34
+ │ R E C E I P T S │
35
+ │ Citation Verification │
36
+ │ by: James Weatherhead │
37
+ │ │
38
+ │ ──────────────────────── │
39
+ │ VERIFICATION │
40
+ │ ──────────────────────── │
41
+ │ │
42
+ │ * * * * * * * * * * * * * * │
43
+ │ │
44
+ │ Citation Status │
45
+ │ ──────────────────────── │
46
+ │ Smith (2020) ${colors.green}VALID${colors.reset} │
47
+ │ Jones (2021) ${colors.red}INVALID${colors.reset} │
48
+ │ Chen (2019) ${colors.green}VALID${colors.reset} │
49
+ │ Park (2022) ${colors.yellow}ADJUST${colors.reset} │
50
+ │ Adams (2018) ${colors.green}VALID${colors.reset} │
51
+ │ │
52
+ │ * * * * * * * * * * * * * * │
53
+ │ │
54
+ │ Total 5 │
55
+ │ Valid 3 │
56
+ │ Invalid 1 │
57
+ │ Adjust 1 │
58
+ │ ──────────────────────── │
59
+ │ Accuracy 80.0% │
60
+ │ │
61
+ │ * * * * * * * * * * * * * * │
62
+ │ │
63
+ │ Date ${date.padStart(12)} │
64
+ │ Time ${time.padStart(8)} │
65
+ │ Session ${session} │
66
+ │ │
67
+ │ ██ █ █ ███ ██ █ │
68
+ │ │
69
+ │ THANK YOU ! │
70
+ │ │
71
+ └─────────────────────────────────┘
72
+
73
+ ${colors.bright}receiptscc${colors.reset} v${VERSION}
74
+ Verify your citations say what you claim.
75
+ `);
76
+ }
77
+
78
+ function getClaudeDir() {
79
+ return path.join(os.homedir(), '.claude');
80
+ }
81
+
82
+ function ensureDir(dir) {
83
+ if (!fs.existsSync(dir)) {
84
+ fs.mkdirSync(dir, { recursive: true });
85
+ }
86
+ }
87
+
88
+ function copyDir(src, dest) {
89
+ ensureDir(dest);
90
+ const entries = fs.readdirSync(src, { withFileTypes: true });
91
+
92
+ for (const entry of entries) {
93
+ const srcPath = path.join(src, entry.name);
94
+ const destPath = path.join(dest, entry.name);
95
+
96
+ if (entry.isDirectory()) {
97
+ copyDir(srcPath, destPath);
98
+ } else {
99
+ fs.copyFileSync(srcPath, destPath);
100
+ }
101
+ }
102
+ }
103
+
104
+ function install() {
105
+ const claudeDir = getClaudeDir();
106
+ const commandsDir = path.join(claudeDir, 'commands', 'receipts');
107
+ const agentsDir = path.join(claudeDir, 'agents');
108
+
109
+ const packageDir = path.resolve(__dirname, '..');
110
+ const srcCommandsDir = path.join(packageDir, 'commands', 'receipts');
111
+ const srcAgentsDir = path.join(packageDir, 'agents');
112
+
113
+ if (fs.existsSync(srcCommandsDir)) {
114
+ copyDir(srcCommandsDir, commandsDir);
115
+ log(' ✓ Installed commands/receipts', colors.green);
116
+ }
117
+
118
+ if (fs.existsSync(srcAgentsDir)) {
119
+ const agentFiles = fs.readdirSync(srcAgentsDir);
120
+ ensureDir(agentsDir);
121
+ for (const file of agentFiles) {
122
+ if (file.startsWith('receipts-')) {
123
+ fs.copyFileSync(
124
+ path.join(srcAgentsDir, file),
125
+ path.join(agentsDir, file)
126
+ );
127
+ }
128
+ }
129
+ log(' ✓ Installed receipts-verifier', colors.green);
130
+ }
131
+
132
+ log('');
133
+ log(`${colors.green}Done!${colors.reset} Run ${colors.cyan}/receipts <path>${colors.reset} to verify citations.`);
134
+ log('');
135
+ }
136
+
137
+ function uninstall() {
138
+ const claudeDir = getClaudeDir();
139
+ const commandsDir = path.join(claudeDir, 'commands', 'receipts');
140
+ const agentsDir = path.join(claudeDir, 'agents');
141
+
142
+ log('Uninstalling...', colors.yellow);
143
+
144
+ if (fs.existsSync(commandsDir)) {
145
+ fs.rmSync(commandsDir, { recursive: true });
146
+ log(' [OK] Commands removed', colors.green);
147
+ }
148
+
149
+ if (fs.existsSync(agentsDir)) {
150
+ const agentFiles = fs.readdirSync(agentsDir);
151
+ for (const file of agentFiles) {
152
+ if (file.startsWith('receipts-')) {
153
+ fs.unlinkSync(path.join(agentsDir, file));
154
+ }
155
+ }
156
+ log(' [OK] Agents removed', colors.green);
157
+ }
158
+
159
+ log('\nUninstall complete.\n', colors.green);
160
+ }
161
+
162
+ // Main
163
+ const args = process.argv.slice(2);
164
+
165
+ banner();
166
+
167
+ if (args.includes('--uninstall') || args.includes('-u')) {
168
+ uninstall();
169
+ } else if (args.includes('--help') || args.includes('-h')) {
170
+ log('Usage: npx receiptscc [options]', colors.bright);
171
+ log('');
172
+ log('Options:', colors.bright);
173
+ log(' --help, -h Show this help', colors.dim);
174
+ log(' --uninstall, -u Remove from Claude Code', colors.dim);
175
+ log('');
176
+ } else {
177
+ install();
178
+ }
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: receipts
3
+ description: Verify citations in a manuscript
4
+ arguments:
5
+ - name: path
6
+ description: Path to folder with manuscript and sources/
7
+ required: true
8
+ ---
9
+
10
+ # receipts
11
+
12
+ Verify that citations say what you claim they say.
13
+
14
+ ## Your Task
15
+
16
+ Given a path, do everything in one shot:
17
+
18
+ 1. **Find the manuscript** - Look for .pdf, .md, or .docx in the folder root
19
+ 2. **Find sources** - Look in `<path>/sources/` for reference documents
20
+ 3. **Parse references** - Extract the reference list from the manuscript
21
+ 4. **Verify each reference** - Spawn one agent per reference (parallel)
22
+ 5. **Generate report** - Write RECIEPTS.md with all findings
23
+
24
+ ## Spawn Verification Agents
25
+
26
+ For each reference that has a matching source file, spawn an agent:
27
+
28
+ ```
29
+ Task(
30
+ subagent_type: "general-purpose",
31
+ description: "Verify ref [N]",
32
+ prompt: """
33
+ You are verifying a citation.
34
+
35
+ Manuscript: <path>/[manuscript file]
36
+ Reference: [N] - "[citation text]"
37
+ Source: <path>/sources/[source file]
38
+
39
+ Instructions:
40
+ 1. Read the manuscript. Find where reference [N] is cited.
41
+ 2. Copy the EXACT text making the claim.
42
+ 3. Read the source document.
43
+ 4. Copy the EXACT text from the source.
44
+ 5. Compare: Does the source support the claim?
45
+
46
+ Write to <path>/verdicts/ref_[N].md:
47
+
48
+ ---
49
+ ref: [N]
50
+ status: [VALID | ADJUST | INVALID]
51
+ ---
52
+
53
+ **Claim:** [verbatim from manuscript]
54
+
55
+ **Source:** [verbatim from source]
56
+
57
+ **Assessment:** [SUPPORTED | NOT SUPPORTED | CONTRADICTED]
58
+
59
+ **Fix:** [specific correction needed, or "None"]
60
+ """
61
+ )
62
+ ```
63
+
64
+ Launch ALL agents in ONE message (parallel execution).
65
+
66
+ ## After Agents Complete
67
+
68
+ Write `<path>/RECIEPTS.md`:
69
+
70
+ ```markdown
71
+ # Citation Verification Report
72
+
73
+ **Document:** [name]
74
+ **Checked:** [count]
75
+
76
+ ## Summary
77
+
78
+ | Status | Count |
79
+ |--------|-------|
80
+ | VALID | X |
81
+ | ADJUST | Y |
82
+ | INVALID | Z |
83
+
84
+ ## Issues Found
85
+
86
+ [For each non-VALID verdict, show:]
87
+
88
+ ### [N]. [Short citation]
89
+
90
+ **Status:** [ADJUST/INVALID]
91
+
92
+ **Claim:** [quote]
93
+
94
+ **Source:** [quote]
95
+
96
+ **Fix:** [correction]
97
+
98
+ ---
99
+
100
+ ## All Clear
101
+
102
+ [List VALID citations, or "None - all citations have issues"]
103
+ ```
104
+
105
+ Display: "Done. X issues found. See RECIEPTS.md"
@@ -0,0 +1,21 @@
1
+ # Citation Verification Checklist
2
+
3
+ **Document:** manuscript.md
4
+ **Total references:** 2
5
+ **Sources available:** 2
6
+ **Sources missing:** 0
7
+
8
+ ## References
9
+
10
+ | # | Citation | Source | Status |
11
+ |---|----------|--------|--------|
12
+ | 1 | Srivastava et al. (2014). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. JMLR 15(56), 1929-1958. | [x] sources/ref_01_srivastava2014.md | ADJUST |
13
+ | 2 | Pedregosa et al. (2011). Scikit-learn: Machine Learning in Python. JMLR 12(85), 2825-2830. | [x] sources/ref_02_pedregosa2011.md | ADJUST |
14
+
15
+ ## Missing Sources
16
+
17
+ None - all sources available.
18
+
19
+ ## Verification Complete
20
+
21
+ See [RECIEPTS.md](RECIEPTS.md) for full report.
package/demo/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # reciepts Demo
2
+
3
+ Working example using real JMLR papers (CC BY 4.0 licensed).
4
+
5
+ ## Papers Used
6
+
7
+ Both source papers are legally reusable under Creative Commons Attribution 4.0:
8
+
9
+ 1. **Srivastava et al. (2014)** - "Dropout: A Simple Way to Prevent Neural Networks from Overfitting"
10
+ - https://jmlr.org/papers/v15/srivastava14a.html
11
+
12
+ 2. **Pedregosa et al. (2011)** - "Scikit-learn: Machine Learning in Python"
13
+ - https://jmlr.org/papers/v12/pedregosa11a.html
14
+
15
+ ## Intentional Errors
16
+
17
+ ### Reference 1 - Dropout (ADJUST)
18
+
19
+ | Claim | Manuscript | Source | Error Type |
20
+ |-------|------------|--------|------------|
21
+ | Dropout rate | "p=0.5 for all layers" | "p=0.5 for hidden units and p=0.8 for input units" | Oversimplification |
22
+ | MNIST error | "0.89%" | "0.94%" | Wrong number |
23
+
24
+ ### Reference 2 - Scikit-learn (ADJUST)
25
+
26
+ | Claim | Manuscript | Source | Error Type |
27
+ |-------|------------|--------|------------|
28
+ | Language | "written entirely in Python" | "written primarily in Python" (uses Cython) | Overstatement |
29
+ | Algorithm count | "over 100 algorithms" | "wide range" (no number given) | Fabricated statistic |
30
+ | Author count | "12 authors" | "16 contributors" | Wrong number |
31
+ | License | "MIT license" | "simplified BSD license" | Wrong license |
32
+
33
+ ## Expected Verdicts
34
+
35
+ | Ref | Status | Key Issues |
36
+ |-----|--------|------------|
37
+ | 1 | ADJUST | Dropout rate oversimplified, MNIST error rate wrong |
38
+ | 2 | ADJUST | Multiple factual errors |
39
+
40
+ ## Running the Demo
41
+
42
+ ```
43
+ /reciepts:init .
44
+ /reciepts:verify .
45
+ /reciepts:report .
46
+ ```
47
+
48
+ ## License
49
+
50
+ - Source paper excerpts: CC BY 4.0 (JMLR)
51
+ - Demo manuscript and structure: MIT
@@ -0,0 +1,126 @@
1
+ # Citation Verification Report
2
+
3
+ **Document:** manuscript.md
4
+ **Verified:** 2026-01-27
5
+ **References checked:** 2
6
+ **References excluded:** 0
7
+
8
+ ## Results Summary
9
+
10
+ | Status | Count | Percentage |
11
+ |--------|-------|------------|
12
+ | VALID | 0 | 0% |
13
+ | ADJUST | 2 | 100% |
14
+ | INVALID | 0 | 0% |
15
+ | UNCLEAR | 0 | 0% |
16
+
17
+ ---
18
+
19
+ ## Citations Needing Adjustment
20
+
21
+ ### Reference 1: Srivastava et al. (2014) - Dropout
22
+
23
+ **Status:** ADJUST
24
+
25
+ #### Issue 1: Dropout probability
26
+
27
+ **Claim in manuscript:**
28
+ > the optimal dropout probability is p=0.5 for all layers
29
+
30
+ **What source actually states:**
31
+ > All dropout nets use p=0.5 for hidden units and p=0.8 for input units.
32
+
33
+ **Discrepancy:** Manuscript oversimplifies - different rates for hidden vs input layers
34
+
35
+ **Required fix:** Change "p=0.5 for all layers" to "p=0.5 for hidden units and p=0.8 for input units"
36
+
37
+ ---
38
+
39
+ #### Issue 2: MNIST error rate
40
+
41
+ **Claim in manuscript:**
42
+ > achieved an error rate of 0.89% on MNIST
43
+
44
+ **What source actually states:**
45
+ > Error rates can be further improved to 0.94%
46
+
47
+ **Discrepancy:** Wrong number (0.89% vs 0.94%)
48
+
49
+ **Required fix:** Change "0.89%" to "0.94%"
50
+
51
+ ---
52
+
53
+ ### Reference 2: Pedregosa et al. (2011) - Scikit-learn
54
+
55
+ **Status:** ADJUST
56
+
57
+ #### Issue 1: Language claim
58
+
59
+ **Claim in manuscript:**
60
+ > The library is written entirely in Python
61
+
62
+ **What source actually states:**
63
+ > Scikit-learn is written primarily in Python, with some core algorithms implemented in Cython
64
+
65
+ **Discrepancy:** "entirely" vs "primarily" - library uses Cython for performance
66
+
67
+ **Required fix:** Change "written entirely in Python" to "written primarily in Python"
68
+
69
+ ---
70
+
71
+ #### Issue 2: Algorithm count
72
+
73
+ **Claim in manuscript:**
74
+ > includes implementations of over 100 algorithms
75
+
76
+ **What source actually states:**
77
+ > integrating a wide range of state-of-the-art machine learning algorithms
78
+
79
+ **Discrepancy:** The source does not specify a number - "over 100" is unsupported
80
+
81
+ **Required fix:** Remove specific number or cite a different source
82
+
83
+ ---
84
+
85
+ #### Issue 3: Author count
86
+
87
+ **Claim in manuscript:**
88
+ > developed by a team of 12 authors
89
+
90
+ **What source actually states:**
91
+ > The authors of this paper number 16 contributors total
92
+
93
+ **Discrepancy:** Wrong count (12 vs 16)
94
+
95
+ **Required fix:** Change "12 authors" to "16 contributors"
96
+
97
+ ---
98
+
99
+ #### Issue 4: License type
100
+
101
+ **Claim in manuscript:**
102
+ > distributed under the MIT license
103
+
104
+ **What source actually states:**
105
+ > distributed under the simplified BSD license
106
+
107
+ **Discrepancy:** Wrong license type (MIT vs BSD)
108
+
109
+ **Required fix:** Change "MIT license" to "BSD license"
110
+
111
+ ---
112
+
113
+ ## Valid Citations
114
+
115
+ 0 citations accurately represent their sources.
116
+
117
+ ---
118
+
119
+ ## Full Verdict Files
120
+
121
+ - [Reference 1](verdicts/ref_01/verdict.md)
122
+ - [Reference 2](verdicts/ref_02/verdict.md)
123
+
124
+ ---
125
+
126
+ *Generated by reciepts*
@@ -0,0 +1,2 @@
1
+ # Add reference numbers to exclude from verification (one per line)
2
+ # Example: 3
@@ -0,0 +1,35 @@
1
+ # Regularization Techniques for Deep Learning: A Practical Guide
2
+
3
+ **Authors:** Demo Author
4
+
5
+ ## Abstract
6
+
7
+ This guide reviews foundational techniques for training neural networks, with emphasis on dropout regularization and practical tooling.
8
+
9
+ ## Introduction
10
+
11
+ Deep learning has revolutionized machine learning, but training deep networks effectively requires careful regularization. This paper reviews key techniques and tools.
12
+
13
+ ## Dropout Regularization
14
+
15
+ Dropout, introduced by Srivastava et al. (2014) [1], is one of the most widely used regularization techniques. The key idea is simple: during training, randomly drop units from the network to prevent co-adaptation.
16
+
17
+ According to Srivastava et al., the optimal dropout probability is **p=0.5 for all layers**, which they found to work well across a wide range of networks and tasks [1]. Using this approach, they achieved an error rate of **0.89% on MNIST** [1], demonstrating state-of-the-art performance at the time.
18
+
19
+ The authors showed that dropout "prevents complex co-adaptations in which a feature detector is only helpful in the context of several other specific feature detectors" [1].
20
+
21
+ ## Practical Implementation with Scikit-learn
22
+
23
+ For practitioners, scikit-learn (Pedregosa et al., 2011) [2] provides an accessible entry point to machine learning. The library is written entirely in Python and includes implementations of **over 100 algorithms** for supervised and unsupervised learning [2].
24
+
25
+ The project was developed by a team of **12 authors** and is distributed under the **MIT license**, making it suitable for both academic and commercial use [2]. The documentation includes approximately **300 pages** of user guides and **more than 60 examples** [2].
26
+
27
+ ## Conclusion
28
+
29
+ Dropout remains essential for training deep networks, while scikit-learn provides accessible implementations for practitioners.
30
+
31
+ ## References
32
+
33
+ [1] Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Journal of Machine Learning Research, 15(56), 1929-1958.
34
+
35
+ [2] Pedregosa, F., Varoquaux, G., Gramfort, A., et al. (2011). Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research, 12(85), 2825-2830.
@@ -0,0 +1,39 @@
1
+ # Dropout: A Simple Way to Prevent Neural Networks from Overfitting
2
+
3
+ Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever, Ruslan Salakhutdinov
4
+
5
+ Journal of Machine Learning Research 15 (2014) 1929-1958
6
+
7
+ ## Abstract
8
+
9
+ Deep neural nets with a large number of parameters are very powerful machine learning systems. However, overfitting is a serious problem in such networks. Large networks are also slow to use, making it difficult to deal with overfitting by combining the predictions of many different large neural nets at test time. Dropout is a technique for addressing this problem. The key idea is to randomly drop units (along with their connections) from the neural network during training. This prevents units from co-adapting too much.
10
+
11
+ ## 1. Introduction
12
+
13
+ Deep neural networks contain multiple non-linear hidden layers and this makes them very expressive models that can learn very complicated relationships between their inputs and outputs.
14
+
15
+ ## 4. Motivation
16
+
17
+ Overfitting is greatly reduced by randomly omitting half of the feature detectors on each training case. This prevents complex co-adaptations in which a feature detector is only helpful in the context of several other specific feature detectors.
18
+
19
+ ## 5. Related Work
20
+
21
+ Dropout can be seen as a way of regularizing a neural network by adding noise to its hidden units.
22
+
23
+ ## 7.1 Choosing Hidden Unit Dropout Rate
24
+
25
+ In the simplest case, each unit is retained with a fixed probability p independent of other units, where p can be chosen using a validation set or can simply be set at 0.5, which seems to be close to optimal for a wide range of networks and tasks.
26
+
27
+ **All dropout nets use p=0.5 for hidden units and p=0.8 for input units.**
28
+
29
+ ## 7.2 Results on MNIST
30
+
31
+ Table 2 compares different models on MNIST. The MNIST data set consists of 28×28 pixel handwritten digit images. The task is to classify images into 10 digit classes.
32
+
33
+ Error rates can be further improved to **0.94%** by replacing ReLU units with maxout units.
34
+
35
+ The lower set of lines also uses 20% dropout for the input layer (i.e., p=0.8 for inputs).
36
+
37
+ ## 8. Conclusion
38
+
39
+ Dropout improves the performance of neural networks on supervised learning tasks in vision, speech recognition, document classification and computational biology, obtaining state-of-the-art results on many benchmark data sets.
@@ -0,0 +1,33 @@
1
+ # Scikit-learn: Machine Learning in Python
2
+
3
+ Fabian Pedregosa, Gaël Varoquaux, Alexandre Gramfort, Vincent Michel, Bertrand Thirion, Olivier Grisel, Mathieu Blondel, Peter Prettenhofer, Ron Weiss, Vincent Dubourg, Jake Vanderplas, Alexandre Passos, David Cournapeau, Matthieu Brucher, Matthieu Perrot, Édouard Duchesnay
4
+
5
+ Journal of Machine Learning Research 12 (2011) 2825-2830
6
+
7
+ ## Abstract
8
+
9
+ Scikit-learn is a Python module integrating a wide range of state-of-the-art machine learning algorithms for medium-scale supervised and unsupervised problems. This package focuses on bringing machine learning to non-specialists using a general-purpose high-level language. Emphasis is put on ease of use, performance, documentation, and API consistency.
10
+
11
+ ## 1. Introduction
12
+
13
+ The scikit-learn project started in 2007 as a Google Summer of Code project by David Cournapeau. It has minimal dependencies and is distributed under the **simplified BSD license**, encouraging its use in both academic and commercial settings.
14
+
15
+ ## 2. Project Vision
16
+
17
+ Scikit-learn aims to provide simple and efficient solutions to learning problems that are accessible to everybody. We favor a batteries-included approach: we rely on and require as few user-installed dependencies as possible.
18
+
19
+ ## 3. Underlying Technologies
20
+
21
+ Scikit-learn is written primarily in Python, with some core algorithms implemented in Cython to achieve performance. It builds upon NumPy and SciPy.
22
+
23
+ ## 4. Code Quality
24
+
25
+ The package is supported by a comprehensive user guide of **approximately 300 pages** including narrative documentation, class references, a tutorial, installation instructions, as well as **more than 60 examples**, some featuring real-world applications.
26
+
27
+ ## 5. Authors
28
+
29
+ The authors of this paper number **16 contributors** total, representing institutions across France, Germany, and the United States.
30
+
31
+ ## 6. Conclusion
32
+
33
+ Scikit-learn provides a simple and efficient solution for machine learning in Python, enabling both academic research and commercial applications through its permissive BSD license.
@@ -0,0 +1,86 @@
1
+ ---
2
+ reference: 1
3
+ status: ADJUST
4
+ citation: "Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Journal of Machine Learning Research, 15(56), 1929-1958."
5
+ instances: 4
6
+ ---
7
+
8
+ # Verdict: Reference 1
9
+
10
+ ## Summary
11
+
12
+ Reference 1 is cited four times in the manuscript. Two citations are accurate: the general description of dropout and the direct quote about co-adaptations. However, two citations contain errors that require correction. First, the manuscript incorrectly claims "p=0.5 for all layers" when the source explicitly states different dropout rates for hidden units (p=0.5) versus input units (p=0.8). Second, the manuscript claims a 0.89% MNIST error rate, but the source document shows 0.94%.
13
+
14
+ ## Citation Instances
15
+
16
+ ### Instance 1
17
+
18
+ **Location:** Section "Dropout Regularization", paragraph 1
19
+
20
+ **Manuscript claims:**
21
+ > Dropout, introduced by Srivastava et al. (2014) [1], is one of the most widely used regularization techniques. The key idea is simple: during training, randomly drop units from the network to prevent co-adaptation.
22
+
23
+ **Source states:**
24
+ > Dropout is a technique for addressing this problem. The key idea is to randomly drop units (along with their connections) from the neural network during training. This prevents units from co-adapting too much.
25
+
26
+ **Assessment:** SUPPORTED
27
+
28
+ **Discrepancy:** None significant. The manuscript accurately paraphrases the core concept.
29
+
30
+ ---
31
+
32
+ ### Instance 2
33
+
34
+ **Location:** Section "Dropout Regularization", paragraph 2
35
+
36
+ **Manuscript claims:**
37
+ > According to Srivastava et al., the optimal dropout probability is **p=0.5 for all layers**, which they found to work well across a wide range of networks and tasks [1].
38
+
39
+ **Source states:**
40
+ > In the simplest case, each unit is retained with a fixed probability p independent of other units, where p can be chosen using a validation set or can simply be set at 0.5, which seems to be close to optimal for a wide range of networks and tasks.
41
+
42
+ **Source also states:**
43
+ > **All dropout nets use p=0.5 for hidden units and p=0.8 for input units.**
44
+
45
+ **Assessment:** NOT SUPPORTED
46
+
47
+ **Discrepancy:** The manuscript claims "p=0.5 for all layers" but the source explicitly states p=0.5 for HIDDEN units and p=0.8 for INPUT units. The source does NOT recommend p=0.5 for all layers.
48
+
49
+ ---
50
+
51
+ ### Instance 3
52
+
53
+ **Location:** Section "Dropout Regularization", paragraph 2
54
+
55
+ **Manuscript claims:**
56
+ > Using this approach, they achieved an error rate of **0.89% on MNIST** [1], demonstrating state-of-the-art performance at the time.
57
+
58
+ **Source states:**
59
+ > Error rates can be further improved to **0.94%** by replacing ReLU units with maxout units.
60
+
61
+ **Assessment:** NOT SUPPORTED
62
+
63
+ **Discrepancy:** The manuscript claims 0.89% error rate on MNIST, but the source document states 0.94% error rate. The figure 0.89% does not appear in the provided source material.
64
+
65
+ ---
66
+
67
+ ### Instance 4
68
+
69
+ **Location:** Section "Dropout Regularization", paragraph 3
70
+
71
+ **Manuscript claims:**
72
+ > The authors showed that dropout "prevents complex co-adaptations in which a feature detector is only helpful in the context of several other specific feature detectors" [1].
73
+
74
+ **Source states:**
75
+ > This prevents complex co-adaptations in which a feature detector is only helpful in the context of several other specific feature detectors.
76
+
77
+ **Assessment:** SUPPORTED
78
+
79
+ **Discrepancy:** None. This is a direct, accurate quotation from the source.
80
+
81
+ ---
82
+
83
+ ## Required Corrections
84
+
85
+ 1. Change "p=0.5 for all layers" to "p=0.5 for hidden units and p=0.8 for input units"
86
+ 2. Change "0.89%" to "0.94%"
@@ -0,0 +1,75 @@
1
+ ---
2
+ reference: 2
3
+ status: ADJUST
4
+ citation: "Pedregosa, F., Varoquaux, G., Gramfort, A., et al. (2011). Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research, 12(85), 2825-2830."
5
+ instances: 3
6
+ ---
7
+
8
+ # Verdict: Reference 2
9
+
10
+ ## Summary
11
+
12
+ Reference 2 is cited in three passages with mixed accuracy. The claims about documentation (300 pages, 60+ examples) are accurately supported by the source. However, there are significant factual errors: the manuscript incorrectly states the library is "written entirely in Python" when the source says it's "primarily" in Python with Cython components; the claim of "over 100 algorithms" has no basis in the source document; the author count is wrong (12 vs. 16); and the license type is wrong (MIT vs. simplified BSD).
13
+
14
+ ## Citation Instances
15
+
16
+ ### Instance 1
17
+
18
+ **Location:** Section "Practical Implementation with Scikit-learn", paragraph 1
19
+
20
+ **Manuscript claims:**
21
+ > The library is written entirely in Python and includes implementations of **over 100 algorithms** for supervised and unsupervised learning [2].
22
+
23
+ **Source states:**
24
+ > Scikit-learn is written primarily in Python, with some core algorithms implemented in Cython to achieve performance.
25
+
26
+ **Source also states:**
27
+ > Scikit-learn is a Python module integrating a wide range of state-of-the-art machine learning algorithms for medium-scale supervised and unsupervised problems.
28
+
29
+ **Assessment:** NOT SUPPORTED
30
+
31
+ **Discrepancy:** Two issues: (1) The manuscript claims "written entirely in Python" but the source says "written primarily in Python, with some core algorithms implemented in Cython". (2) The manuscript claims "over 100 algorithms" but the source document does not specify any number of algorithms - it only says "a wide range."
32
+
33
+ ---
34
+
35
+ ### Instance 2
36
+
37
+ **Location:** Section "Practical Implementation with Scikit-learn", paragraph 2
38
+
39
+ **Manuscript claims:**
40
+ > The project was developed by a team of **12 authors** and is distributed under the **MIT license**, making it suitable for both academic and commercial use [2].
41
+
42
+ **Source states:**
43
+ > The authors of this paper number **16 contributors** total, representing institutions across France, Germany, and the United States.
44
+
45
+ **Source also states:**
46
+ > It has minimal dependencies and is distributed under the **simplified BSD license**, encouraging its use in both academic and commercial settings.
47
+
48
+ **Assessment:** NOT SUPPORTED
49
+
50
+ **Discrepancy:** Two errors: (1) The manuscript claims "12 authors" but the source clearly states "16 contributors" (and 16 names are listed in the paper header). (2) The manuscript claims "MIT license" but the source explicitly states "simplified BSD license".
51
+
52
+ ---
53
+
54
+ ### Instance 3
55
+
56
+ **Location:** Section "Practical Implementation with Scikit-learn", paragraph 2
57
+
58
+ **Manuscript claims:**
59
+ > The documentation includes approximately **300 pages** of user guides and **more than 60 examples** [2].
60
+
61
+ **Source states:**
62
+ > The package is supported by a comprehensive user guide of **approximately 300 pages** including narrative documentation, class references, a tutorial, installation instructions, as well as **more than 60 examples**, some featuring real-world applications.
63
+
64
+ **Assessment:** SUPPORTED
65
+
66
+ **Discrepancy:** None. The claims about 300 pages and more than 60 examples are accurately reflected in the source.
67
+
68
+ ---
69
+
70
+ ## Required Corrections
71
+
72
+ 1. Change "written entirely in Python" to "written primarily in Python, with some core algorithms in Cython"
73
+ 2. Remove "over 100 algorithms" claim or cite a different source
74
+ 3. Change "12 authors" to "16 contributors"
75
+ 4. Change "MIT license" to "simplified BSD license"
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "receiptscc",
3
+ "version": "0.9.0",
4
+ "description": "Verify your citations say what you claim. One command.",
5
+ "keywords": [
6
+ "citations",
7
+ "verification",
8
+ "academic",
9
+ "llm",
10
+ "claude-code",
11
+ "research-integrity",
12
+ "neurips",
13
+ "peer-review",
14
+ "receipts"
15
+ ],
16
+ "author": "James Weatherhead",
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/JamesWeatherhead/receipts"
21
+ },
22
+ "homepage": "https://github.com/JamesWeatherhead/receipts#readme",
23
+ "bin": {
24
+ "receiptscc": "./bin/install.js"
25
+ },
26
+ "files": [
27
+ "bin/",
28
+ "commands/",
29
+ "agents/",
30
+ "demo/"
31
+ ],
32
+ "devDependencies": {
33
+ "puppeteer": "^24.36.1"
34
+ }
35
+ }