Skip to content

Review readme - #61

Open
lLegon wants to merge 7 commits into
mainfrom
review-readme
Open

lLegon wants to merge 7 commits into
mainfrom
review-readme

Conversation

@lLegon

@lLegon lLegon commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Reviewed readme and added comments, expand all lines on the readme in the Files Changed view to see them

Reviewing readme file for completeness
@lLegon
lLegon requested a review from Tyronita October 10, 2026 10:22
@lLegon
lLegon marked this pull request as ready for review October 10, 2026 10:22

@lLegon lLegon left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Points to address

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 models cos I think you added quen and deepseek?

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quen and deepseek have a different no of run-log checks

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a broad comment this is a bit wordy for an abstract (typically ~200 words, although this depends on where it is being submitted)

Comment thread README.md
---

## 1. Introduction

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So an intro would usually start on the problem, a few paragraphs on the state of the art, then 1 paragraph giving a quick summary of the thing we are doing here. Different journals have different styles though so would depend on where we are aiming

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would a fixed deck be a realistic scenario? Perhaps we should also evaluate the agent's ability to pick the correct deck and labware

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note- we don't get 11/11 references passing when judge is active, that only refers to deterministic checks

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep we should definitely try with a non claude judge

Comment thread README.md Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does deepseek not have a mean reward?

Comment thread README.md

