Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
5ecd794
check: a verdict needs a block that exists, and a picture to show for it
defraction0 Sep 4, 2026
51d4618
cli: guard the manuscript slot, and stop --parse-only rewriting it
defraction0 Sep 4, 2026
21ec296
report: a gap claim owes its per-source state, an anchor its tri-state
defraction0 Sep 4, 2026
47a8855
evals: eligibility before alignment, and two figures named honestly
defraction0 Sep 4, 2026
26d6bd4
docs: 0.4.1, and six README claims the code does not make
defraction0 Sep 4, 2026
13b683f
refs: stop the tool inventing references
defraction0 Sep 4, 2026
f0b840d
scout: say which failure it was
defraction0 Sep 4, 2026
55e49a3
docs: changelog for the fabricated-reference fixes
defraction0 Sep 4, 2026
d876382
scout: search for the subject, and stop blaming a paper for its own year
defraction0 Sep 4, 2026
265f3c3
report: the HTML looks never actually escaped anything
defraction0 Sep 4, 2026
a2ebf45
docs: changelog for the scout and escaping fixes
defraction0 Sep 4, 2026
c4524fc
refs: the body's labels arbitrate the reference numbering
defraction0 Sep 5, 2026
e7eec56
check: a source directory says which file it was built from
defraction0 Sep 5, 2026
0c5b41f
refs: a deposited reference list must belong to this paper
defraction0 Sep 5, 2026
8998792
refs, ingest: a paper's title comes from the paper, its identity from…
defraction0 Sep 5, 2026
f99e52b
check: one rule for where the bibliography begins, not two
defraction0 Sep 5, 2026
a0f17c8
report: an unnarrowed doubt taints every label, as the banner already…
defraction0 Sep 5, 2026
4dd9e37
refs: a file nobody named for a reference is not judged as its source
defraction0 Sep 5, 2026
3b409bf
scout: check the record is this paper, instead of trusting which quer…
defraction0 Sep 5, 2026
19f83ce
check, cli: a table's own numbers are not citations
defraction0 Sep 5, 2026
f61b5a6
cli: the "no case folder" hint said "here" for a search it never ran
defraction0 Sep 5, 2026
c11b3f4
check: the judging call ran with the wrong repo's rules and a full to…
defraction0 Sep 5, 2026
0d41357
cli: init --for <paper> names the case folder the way run would
defraction0 Sep 5, 2026
25019ed
check: _ask's scratch cwd was the shared, world-writable /tmp root
defraction0 Sep 5, 2026
60b751f
cli: split ingest's Typer command from the pipeline it silently doubl…
defraction0 Sep 5, 2026
f7f9989
cli: split refs's Typer command from the pipeline it silently doubled as
defraction0 Sep 5, 2026
f687cc5
docs: two proposals declined, with the reasons on file
defraction0 Sep 5, 2026
847f7a6
report: a headline is one source's verdict, not the claim's
defraction0 Sep 5, 2026
6fcf913
report: report.md by default, the HTML looks on request
defraction0 Sep 5, 2026
0afa910
check: the judge reads the paper's sentence, not a summary of it
defraction0 Sep 5, 2026
e13b968
check: cited sources get the layout backend, and docling stops being …
defraction0 Sep 6, 2026
8d43cd8
demo: regenerate the committed report under 0.5.0, and pin its judge
defraction0 Sep 6, 2026
b873478
docs: say what the docling dependency actually costs
defraction0 Sep 6, 2026
295d255
check: enumerate the citations first, instead of reconstructing them …
defraction0 Sep 6, 2026
fb01849
cli: papertrace --version
defraction0 Sep 6, 2026
5a26c3e
demo: regenerate the showcase so its caveat matches the code
defraction0 Sep 6, 2026
443f7b7
models: a supplement is a document, not a reference
defraction0 Sep 6, 2026
4db8430
refs: supplements attach to the reference they name
defraction0 Sep 6, 2026
96169b3
cli: --supplement, for the audited paper's own
defraction0 Sep 6, 2026
30ac6b9
check: a cited work's supplements are judged too
defraction0 Sep 6, 2026
2d5f0a4
check: claims that point at this paper's own supplement
defraction0 Sep 6, 2026
1510aac
report: a headline ranges over documents, not cited sources
defraction0 Sep 6, 2026
40dd6eb
wizard: ask for the sources folder it never asked for
defraction0 Sep 6, 2026
eae6e00
docs: supplements, and one stale line about flat text
defraction0 Sep 6, 2026
6f70f48
report: the terminal look says origin only when it is not the article
defraction0 Sep 6, 2026
11e6040
refs: identify a provided PDF by what is in it
defraction0 Sep 6, 2026
51a4152
refs: a content-identified file resolves its reference
defraction0 Sep 6, 2026
db3aae9
refs: a supplement that names its own parent is verified
defraction0 Sep 6, 2026
baecaf9
refs: a short surname stops matching supplements on the year alone
defraction0 Sep 6, 2026
a3a60e2
report: say which supplements were checked, not that none were
defraction0 Sep 6, 2026
d92843e
wizard: ask whether there are PDFs before asking where they are
defraction0 Sep 6, 2026
81568c7
docs: filenames are a fallback now, not the rule
defraction0 Sep 6, 2026
d4a0345
refs: the exact signal decides, not alphabetical order
defraction0 Sep 6, 2026
063be71
tests: stop depending on the machine that runs them
defraction0 Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .claude/skills/fact-check/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,25 @@ with `refs_manifest.json` and per-source ingests under `case/ingest/<slug>/`.
forbidden move. Your training knowledge of a paper is NOT evidence; only
the PDF on disk is.

