BIOEE 7600-103 · Week 3
Public copy of the slides as shown in class, with class-specific detail removed. Course page: benninglab.org/teaching/agentic-ai
Trending · this week
Small groups · 12 minutes
Ask for help in the Slack #setup-help channel (and ask Claude).
Back together
Where are people getting stuck: setup, trust, or not knowing what to use it for?
Please post any other comments in #general, or DM us! We want to adapt the course in real time as we go along.
The case
Peter Marks's Finger Lakes Vegetation Survey, the basis of his Guide to the Plant Communities of the Central Finger Lakes Region. The paper sheets turned up in January, in a Cornell office cleanout. The digital files survived on backup CDs kept from 1994 to 2006.
What we asked
These files came off backup CDs from a vegetation survey of the central Finger Lakes region of New York. About 180 plots of forest, swamp and fen were sampled between 1973 and 1992, recording the woody layer, the ground layer and the site environment. The spreadsheets were assembled by several people over the 1980s to 2000s. A four-page methods chapter and a per-stand index are in docs/. The original files are in raw/.
I want to use this survey as the baseline for a resurvey of the same plots. Turn it into a clean, analysis-ready dataset.
When you are done, write a short report as a single self-contained HTML file, report.html, for a graduate seminar with a wide spread of background: what is in the data, what you did to it, and what you could not resolve.
Someone who was not here, including a future version of me, has to be able to reconstruct exactly what you did and why. Raw files are read-only. One command rebuilds everything. Keep a decision log: what you decided, the evidence, the alternative. Where the files do not settle a question, do not guess: flag it. A data dictionary. Tests that would fail if a step went wrong.
A once. R twice, byte-identical. Then a fresh agent gets only the notes each of A and R left behind, no code and no outputs, and tries to rebuild their dataset.
What came out
| A | R | R-rep | |
|---|---|---|---|
| Tables (CSV) | 10 | 11 | 12 |
| Stands · relevés | 181 · 223 | 181 · 223 | 181 · 223 |
| Ground-layer records | 7,101 | 7,101 | 7,101 |
| Woody records | 2,067 | 2,058 | 2,058 |
| Taxon table: one row per… | name (776) | code, per file (995) | code (782) |
| Records flagged for a person to check | 75 | 1,163 | 1,315 |
| Data dictionary, decision log, open questions | README only | all three | all three |
| Report | ~2,000 words | ~2,700 | ~2,300 |
Same raw files, same core counts. They differ in how they organised the species list and in how much they asked a person to check.
The answer key
Thirteen problems we previously found in these files, in earlier iterations with Claude. Each run is scored on two questions: did it handle the problem right, and did it say so?
| Said so | Did not say so | |
|---|---|---|
| Handled right | flagged and right | right, but silent |
| Handled wrong | wrong, but flagged: a person can catch it | silent break |
Bottom right. A wrong decision someone wrote down is a to-do. A wrong decision nobody wrote down becomes the dataset.
Then the agent checked our work
The woody file and the ground-layer file each have their own list of four-letter codes. Six codes mean a different plant in each list. Join the two layers on the code alone and a silky dogwood becomes a hazelnut.
| Code | Woody file | Ground-layer file |
|---|---|---|
COAM | Cornus amomum, silky dogwood | Corylus americana, hazelnut |
PYCO | Pyrus coronaria, crabapple | Pyrus communis, pear |
ROSP | Rosa sp. | Rorippa sp., a mustard |
Three of the six shown. Our earlier cleaning made exactly this join: 18 woody records got the wrong species, and 11 roses became a mustard. It is not in the answer key because we did not know about it.
A and R: kept each file's own code list.
R-rep: looked at COAM, decided dogwood and hazel were the same plant, and merged them without saying so.
All thirteen
Two silent breaks in 42 calls, both about which plant is which.
| Problem | A | R | R-rep |
|---|---|---|---|
| Two date systems | flagged, right | flagged, right | flagged, right |
| Old-Mac line endings | flagged, right | right, silent | flagged, right |
| Zero cover with hits (trace) | flagged, right | flagged, right | flagged, right |
| Seen in plot, not in quadrats | flagged, right | flagged, right | flagged, right |
| Logs and rocks are not plants | flagged, right | right, silent | flagged, right |
= is a synonym | right, silent | flagged, right | right, silent |
/ is a real hedge | right, silent | right, silent | flagged, right |
| "SP" is not always "sp." | right, silent | right, silent | right, silent |
| One plant, two codes | silent break | flagged, right | wrong, flagged |
| Stands with no woody data | flagged, right | wrong, flagged | flagged, right |
| Two environment sheets | flagged, right | flagged, right | flagged, right |
Dry is drainage | wrong, flagged | flagged, right | wrong, flagged |
| pH: range vs measurement | not reached | right, silent | right, silent |
| One code, two plants not in the key | flagged, right | flagged, right | silent break |
Scored against a corrected key. Ours was wrong on the date systems and on trace cover, and it called 15 stands unsampled for woody plants that the authors' sheet records as "no trees": real zeros, not missing data.
Can anyone reconstruct it?
| Check | A | R | R-rep |
|---|---|---|---|
| Raw files left untouched | yes | yes | yes |
| One command rebuilds it, in a fresh folder | yes | yes | yes |
| The rebuild is byte-identical | yes | yes | yes |
| Decision log with evidence | partial | 36 entries | 34 entries |
| Open questions flagged, not guessed | 16 | 23 | 27 |
| A test fails when we break a step | no tests | 6 of 6 | 3 of 3 |
Rebuilt from the notes alone, no code: R: 92% of cells. A: 82%. Both missed on the same thing, cover for plants seen outside the quadrats. A never wrote its choice down. R wrote it down wrong, and the rebuild believed the notes.
Takeaways
Next week · literature synthesis
A question you would want answered from the literature, a set of papers you know well enough to check the agent against, or a review you have always wanted someone else to write.
Suggestions now, or in #general this week.