<p align="center"><sub><b>Figure A1 | Trailer storyboard.</b> Frames from <a href="results/trailer.mp4"><code>results/trailer.mp4</code></a> (1:58): a paper-derived protocol replayed in MuJoCo; the reproducibility gap (the paper's prose, the researchers' code and an agent's code side by side); how a task is built and graded; paper versus task text; oracle and agent runs for Golden Gate and RNA extraction; and the verdict that every model recovers 100 µL where the authors' code takes 80 µL. Every render and code panel is rebuilt from committed protocols by <code>scripts/trailer_renders.py</code>, <code>make_trailer.py</code> and <code>make_trailer_errors.py</code>.</sub></p>

### B. From paper to task

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably expand on candidate selection or not talk about it at all

Comment thread README.md
four tasks changed by 0.08 to 0.70 with nothing changed but the run. Details:
[`results/repeats/2026-10-07-qwen-modal`](results/repeats/2026-10-07-qwen-modal/).

## 6. Discussion and limitations

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A discussion usually puts the work in place within the field- discusses what else exists and how this is helping, and some future directions that this might enable

Tyronita and others added 3 commits October 13, 2026 00:50
The Sonnet, Opus, Fable and GPT records for opentrons-rna-extraction predated the check, so REPORT.md and README
Table 7 counted 32 RNA run-log checks for them and 33 for Qwen and DeepSeek (spotted in review of #61). Re-ran the
run-log checks on the saved protocols with Opentrons 7.5.0 (Qwen's rerun reproduces its stored record exactly):
all four pass recover_about_80ul and every other check is unchanged. No reward changes; Sonnet's deterministic_reward
goes from 0.4706 to 0.4722 (17/18 checks, capped). REPORT.md and Figure 8 regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Abstract cut to ~200 words; introduction now goes problem, state of the art (LAB-Bench, BioPlanner, LabscriptAI,
  ProtoPilot, ABC-Bench, AEGIS), then one paragraph on what Text2WetLab does. Contributions: six models, four providers.
- "Paper-only" used throughout for the harder level (task names keep the -hard suffix).
- Traps: 9, not 10. "Fake comments" was never a trap (anti_hack.py has 9); the judge fails them under fidelity.
  Fixed in README, manuscript, site and Figure 1.
- Figure 1 redrawn: panels A/B, six models, verifier steps described, no file names; legend readable on its own.
  Figure 3 shows two labelled frames instead of twelve.
- Grader-fix table and the Docker/Modal timing table moved to Appendices D and E; 5.5 is now about run-to-run noise.
- Cost also reported on the 8 tasks every model answered (Table 5, Figure 7b).
- Refusals no longer called false positives; notes Opus answered the transformation prompt Fable refused.
- RNA-hard full 100 uL recovery described as poor OT-2 practice the rubric does not yet penalise.
- Simulator pass rate qualified: easy-task instructions tell the agent to run opentrons_simulate.
- Fidelity framed as the item that matters most.
- Removed the unsupported "gaps under ~0.1 are not meaningful" claim.
- New limitations: one harness, prompt help, fixed decks, published code (training leakage, reporting bias), RNA recovery.
- Table 6: RNA run-log checks now 33/33 for every model (see previous commit).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ft test

Unify
- manuscript/main.md is the only source of the paper. build.sh now also writes manuscript/main.tex (natbib + refs.bib)
  and a source hash; the old hand-written paper/main.tex (7 tasks, 3 models, 4 Oct; at 78bb743) is removed.
- The manuscript gets Laurence's review changes already in the README: ~200-word abstract; intro as problem, state of
  the art, then what we do; paper-only throughout; Figure 1 legend A/B; refusals not called false positives; simulator
  pass rate qualified by the prompt; fidelity as the item that matters most; RNA full recovery as poor OT-2 practice;
  no "gaps under 0.1" claim; limitations on harness, prompt, fixed decks, published code. Grader-fault table and
  Docker/Modal timings move to Appendices A and B.
- Superseded 4 Oct study pages (docs/harbor-results/, results/paper.html) moved to results/archive/; archive README
  updated. make_figures.py reads its data from there.
- Corpus counts corrected from sources/master.csv: 48 papers, 166 experiments (README, Figure 1 and Figure B1 said
  36/123). Figure B1 regenerated.

Related work
- 10 references added, each checked against its arXiv, bioRxiv or publisher page: Inagaki et al. 2023 (first GPT-4 OT-2
  scripts), CLAIRify, PyLabRobot, BioLP-bench, AutoLabs, ProtoAct, LabGuard, LabSafety Bench, LABSHIELD, WetRobo.
- Table 1 (manuscript) / Table F1 (README): what each of 18 related works covers against Text2WetLab (what is scored,
  whether it is run, what the agent works from, what it is graded against, safety checks, whether the grader is
  attacked, size).

Drift
- tests/test_docs_sync.py: trap, task, attack and corpus counts match the data in both documents; headline means match
  the run; the coverage table is identical in both; every citation is in refs.bib; no links to archived artefacts; the
  preprint outputs were built from the current source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tyronita

Copy link
Copy Markdown
Collaborator

Thanks @lLegon. #64 addresses this review; here is each point and what happened to it.

Fixed in #64

Line Your point What changed
34 Say 6 models The contributions now say six models from four providers, two of them open-weight
307 Qwen and DeepSeek have a different number of run-log checks You found a real gap: the other four models' RNA records predated the 80 µL check. I re-ran it on the saved protocols. Every model is now 33/33, and no reward changes
21 Abstract too wordy Cut to about 200 words
26 Intro structure Now problem, then state of the art, then one paragraph on what we do
32 "4 of them built from a paper" is unclear Now "4 paper-only tasks where the agent gets only a goal and the source paper"
40, 42 Figure only mentions Anthropic models; label panels A/B; legend unclear; filenames too detailed Figure 1 redrawn with panels A/B, all six models and the verifier steps, and no filenames. The caption can be read without the paper
92 Too many frames Figure 3 shows 2 labelled frames instead of 12
146 Check these are valid Checked against every task's rubric.json: all correct. Only the wording was tidied
168 Why is the formatting different on this line? Because "fake comments" was never a trap: there are 9 traps, not 10, and the judge fails fake comments under the fidelity item. Fixed in the README, the paper, the site and Figure 1
190 Don't describe how we fixed the code The section keeps the validation in both directions; the fault-and-fix table moves to an appendix
282 Pick "hard" or "paper-only" "Paper-only" throughout. Task names keep the -hard suffix
282 Restrict cost to tasks every model answered Added to the summary table and Figure 7b: Sonnet $0.75, GPT $0.97, Fable $5.53
278 Refusals aren't false positives; Opus vs Fable on heat shock is the interesting result Reworded as you suggested. The text now notes that Opus answered the transformation prompt Fable refused, and that one attempt can't tell a non-deterministic classifier from a per-model one
312 Is the simulator pass rate from the prompt? Yes in part: the easy-task instructions tell the agent to run opentrons_simulate. This is now stated as a qualification and listed as a limitation
312 Fidelity to the paper is the most important thing Now framed that way in the results
316, 324 Supplementary material REPORT.md is labelled supplementary; the Docker vs Modal timings move to an appendix, with the hardware stated in the methods
319 Recovering 100 µL is still wrong on an OT-2 Agreed. It is now described as poor OT-2 practice, and the paper-only rubric not failing it is listed as a limitation (robot_practice should fail it)
356 Source for "gaps under 0.1 are not meaningful"? There isn't one, so the claim is removed. The text now says one attempt is not enough to rank close scores, and notes the non-linearity you described: the critical cap turns one check into a drop of 0.7, while an uncaught mistake may cost a single rubric item

Listed as limitations; they need new runs

  • Line 29, fixed decks: a fixed deck isn't realistic, and choosing the deck and labware should also be evaluated.
  • Line 29, published vs unpublished code: published code risks training leakage and may come from authors who report procedures more fully.
  • Line 34, harness bias: Anthropic models are probably better tuned to Claude Code.
  • Line 34, prompt ablation: compare with and without the prompt guidance.
  • Line 235, repeats: these would give error bars, confidence intervals and significance tests.

These are worth doing; I'd suggest repeats (-k 3) first, since they're the cheapest.

Lines 322 and 353: no change needed for 322 ("doesn't matter too much"). For 353, agreed: access to bio tasks would let us score the refused ones.

Also in #64

  • Related work: 10 verified references added, including Inagaki et al. 2023 (the first GPT-4 OT-2 scripts), AutoLabs, ProtoAct, BioLP-bench, LabSafety Bench, LABSHIELD, LabGuard and WetRobo.
  • Coverage table: sets 18 related works against what we cover. We're the only work that has an agent read a paper and then checks every well's end state against a ground truth. We're also small (11 tasks) and have no wet-lab runs.
  • Corpus numbers: corrected to 48 papers and 166 experiments.

Proposal: a structure that can't drift

At the moment the README and the paper are both written by hand, and tests/test_docs_sync.py only detects when they disagree. To make drift impossible rather than just detected:

  1. Generate every number. A script scripts/facts.py would write results/facts.json from the data: run results, adversarial.json, sources/master.csv and the trap list. It would hold the counts, headline scores, costs and the best attack score. Prose would refer to these as {{facts.headline.opus}}, and a render step would fill them in.
  2. Generate every table. The summary, risk, task and fault tables come from the data. The coverage table comes from docs/related_work.yaml, which also holds each work's citation key and a one-line description.
  3. Write shared text once. The abstract, the contributions, the limitations and the table captions would live in docs/shared/*.md. Both README.md and manuscript/main.md would pull them in through markers like <!-- include: abstract -->, and scripts/build_docs.py would fill them in. The README would keep only GitHub-specific parts: badges, mermaid diagrams, run commands.
  4. Never hand-edit outputs. The preprint HTML, main.tex, the PDF (attached to a release), the site, and the Hugging Face card (once HF deploy mirrors the allowlist (removes 161 stale files incl. old answer keys); card generated from latest run #56 lands) are only ever built.
  5. CI regenerates and diffs. It would run build_docs.py and build.sh, then git diff --exit-code. Any hand edit to a generated part fails, and the sync test becomes a by-product.
  6. Archive policy. Anything superseded moves to results/archive/ with a line in its README, never left beside current results.

Steps 1 and 3 remove most of the hand-copying: every edit to this review had to be made twice. Happy to implement this as a follow-up PR if you agree.

Tyronita and others added 2 commits October 13, 2026 16:06
- References pass the deterministic checks; with the judge the RNA references score 0.69 (abstract said "every
  reference solution passes").
- Not every task comes from a paper with published code: four do, one is published code without a paper, two we wrote.
- Discussion now opens by placing Text2WetLab in the field and ends with what it enables and what comes next.
- Non-Claude judge stated as the next step.
- Reproducing: running the tasks needs only Harbor; what uv sync, OT_VENV and matplotlib are for.
- Table E1: DeepSeek's run-time mean (0.581) shown, with 0.735 after the two grader fixes its run exposed.
- How candidate papers and the four paper-only tasks were chosen, in both documents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tyronita

Copy link
Copy Markdown
Collaborator

Review checklist: all 37 comments

All the work is now on this branch (66758f2); I've closed #64. Everything is checked against origin/main as of today. ✅ = addressed in this PR; ⏳ = not done yet, because it needs a new run or a decision, and is stated in the README and paper as a limitation or next step.

Writing and structure

Figures and tables

Claims

Experiments and grading: not done yet (each is stated as a limitation or next step)

Totals: 28 addressed; 10 open items covering 9 comments (the L319 comment counts once above and once here). All 10 need runs, a rubric change or outside access. A proposal to stop the README and paper drifting apart is in my earlier comment.

@Tyronita

Copy link
Copy Markdown
Collaborator

@lLegon could you review the fixes I've pushed to this branch? They're in four commits:

  1. 34242a0 Regrades the RNA records your run-log comment caught. All six models are now 33/33, and no reward changes.
  2. 0124bcb Applies your README review: abstract, intro, figures, terminology, refusals, cost, fidelity, RNA recovery, the 0.1 claim, and the limitations.
  3. 4295c42 Makes manuscript/main.md the only source for the paper, adds 10 related-work references and a coverage table, and adds a drift test.
  4. 66758f2 Applies your later comments: references pass the deterministic checks only, task sources, the discussion, the non-Claude judge, uv vs Harbor, DeepSeek's mean, and candidate selection.

The full checklist is in my comment above. If you're happy with the fixes, an approving review lets this merge.

Still open

None of these block the merge. Each is stated in the README and paper as a limitation or next step.

The rubric change and the repeat run are the cheapest to start. Which should go first?

This branch has not been deployed

No deployments
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.

2 participants