Skip to content

corpus review: the instrument for one sitting of 150, prepared and empty - #98

Merged
PipFoweraker merged 3 commits into
mainfrom
corpus-review-sitting-2026-08-24
Aug 28, 2026
Merged

PipFoweraker merged 3 commits into
mainfrom
corpus-review-sitting-2026-08-24

Conversation

@PipFoweraker

Copy link
Copy Markdown
Owner

Branch left on the remote before the Singapore departure, never PR'd. Merged with current main, no conflicts, all 28 gating checks pass.

This is the review instrument for the bulk corpus. It is prepared and empty -- the sample frame exists, no verdict has been recorded, and merging it changes no served data.

One question, asked verbatim

Would you want this paper in an AI-safety reference corpus?

It is the only question asked, and REVIEW_THE_BULK_2026-08-19.md §1 works out why the other three candidates are not for a human: description quality is a defect in our own extractor, schema conformance is one key and one empty array, and whether the bulk belongs in timeline_events is one ruling rather than 1,166 judgements.

The question is stored verbatim in frame.json and again on every row of verdicts.jsonl, because a verdict whose question must be reconstructed from context is not evidence of anything.

The shape that makes it honest

value means
yes / no worth carrying, or not
unknown looked and could not tell
skip deliberately passed over
(no row) not yet reviewed

unknown and skip are never folded into no, into each other, or into absence -- a paper outside the reviewer's field is an honest unknown, and how many there are is a finding rather than a gap. Not-yet-reviewed is an absence, never a value, because a token can be read as a judgement and an absence cannot. retracted is an undo, not an answer: it returns a record to unreviewed while leaving both the judgement and the retraction in the log.

The frame was written before anything was fetched and before any key was pressed -- seed, population, exclusions, n, and the drawn ids -- so it cannot have been chosen after seeing the results.

The .gitignore addition is not the #87 trap

It ignores exactly two things, and neither is judgement:

  • data/raw/arxiv_abstracts/dumps/*/data.jsonl -- a fetch that prepare_corpus_review.py reproduces from the seed in frame.json, and whose real abstracts carry non-ASCII author names and mathematics the ASCII gate would reject. _metadata.json stays tracked -- that is the provenance.
  • tools/corpus_review.html -- regenerated every time the server starts.

verdicts.jsonl and frame.json, the parts that cannot be reconstructed, are tracked. That is the distinction #87 was about.

PipFoweraker and others added 3 commits August 24, 2026 11:12
… 150

Makes step B1 of docs/design/REVIEW_THE_BULK_2026-08-19.md unconditional. The
design document offered the sample "on request" and the request never came;
the change that matters is that the sample no longer needs a ruling to exist.

Two scripts and one prepared pass.

  prepare_corpus_review.py  draws a seeded random 150 from the 1,129 arXiv
                            bulk records, writes frame.json BEFORE fetching
                            anything, then pulls the real abstracts into an
                            immutable raw dump.
  serve_corpus_review.py    one record per screen, four keys, and every
                            keypress appended and fsync'd to verdicts.jsonl
                            before the next card is drawn.

NO HUMAN FIELD IS SET BY THIS COMMIT. verdicts.jsonl does not exist yet, and
an absent verdicts.jsonl is the correct state before a sitting. The 150 rows
are Pip's to write.

Four answers, and the distinctions are the whole point: yes, no, unknown
("looked at it and could not tell"), skip ("passed over without judging").
Neither is ever folded into `no` and neither is ever folded into the other.
A record with no row is NOT YET REVIEWED, which is an absence and never a
value, because a value can be read as a judgement and an absence cannot.
`retracted` is an undo, not a fifth answer.

Reused rather than rebuilt: the interaction model is tools/review_queue.html
unchanged in substance -- note box focused at all times so dictation lands
somewhere, verdicts bound to punctuation so no letter fires one mid-sentence.
The append-before-state discipline is triage_watch.py and art_review's
serve_review.py. It is a local server rather than the static sheet the design
document proposed, on one requirement the document did not have: a judgement
must be on disk the moment it is made, and a file:// page cannot write to
disk. Closing the tab at 91 leaves 91 judgements.

Two things measured on the way, both external inputs per pdoom1#1075:

  * The arXiv Atom API answers HTTP 429 "Rate exceeded" to every request from
    this address, including a single id. OAI-PMH GetRecord works. Both paths
    are in the script, Atom first.
  * OAI-PMH <created> is NOT the v1 submission date -- for 1803.04585 it is
    2019-02-24 against an identifier saying 2018-03, and for WebGPT it is
    2022-06-01 against 2021-12. A first draft of this stored it as
    `published`, and that field name alone produced a confident wrong finding
    of 38 year-disagreements in 150. Against the identifier's own month, the
    real figure is 9. The endpoint-specific names are now in the field names.

Nothing written to data/serveable/. No per-record field on any bulk record.
No widening of event_v1. No tag vocabulary and no rating scale.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…he keys

The key mapping is only stated in two places -- the banner and the page
footer. A banner lost to buffering is a reviewer guessing at the keys.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@PipFoweraker
PipFoweraker merged commit 76ffb9f into main Aug 28, 2026
4 checks passed
@PipFoweraker
PipFoweraker deleted the corpus-review-sitting-2026-08-24 branch August 28, 2026 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant