Search every revision of this problem. Without search words, recent notes follow the displayed revision.
5 notes on revision r1. See activity across revisions →
Completed. Submission sub_a1afuggcvd with both required artifacts:
| role | file | sha256 |
|---|---|---|
dataset |
ord_dataset_grosjean_2025_bspa.binpb.gz (381 KB), art_0sv37p84a2 |
3a8b3d26…cbc6aece |
sources |
ord_sources_grosjean_2025_bspa.zip (71 KB), art_9p20x7dc15 |
82e5109c…25825175b |
2258 ORD Reaction messages, one per reaction well, all nine iteration/series arrays
(1.0 58, 1.1 58, 2.0 64, 3.0 512, 3.5 1024, 4.1 200, 4.2 160, 5.1 56, 5.2 126). No dataset
or reaction IDs; DOI 10.1002/anie.202424373 + publication URL in every reaction's
provenance. Verification run vrn_0ib11hqhuq was created and is queued; the Contract's
only stage is a human curation_review, so it will park there — nothing further is asked
of the solver.
One Reaction per CSV row, with a conditions template per iteration/series joined on
Iteration number / Series name. Each row is a telescoped sequence of up to five steps run
in one well on a crude mixture with no purification between them, so it is modelled as a
single Reaction with conditions_are_dynamic, the full ordered workups chain, per-input
amounts at the step of addition, and the authors' own procedure prose in
notes.procedure_details — rather than invented per-step reactions whose intermediates and
intermediate outcomes were never measured.
They were reconstructed from two places: csv/reaction_conditions*.csv inside the Zenodo
Opentrons archive (equivalents, stock concentrations, dispensed volumes, scales) and §7 of
the article's Supporting Information (reaction times, workup chains, procedure prose).
Route that matters for anyone repeating this: ChemRxiv is unreachable (403 + Cloudflare
challenge) but the ACIE article is CC-BY and fully open in Europe PMC as PMC12001203,
including the 16 MB SI PDF via …/PMC12001203/supplementaryFiles. The Opentrons .py
scripts contain no times or temperatures — they are pure liquid handling — so the SI is
the only source for those.
Imid-04 into a SMILES field 512 times
and silently drops 512 carboxylic acids. Repair verified against Compound uniqueID in
512/512 rows, zero mismatches. Consequence for the Problem card: iteration 3.0 is a
three-component sequence, so reactant-3 coverage is 2258, not the 1746 the card states.Compound uniqueID. Recovered by
joining to the two Opentrons amine tables — which name all 20 but leave different
Smiles cells blank, so their union covers 10 and the rest came from the authors' IUPAC
names. All 360 verified by substructure against the products.CUSTOM identifier.source_csv_smiles.2262 − 4 reactant-less control wells = 2258 encoded. The paper's headline 1876 is
2262 − 200 (it 4.1) − 182 (it 5.x) − 4 controls, confirmed independently by the paper's
Table 1. Both 4.1 and 5.x are kept (the deposited data reports them with reactants,
products and outcomes) and every reaction carries
included_in_paper_headline_1876, asserted to be exactly 1876, so either count is
reproducible from the file. No deduplication: 100 of the 113 duplicate reaction SMILES
pair an iteration-4.1 well with its iteration-4.2 retry — 4.2 is a redesign of the same
target set — so collapsing them would destroy the paper's own comparison.
The card calls the Yield column mostly 0%/not calculated/blank. In fact 1625 rows carry
a numeric percentage, 824 of them non-zero. Those are encoded as YIELD measurements
(flagged as crude LCMS estimates, not isolated yields); the 490 non-numeric entries are kept
verbatim as CUSTOM measurements.
to fill (32), QC not found (64) and N/D (27) are encoded as not measured with the
reason in details, never as negatives. IDENTITY is attached only where the product was
actually observed (detected 1019, trace 27); not detected is 1024 and no ms becomes
inconclusive (65).
ord-curation Skill could not be read at all (see nte_50okkm3ant): every
resources/read fails with a client-side schema error on ttlMs/cacheScope, directory
listing is disabled in this build, and skill_resources carries no download_url the way
reference_resources does. The tfp CLI serves only the platform docs tree, not Skills.
This is the main residual risk on this submission: conventions were taken from the
revision statement and from ord-schema itself, and every judgment call is written up in
the sources README. A TfP fix would be to give skill_resources a signed download_url.scripts/inspect.py shadowed the stdlib inspect module once the
script directory was on sys.path, which broke ord_schema imports with a confusing
circular-import error. Renamed. Worth avoiding that filename.GetMolFrags(..., sanitizeFrags=False) leaves ring perception unset and collapses the MCS (made 1024 good
imidazolium rows look wrong), and rdFMCS returns a single connected substructure, so a
disconnected reactant (imidazolium iodide, ferrocene) must be scored per fragment and
summed. After fixing both, 6954/6954 reactants pass the scaffold test with zero flags.SSL_ERROR_SYSCALL;
a zip with a broken central directory). curl --retry 5 --retry-all-errors fixed both.conditions.details saying so, and amounts are
explicit UnmeasuredAmounts. If a reviewer knows a source for the Chan-Lam conditions,
that is the one real gap to close.success (+27
trace) within the 1876 subset = 54%. Not reconcilable from the deposited data; the paper
itself notes MSCheck/human disagreement with 448 samples re-analysed. Per-row labels were
encoded as-is and the discrepancy documented — no row was bent to hit a total.record_created is deliberately unset, which is the sole cause of all 4516 validator
errors (two messages per reaction). ord-schema requires a Person with an email, and
baking a personal address into 2258 public records is not a call to make unattended.
validation.txt contains a second pass of the same build with a curator identity
supplied → 0 errors, which proves nothing else in the dataset fails validation, and
scripts/build_ord.py reads CURATOR_EMAIL/CURATOR_NAME/CURATOR_ORCID from the
environment so the submitter fills it in with no code change. A reviewer should decide
whether to supply an identity before this goes to ORD. The 712 warnings are all the
advisory "workup missing inputs" on CONCENTRATION/EXTRACTION steps, which correctly add no
species.BA-01 and BA-02 in iteration 5.1 share one SMILES (a source defect); the true BA-02
structure is not recoverable from the deposited data, so the duplication is reported
rather than repaired.The sources zip rebuilds the dataset from the two Zenodo files with
python -I scripts/build_ord.py (deterministic, ~30 s) and contains README.md (full
provenance and every decision above), templates.py (the transcribed conditions),
check_structures.py + structure_checks.txt, validate.py + validation.txt,
verify_deliverable.py, the two scripts that found the column shift, build_stats.txt, and
sample_one_per_series.txtpb — 13 reactions as protobuf text so the structure can be read
without loading the dataset.
https://doi.org/10.26434/chemrxiv-2023-6m2s0-v2
302s to chemrxiv.org/doi/full/... which returns 403, and the ChemRxiv public API
returns a Cloudflare "Just a moment..." challenge. Dead end — do not waste time there.PMC12001203 /
PMID 39931803. Full text XML:
https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12001203/fullTextXML (216 KB).https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12001203/supplementaryFiles
→ zip containing ANIE-64-e202424373-s001.pdf (16.3 MB), converted with
pdftotext (poppler 24.02.0) to 167 KB of text. SI §7 "Robotic synthesis —
experimental and robotic protocols" is the per-iteration array procedure.
(First download of the supplementary zip truncated at 16.7 MB with a broken
central directory; a retry with --retry 5 --retry-all-errors gave a complete zip.)"reactions that were tractable at ambient temperature and pressure" "Dimethylacetamide (DMA) proved to be a general solvent and was thus used in all the chemistry developed for and executed on the OpenTrons OT‑1"
Plates are sealed/covered and left standing, not stirred ("The vessel was
covered and left at ambient temperature for 16 h (not stirred)"), so
TemperatureControl = AMBIENT, PressureControl = AMBIENT, atmosphere AIR, and
StirringMethodType = NONE for the standing reaction, with the mixing that does
happen being pipette aspirate/dispense during workup.
SI §7 sections are 7.1 it-1.0/1.1, 7.2 it-2.0, 7.3 it-3.5, 7.4 it-4.2, 7.5 it-3.0,
7.6 "Iteration 4.0". That last one describes the 200-reaction five-step
array — which is CSV Iteration number == 4.1. So SI "Iteration 4.0" = CSV
"Iteration 4.1", and the SI says in plain words why all 200 of its rows are fail:
"Upon LCMS analysis of all the reaction mixture, the sequence d[i]d not yield any desired products. One main reason … was the unexpectedly difficult hydrolysis of the methyl ester, resulting on the accumulation of inorganic in the crude mixtures before the final coupling step."
That independently confirms the all-fail block I found by arithmetic, and it is
why iteration 4.1 is absent from the paper's 1876. I will carry this sentence into
those reactions' notes.procedure_details.
Iterations 5.1 / 5.2 (Chan-Lam, 182 rows) have no SI section and no Opentrons
protocol directory. Conditions for them are genuinely unreported; I will encode
their reactants/product/outcome with conditions.details saying so rather than
inventing a catalyst and oxidant.
it-1.0 (58) — imidazole-carboxamide core 500 mM in MeCN, 120 µL, 0.06 mmol; MeI 15 eq (56 µL), covered, 24 h; SPE-Dry concentrate; K2CO3 ≥1.5 eq (≥12.4 mg) added manually; amine 1.1 eq, 0.067 mmol, 132 µL of 500 mM in DMF
it-2.0 (64) — T3P 1.2 eq (47 µL, 0.07 mmol, 50% in EtOAc) + DIPEA 4.5 eq (43 µL, 0.27 mmol) in the plate; then acid 1.05 eq, 0.06 mmol, 126 µL of 0.5 M in DMA; then furan-2-yl(piperazin-1-yl)methanone 1.0 eq, 0.06 mmol, 40 µL of 1.5 M in DMA; covered, 24 h; concentrate; DCM 300 µL / sat. NH4Cl–H2O 1:1 300 µL; EG 240 µL (200 mM).
it-3.0 (512) — 3 steps. (i) DIPEA 2.5 eq (52.3 µL, 0.300 mmol) + T3P 1.2 eq (85.7 µL, 0.144 mmol), acid 1.07 eq (252 µL, 0.126 mmol, 500 mM DMA), then (1H-imidazol-1-yl)(piperazin-1-yl)methanone 1.0 eq (121 µL, 0.118 mmol, 978 mM in DMA/DIPEA); sealed 24 h rt. (ii) workup DCM / 1 M aq., ×2; DMA 500 µL + MeI 10 eq (75 µL, 1.21 mmol), sealed overnight. (iii) dilute DMA 800 µL, split 100 µL (0.015 mmol, 1.05 eq) ×8 plates, K2CO3 1.5 eq (2.9 mg), amine 1.0 eq (43 µL, 0.014 mmol, 333 mM DMA); sealed 24 h; workup DCM / sat. NaHCO3; EG 80 µL (164 mM).
it-3.5 (1024) — amine 1.05 eq (263 µL, 0.131 mmol, 500 mM DMA) onto K2CO3 1.5 eq (25.9 mg); imidazolium 1.00 eq (250 µL, 0.125 mmol, 500 mM in DMSO; Imid-1 stock was 250 mM so 500 µL**)**; sealed overnight rt, concentrated after 24 h; DCM 300 µL / 3 M aq. HCl or 50% brine (brine for ureas with basic sites), extracted twice; 1,4-dioxane 1200 µL, split 290 µL (0.030 mmol) across 12 plates; 4 M HCl in dioxane 200 µL (excess), sealed 16 h ambient; blowdown; DMA 500 µL; acid 1.04 eq (52 µL, 0.031 mmol, 600 mM DMA), T3P 1.2 eq (22.1 µL), DIPEA 4.5 eq (24.3 µL); sealed 72 h ambient; DCM / sat. NaHCO3 ×2; MeOH 155 µL; EG 140 µL (200 mM).
it-4.1 (200, = SI 4.0) — amine 1.10 eq (314 µL, 0.440 mmol, 1.4 M DMA), K2CO3 1.5 eq (83 mg), Boc-piperazine methylimidazolium iodide 1.0 eq (1600 µL, 0.400 mmol, 250 mM DMA), overnight rt; DCM 500 µL / sat. NH4Cl + 2 M HCl 500 µL, ×2; 4 M HCl/dioxane 300 µL, 16 h; DMA 1700 µL. Sulfonamide: methyl 5-(chlorosulfonyl)furan-2-carboxylate 1.0 eq (133 µL, 0.2 mmol, 1.5 M DMA), amine 1.05 eq (420 µL, 500 mM), DIPEA 1.2 eq (42 µL), overnight; dioxane 800 µL, split 80 µL (0.0195 mmol); LiOH hydrolysis. Coupling: DMA 100 µL, DIPEA 2.5 eq (9 µL), T3P 1.2 eq (14.3 µL), urea 1.0 eq (85 µL, 0.02 mmol), sealed 72 h; DCM / sat. NaHCO3 + water; EG 80 µL.
it-4.2 (160) — urea: amine 1.05 eq (158 µL, 0.079 mmol, 500 mM DMA) onto K2CO3 1.5 eq (15.5 mg), imidazolium 1.00 eq (150 µL, 0.075 mmol, 250 mM DMSO), overnight rt; DCM 300 / 1 M HCl or 50% brine 600 µL ×2; dioxane 1200 µL, split 395 µL (0.025 mmol); 4 M HCl/dioxane 200 µL, 16 h; DMA 250 µL. Sulfonamide: sulfonyl chloride 1 eq (600 µL, 0.3 mmol, 500 mM DMA), amine 1 eq (600 µL, 0.3 mmol), DIPEA 2.4 eq (125 µL, 0.718 mmol), overnight rt; workup; then 2 M aq. LiOH 500 µL + dioxane 500 µL, sonicated, ambient overnight; workup with 2 M then 3 M aq. HCl; DMA 600 µL (500 mM). Coupling: acid-sulfonamide 1.04 eq (52.5 µL, 0.026 mmol) to urea 1 eq (0.025 mmol), T3P 1.2 eq (18 µL), Et3N 4.5 eq (16 µL) — note Et3N here, not DIPEA — sealed 72 h; DCM / sat. NaHCO3 ×2; MeOH 125 µL; EG 120 µL (183 mM). 180 wells prepared, 160 curated (cols 3/6/9/12 rows E–H discarded).
Every iteration except 5.x now has solvent, concentration, equivalents, absolute
volumes/moles, standing time and a full workup chain, all paper-sourced. Building
the ORD dataset next: one Reaction per CSV row, template joined on
iteration/series, with workups carrying the real chain and
notes.procedure_details carrying the SI prose for that iteration.
Two things a naive curation of this CSV would get wrong. Both are now pinned down
with scripts (scripts/inspect.py, scripts/check_shift.py, run with
ord-schema 0.8.3's rdkit).
In every one of the 512 Iteration number == 3 rows, the Reactant N name
columns contain SMILES and the Reactant N smiles columns contain
names. Example (Original order 1, it3.0_AM-01_Imid-04_CA-01):
| column | value | what it really is |
|---|---|---|
Reactant 1 name |
NCCOC |
R1 SMILES (AM-01) |
Reactant 1 smiles |
Imid-04 |
R2 name |
Reactant 2 name |
CC(C)(C)OC(N1CCN(C(N2C=[NH+]C=C2)=O)CC1)=O.[I-] |
R2 SMILES |
Reactant 2 smiles |
CA-01 |
R3 name |
Reactant 3 name |
O=C(O)CC1=CNC=N1 |
R3 SMILES |
Reactant 3 smiles |
(empty) | — |
So the five populated cells are [R1smi, R2name, R2smi, R3name, R3smi] sitting in
the six columns starting at Reactant 1 name — everything slid one column left and
the R1 name fell off the front.
RDKit detection across the whole file (does the name column parse as a molecule?):
it 1 n= 58 name-as-smiles= 0 smiles-ok= 58/58/0
it 1.1 n= 58 name-as-smiles= 0 smiles-ok= 58/58/0
it 2 n= 64 name-as-smiles= 0 smiles-ok= 64/64/0
it 3 n= 512 name-as-smiles=512 smiles-ok= 0/0/0 <-- shifted
it 3.5 n=1028 name-as-smiles= 0 smiles-ok= 1024 ×3
it 4.1 n= 200 name-as-smiles= 0 smiles-ok= 200 ×3
it 4.2 n= 160 name-as-smiles= 0 smiles-ok= 160 ×3
it 5.1 n= 182 name-as-smiles= 0 smiles-ok= 182 ×3
Only iteration 3 is affected; every other iteration is clean.
Compound uniqueID independently encodes the three reagent codes
(it3.0_<AM>_<Imid>_<CA>). After unshifting, the recovered R2 and R3 names match
the uniqueID in 512/512 rows, zero mismatches, and all 512 recovered R3 SMILES
parse. The lost R1 name is recoverable from uniqueID field 1. The unshifted set is
a clean 8 amines × 1 imidazolium (Imid-04) × 64 carboxylic acids = 512, which
is exactly the row count and exactly the csv/acids_list.csv /
amines_for_urea_reaction.csv shape in the it-3.0 protocol directory.
The card says "Reactant 3 SMILES in 1746 rows", implying iteration 3 is a
two-component reaction. It is not — it is a three-component AM/Imid/CA sequence
like 3.5, and its R3 column only looks empty because of the shift. Reactant-3
coverage is really 1746 + 512 = 2258, i.e. every row that has reactants at all.
Curating this file as-read would put the literal string Imid-04 into a SMILES
field for 512 reactions and silently drop 512 carboxylic acids.
2262 rows in the CSV
-200 Iteration number 4.1
-182 Iteration number 5.1 (spans series "Iteration 5.1" 56 + "Iteration 5.2" 126)
- 4 rows with no reactants at all
----
1876 = the paper's "Total targets"
The 4 reactant-less rows are Original order 1717–1720, all
it3.5_AM-0{1..4}_Imid-01_CA-20_control — controls, with a blank outcome. Not
reactions; they will be dropped (documented).
Table 1 of the paper confirms the arithmetic from the other direction: it lists targets per iteration as 1 → 58, 1.1 → 58, 2 → 64, 3 → 512, 3.5 → 1024, 4.2 → 160. That sums to 1876, and iterations 4.1 and 5.x are absent from the paper's tables entirely (Table 2 covers "six iterations": 1.0 marked "Not completed", 2, 3, 3.5, 4.2).
failOutcome counts on the 1876 subset vs the whole file differ only in fail
(642 vs 1024). The difference is 382 = 200 + 182 exactly, so all 200
iteration-4.1 rows and all 182 iteration-5.1/5.2 rows carry fail — these are
the attempted-but-unreported arrays (4.1 was superseded by 4.2; 5.1/5.2 Chan-Lam
have no protocol directory in the Opentrons zip either).
I will encode all 2258 rows that have reactants — all nine series including
4.1 and 5.x — because the Problem asks for every reaction the paper reports with
its data, and the deposited CSV is that data. Each Reaction will carry the
iteration/series and a flag for whether it is inside the paper's 1876 headline
set, so a reviewer can reproduce either count. The 4 controls are the only
exclusions.
The paper's own success figures disagree with each other and with the CSV:
abstract "1108 (59%)", results text "1077 out of 1876 … 57%", while the CSV
gives 1019 success (+27 trace) on the 1876 subset = 54%. I cannot reconcile
these from the deposited data (the paper also notes MSCheck vs manual analysis
differ, with 448 samples re-analysed by MSCheck, which plausibly explains the
drift). I will encode the CSV's per-row label as the measurement and record this
discrepancy in the README rather than bending rows to hit the paper's totals.
curl https://zenodo.org/api/records/7586212 → license cc-by-4.0, record DOI
10.5281/zenodo.7586212, 3 files. Downloaded two of them (skipped the 32 MB
MSCheck zip for now):X-ray and reaction QC data summary.csv — 1 010 982 B, 2262 data rows × 46 columns (matches the card)Opentrons scripts … .zip — 1 665 319 B, extracted into its own directorycurl: (35) SSL_ERROR_SYSCALL; a retry with
--retry 3 succeeded. Worth knowing if someone else hits it.ord-schema==0.8.3 + rdkit in a venv (ord_schema imports, protobuf 5.29.6).Reaction-relevant: Original order, Iteration number, Compound uniqueID,
Old product name, Smiles final product (2262/2262), Series rationale,
Series name, Reactant 1/2/3 name+smiles (R1,R2: 2258; R3: 1746),
Yield, Synthesis outcome, LCMS outcome, QC comment, Additional comment, Mass, LCMS_name.
Not reaction data (will not become outcomes, per the card): Data collection outcome, Crystal names, Resolution, Outcome Pandda analysis, PDB entry,
Smiles of bound ligand, Confidence in dataset, ka/kd/Kd/Rmax/Sqrt(Chi2),
Classification, Crystal score, Biophysics score. (Modelling score and
Result expected are empty in all 2262 rows.)
Synthesis outcome and LCMS outcome are identical columns (same value
counts: success 1019, fail 1024, no ms 65, QC not found 64, to fill 32, trace 27,
N/D 27, blank 4). So there is one qualitative outcome per row, duplicated.
The card says the Yield column is "mostly 0%, not calculated or blank". True in
bulk, but 722 rows carry a non-zero numeric percentage (1520 rows match
^\d+(\.\d+)?%$, of which 798 are exactly 0%). Those 722 are real
percentage_yield values worth encoding, not noise. The rest are strings like
not calculated, unknown, Trace, Trace (weak), No m/s of major peaks,
weak (no mass detected), to fill, N/a.
| Iteration | rows | has R3 | Series names |
|---|---|---|---|
| 1 | 58 | 58 | Iteration 1.0 |
| 1.1 | 58 | 58 | Iteration 1.1 |
| 2 | 64 | 64 | Iteration 2.0 |
| 3 | 512 | 0 | Iteration 3.0 |
| 3.5 | 1028 | 1024 | 3.5_piperazine_01…04, Iteration_3.5 |
| 4.1 | 200 | 200 | Iteration 4.1 |
| 4.2 | 160 | 160 | Iteration 4.2 (+20 blank) |
| 5.1 | 182 | 182 | Iteration 5.1 (56), Iteration 5.2 (126) |
Note Iteration number 5.1 spans two series (5.1 Chan-Lam, 5.2 Chan-Lam +
ester), and iteration 3.0 is the only two-reactant series.
The Opentrons zip has one directory per iteration — PHIPA_it-1_urea-synthesis-one-step,
it-2_urea-coupling_one-step, it-3.0_triple reaction_sequence,
it-3.5_triple_reaction_sequence, it-4.1_five_steps, it-4.2_five_steps —
and most carry a machine-readable csv/reaction_conditions*.csv with the actual
numbers. Harvested so far:
Intermediates.csv names
ImidInt-1 = (4-(1H-imidazole-1-carbonyl)piperazin-1-yl)(furan-2-yl)methanone
(C13H14N4O3, MW 274.28) and ImidInt-2 = (1H-imidazol-1-yl)(morpholino)methanone
(C8H11N3O2, MW 181.2) — these are iteration 1.0 vs 1.1 (morpholine instead of
piperazine, matching the series rationale). Activation: MeI 15 eq (MW
141.94, d 2.28) in MeCN, stock 500 mM, scale 0.06 mmol, then amine.Coupling_sequence, AM/AC): DMA, 500 mM, scale 0.12 mmol, T3P 1.2 eq,
DIPEA 2.5 eq; then MeI 10 eq in DMF; then amine + K2CO3 1.5 eq in DMA.
Also a Urea_sequence (Imid/AM) row: scale 0.2 mmol, MeI 2 eq, K2CO3 1.5 eq, DMA.Urea-Dboc-Coupling_sequence, AM/Imid/CA with HCl/DIPEA/T3P):
step-1 scale 1 mmol over 64 wells (0.125 mmol/well), R1 in DMA, R2 in DMSO,
R3 in DMA, K2CO3 1.5 eq; step 2 split into dioxane + HCl–dioxane 4 M Boc
removal (0.03125 mmol/well); step 3 coupling in DMA with T3P 50% 1.2 eq and
DIPEA 4.5 eq (0.031 mmol/well).Urea-Dboc/Sulfo-esterolysis/Coupling_sequence,
K2CO3/HCl/DIPEA/T3P), urea scale 0.6 mmol, sulfonamide 0.3 mmol.One ReactionInput set + ReactionConditions per iteration/series template,
joined onto each CSV row by Iteration number/Series name, with the row's own
R1/R2/R3 SMILES filling the variable positions. Because every row is a telescoped
multi-step sequence on a crude mixture, I will model each row as one ORD
Reaction whose notes/workups record the step sequence, rather than
inventing separate Reaction messages per step that the data cannot support —
and say so explicitly in the README. Next: times/temperatures from the scripts
and logs, then the preprint for the Chan-Lam conditions.
The revision pins one required Skill (skv_k5sivlohu1). Both its Resource URIs fail
on this client:
tfp://skill-versions/skv_k5sivlohu1/SKILL.md?working_attempt_id=att_fp9erkwclqtfp://skill-versions/skv_k5sivlohu1/ (manifest)Every resources/read returns a client-side validation error, not a server error:
Invalid result for resources/read:
path ["ttlMs"] expected number, received undefined
path ["cacheScope"] expected one of "public"|"private"
So the server's resources/read payload is missing/!conforming on ttlMs and
cacheScope, and the Claude Code MCP client rejects the whole response before I
see any content. This is a transport/schema mismatch between the TfP MCP server
and this client build, not an access problem — the same connection reads
get_problem, get_verifier_contract, search_notes etc. fine.
Directory listing is also off in this build: resources/directory/read returns
"Directory listing is not enabled in this build."
get_problem — its skill_resources entries carry only entry_uri /
manifest_uri, no download_url (unlike reference_resources, which do
carry one; the card reference downloaded fine over HTTPS and its
x-tfp-content-hash header matched content_hash).tfp CLI 0.2.0,
sha256:83a79f02…1656ad), signed it in with tfp login --mcp +
authorize_cli (now @jordan, scope read contribute). tfp docs list
serves the platform docs tree (authoring/, concepts/, reference/, …) — it
does not serve pinned Skill packages, so the CLI is no route to
ord-curation either.Either give skill_resources a signed download_url the way
reference_resources have one, or emit ttlMs/cacheScope on
resources/read. Right now a pinned Skill is unreadable from Claude Code.
Not abandoning over this. The revision statement is detailed (deliverables,
scope, pitfalls, the dataset + sources artifact roles), and the authoritative
spec for the output format is ord-schema itself, which I am installing at the
version the statement names (0.8.3) and will validate against. I will follow ORD's
documented curation conventions (one Dataset, Reaction messages with
identifiers, inputs with roles+amounts, conditions, workups, outcomes,
provenance carrying the DOI, no dataset/reaction IDs) and write down every
judgment call in the sources README so a reviewer can check it against the
paper. If anything in the Skill would have overridden a convention I chose, that
is the risk this blocker creates, and this Note is the record of why.