**A reference may carry `supplements`.** Each is a separate document with
its own slug, and each is judged **separately** — one verdict, one anchor,
one crop apiece, exactly as two co-cited references would be. Do not merge
an appendix's evidence into the article's verdict. The claim's headline is
the most adverse across all of them.

The manuscript's own supplementary material is in `manuscript_supplements`,
and answers for no citation label. A claim pointing at *this paper's*
"Table S3" is judged against those; with none supplied the verdict is
`not_retrieved`, never a guess from the main text.

**Check `verified` on each supplement.** True means its own title or DOI
named the work it accompanies. False means it was attached because its
filename carried the reference's tokens and nothing read it — say so when
a verdict rests on one of those.

2. **Ingest on demand.** If `case/ingest/<slug>/` doesn't exist yet:
`papertrace ingest <pdf> -o case/ingest/<slug>`
Supplements use their own slug, so they get their own folder.

3. **Read for the claim.** Search the source's `clean.md` for the claim's
subject (numbers, named methods, populations). Read the matching blocks in
Expand Down
33 changes: 27 additions & 6 deletions .claude/skills/review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,26 @@ Print this banner (verbatim, in a fenced code block), then the one-liner:

## 1 · Intake (one batched exchange, not an interrogation)

Ask for all four at once, as a short checklist the user can answer in one message:
Ask for all five at once, as a short checklist the user can answer in one message:

1. **The paper** — path to the PDF of interest (a paper you build on, one
you're evaluating, your own).
2. **Sources you already have** — a folder of reference PDFs, if any.
Optional: open-access copies of the rest are fetched automatically.
3. **Your questions** — what you want answered about this paper: free text,
**Tell them not to bother renaming**: each PDF is identified by its own
DOI or title, so publisher downloads work as they came. Supplementary
material for a cited paper goes in the same folder too; several per
reference is fine, and each is judged as its own document. One whose
article is missing is set aside, so ask for the article too if they
have it.
3. **Supplementary material for the paper itself** — the paper's own SI,
appendices or eTables, if any. Optional, but a claim pointing at
"Table S3" cannot be checked without it.
4. **Your questions** — what you want answered about this paper: free text,
a list, or screenshots of form fields (a journal's reviewer form works
too). Optional — without it, the standard audit runs: citation accuracy,
coverage, uncited assertions, newer & overlooked literature.
4. **Prior critique** — what's already been said about this paper, to be
5. **Prior critique** — what's already been said about this paper, to be
weighed as source material: published comments or letters, PubPeer
threads, earlier reviewer reports and author responses, your own notes.
Optional.
Expand Down Expand Up @@ -99,15 +108,26 @@ literature, methods and results consistency — and say you did.
## 4 · Retrieval — live ticker

```bash
papertrace refs <paper.pdf> --provided <sources_dir> -c <case>
papertrace refs <paper.pdf> --provided <sources_dir> -c <case> --supplement <si.pdf>
```

Drop `--supplement` when the paper has none; repeat it when it has several.

Stream the per-reference ticker as it runs (✓ retrieved via unpaywall · ✓
provided by you · ⚠ paywalled · ⚠ no DOI). Close with the honest summary
line, e.g. **“19/42 sources available — 23 not obtainable (paywall / no DOI /
unpublished)”**, and remind the user they can drop more PDFs into the sources
folder at any point; you'll pick them up on request.

Three lines in that ticker deserve saying out loud rather than scrolling past.
`identified … by its own DOI/title` means a file the filename rule could not
place was recognised from its contents. `+ N supplements` means extra documents
will be judged, and extra model calls spent. `⚠ … set aside` means a file the
user supplied did **nothing** — its article was never obtained, its title
matched two references equally, or nothing in it could be read — and each has a
different fix. Never let that last one pass silently: the user believes that
file was used.

For a published paper, also run the literature scout
(`papertrace scout -c <case>`, `--doi` if the title lookup misses) and show
its two registers: published since, and existed-but-uncited. Candidates for
Expand All @@ -121,8 +141,9 @@ Never bypass a paywall. Never pretend a source was read that wasn't.
from `source_map.json` and say it in your first message after ingest. Not only
when it is bad news: a reader who is told nothing cannot judge the fidelity of
what follows in either direction, and the CLI now states it at the start and the
end of every run. Say also that cited sources are always read as flat text, so a
"docling" line is not mistaken for a claim about them.
end of every run. Cited sources and supplements are read with the **same**
backend as the paper (since 0.5.0), each recorded under its own slug — so name
any that came back `pymupdf` while the paper did not.

If the backend is `docling`, table blocks are real GFM tables and figure blocks
carry captions with page bboxes. While working through Results/Discussion,
Expand Down
Loading
Loading