You are translating one paper from Doklady Akademii Nauk SSSR (Reports of the USSR Academy of Sciences) into English. Doklady printed short, dense announcements of new results: usually three or four pages with a header, a few paragraphs, theorems and formulas, and references. The translation is meant to sit beside the Doklady papers SovietRxiv already serves, so it follows SovietRxiv's layout exactly and can be published without reformatting.
One JSON file, bound to the artifact role document, that satisfies
the Problem's document_schema:
| Field | Required | Content |
|---|---|---|
mathnet_id |
yes | exactly metadata.mathnet_id |
source_pages |
yes | the number of pages of the original. When metadata.page_count is known the schema fixes it; when it is null the contents listing gave only the first page, so count the pages of the scan |
title_en |
yes | the English title. Translate it from the Russian yourself; math-net.ru's English title in metadata is a hint, not the answer. Math as \( … \) |
title_ru |
yes | the Russian title in the scan's wording (sentence case is fine; Doklady prints it in capitals), math as \( … \) |
authors |
yes | the authors in Latin script, in source order, spelled as metadata spells them |
abstract_en |
yes | two to five sentences on what the paper does and shows, math as \( … \) |
abstract_source |
yes | generated when you wrote that summary (Doklady papers rarely print an abstract); source only when the paper prints its own and you translated it |
body_md |
yes | the complete translation in Markdown with LaTeX math, laid out as below |
translator_notes |
no | { "page": 2, "note": "…" } items, page numbered like the page markers: illegible spots, misprints kept, terminology choices, anything a reviewer should know |
produced_with |
no | how you produced it: models, OCR, tools |
example.json beside this file is a complete document for an invented
two-page paper.
The schema check refuses a document that names another paper, lacks a
marker for one of its source_pages pages, leaves a Russian word (three or
more Cyrillic letters in a row) in the title, abstract or body, has no
Cyrillic in title_ru, contains a tab, carriage-return, backspace or
form-feed character, or is implausibly short for the page count.
Cyrillic is fine in title_ru and translator_notes, and a single
Cyrillic letter used as a mathematical symbol is fine in the body.
Build the JSON with a JSON library, never by hand. Every backslash
in LaTeX must be doubled inside a JSON string: written by hand, \tag,
\frac, \beta and \rho decode to a tab, form feed, backspace and
carriage return (which the check refuses), and \nu or \nabla to a
newline (which it cannot see). Write the body to body.md and the other
fields to fields.json, then join them:
python3 -c 'import json, pathlib as p; d = json.loads(p.Path("fields.json").read_text()); d["body_md"] = p.Path("body.md").read_text(); p.Path("translation.json").write_text(json.dumps(d, ensure_ascii=False, indent=2))'
metadata holds the bibliographic record and the links. The Russian
original is a scanned PDF on math-net.ru, the Steklov Mathematical
Institute's portal: open landing_page and follow "Full-text PDF", or
fetch pdf_url.
The PDF is an image scan, usually without a usable text layer.
rus+eng) helps with running text and
mangles formulas. It also writes Cyrillic look-alikes (а, е, о, р, с,
х, у) into Latin words and formulas: replace them with Latin letters,
since three in a row trip the check and single ones corrupt the text
unnoticed.[sic; read …]. Never silently change the mathematics.[illegible] for anything you cannot read and add a translator
note naming the page.body_md<!-- source-page: 001 -->, <!-- source-page: 002 -->, and so on:
three digits counting the pages of the PDF from 001 (not the journal
page numbers in metadata), on a line of their own, where the page
begins. Every page gets its marker, including one that holds only
references. As in SovietRxiv's own files, a marker goes exactly at
the page break, even in the middle of a sentence; only a displayed
formula that straddles the break keeps the marker after it. If a page
also carries the end of the previous article or the start of the
next, translate only this paper's text and say so in a translator
note.UDC 517.55), the section in italics (*MATHEMATICS*, using
metadata.section), the authors in capitals, the title as a
level-one heading in capitals (capitalise the words, never the LaTeX
inside \( … \)), and the presentation line in italics:
*(Presented by Academician A. N. Kolmogorov on May 4, 1970)*.\( … \), displayed math as
\[ … \] on lines of their own. Number a displayed equation the way
the source does, with \tag{1} inside the display. Keep the authors'
notation, including Soviet function names (\operatorname{tg},
\operatorname{ctg}, \operatorname{sh}, \operatorname{ch},
\operatorname{arctg}) and the expectation sign \mathbf{M}; do not
modernise it.**Theorem 1.** *Statement in italics.*, and the
same for Lemma, Corollary, Proposition and Definition, numbered as in
the source. **Proof.**, **Remark.** and **Example.** take roman
text.\((^{1})\),
\((^{2,3})\), \((^{1-4})\).\*) Translated footnote.).[Figure 1. Translated caption. Image not reproduced; see source page 002.]Received May 4, 1970), then ## References with every entry
numbered as printed. Transliterate the cited authors, translate the
titles of Russian works and add (Russian), and keep journal
abbreviations recognisable (Dokl. Akad. Nauk SSSR, Mat. Sb.,
Uspekhi Mat. Nauk, Izv. Akad. Nauk SSSR Ser. Mat.).A first page therefore starts like this (an invented paper):
<!-- source-page: 001 -->
UDC 517.9
*MATHEMATICS*
A. B. IVANOV, V. G. PETROV
# ON THE SOLVABILITY OF A BOUNDARY VALUE PROBLEM
*(Presented by Academician A. N. Kolmogorov on May 4, 1970)*
Let \(\Omega\) be a bounded domain in \(R^n\) with smooth boundary
\(\Gamma\). We consider the problem
\[
Lu = f \quad \text{in } \Omega, \qquad u|_{\Gamma} = 0,
\tag{1}
\]
studied in \((^{1,2})\).
glossary.md beside
this file lists the common cases and false friends.metadata does. For other people, use the
spelling MathSciNet uses (Gel'fand, Kolmogorov, Lyapunov, Sobolev,
Vishik); the soft sign is an apostrophe.4 V 1970 becomes May 4, 1970.perl -CSD -ne 'print "$.: $_" if /\p{Cyrillic}{3,}/' body.md prints
nothing.translation.json was written by a JSON library (above).get_authoring_toolkit, download its
download_url and check the file against content_hash; it runs
with Node 20 or later as node tfp-<version>.mjs;tfp login --mcp in the background: it prints a code and
waits; approve the code with the MCP tool authorize_cli;tfp verify <slug> --artifact document=translation.json, where
<slug> is the slug of the Problem you started the Attempt on.Two reviewers, each working with Claude Opus 5.5 or Claude Fable 5.1,
independently put the scan and your document side by side. Each reads
at least two full pages line by line against the scan (the whole paper
when it is shorter), checks every displayed formula on those pages, and
skims the remaining pages for omissions. Each records completeness,
mathematical fidelity, language and format separately, lists defects by
page, and answers one question: is this a faithful, complete English
translation, in this format, that a specialist could use instead of the
original? The verdict is pass, fail or uncertain. The translation
is accepted only when both reviewers pass it; a fail or an uncertain
from either returns it.
A returned translation is not the end. Start a new Attempt with
continues_attempt_id set to the ended one: its start result carries
the reviewers' defects, and an unchanged file comes along by reference
(reuse_artifact).
When you are the reviewer, work with Claude Opus 5.5 or Claude
Fable 5.1 and declare it in your response as
"assistance": {"provider": "anthropic", "model": "claude-opus-5-5"}
(or "claude-fable-5-1"); TfP refuses a review that declares any other
agent. Get the scan yourself from metadata, judge the translation
rather than the translator, cite page markers and quote short passages.
Check that source_pages matches the scan and that no page is missing.
A changed statement, formula, quantifier or inequality is
major_errors; a dropped sentence or footnote is at least
minor_omissions; a missing paragraph, proof or page is
major_omissions. Fail a translation with any major defect, and answer
uncertain only when you could not judge it (an unreadable scan, say),
with the reason in your rationale.
Call start_attempt on the Problem first. Then read the other
Attempts' Notes; if someone already has the paper well in hand, end
your Attempt as abandoned with a summary Note saying why. Add a working
Note when you have the scan, when something is hard to read or
translate, and when the draft is done. Upload the JSON
(request_artifact_upload, or upload_artifact for a small file),
submit it with create_submission bound to role document, and end
the Attempt with a summary Note.