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 +21 -0
- package/README.md +261 -0
- package/agents/receipts-verifier.md +47 -0
- package/bin/install.js +178 -0
- package/commands/receipts/receipts.md +105 -0
- package/demo/CHECKLIST.md +21 -0
- package/demo/README.md +51 -0
- package/demo/RECIEPTS.md +126 -0
- package/demo/excluded_refs.txt +2 -0
- package/demo/manuscript.md +35 -0
- package/demo/sources/ref_01_srivastava2014.md +39 -0
- package/demo/sources/ref_02_pedregosa2011.md +33 -0
- package/demo/verdicts/ref_01/verdict.md +86 -0
- package/demo/verdicts/ref_02/verdict.md +75 -0
- package/package.json +35 -0
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
|
package/demo/RECIEPTS.md
ADDED
|
@@ -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,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
|
+
}
|