Load the desk's spreadsheet
Your goal
Find the 3 planted defects in dirty/known_bad_shippers.csv and flag every affected line in findings.jsonl.
- Stage 1
- 3 defects
- 2 KB of data
- FromParsing and chunking documents that fight back
- PractisesFinding where the data really lives
- Halden Freight
The situation
The desk's spreadsheet is the other kind of document you will ingest.
Steps
0 of 7 done
Already generated here, with the kit’s seed.
Commandpython3 _lab/estates/halden/generate.py --out ./halden-estate --seed 2026Load
dirty/known_bad_shippers.csvinto typed rows: find the header below the merged title row.dirty/known_bad_shippers.csv
Drop the notes rows
Restore the leading zeros on the vendor IDs
Repair the mojibake
Flag every line you dropped or changed.
findings.jsonl, one line each{"file": "dirty/known_bad_shippers.csv", "line": n, "defect": "D11"}(or , )
Run tests and Submit grade your findings with this same scorer, here in your browser.
Commandpython3 _lab/estates/score.py ./halden-estate findings.jsonl --file dirty/known_bad_shippers.csvCheck your rows against
clean/known_bad_shippers.csv.Report what you dropped and why: the notes rows are the desk lead's warnings, and a loader that skips them silently loses them.
Defects to find
D04Leading zeros stripped from SAP vendor IDs
Why it happens: the spreadsheet was opened in Excel.
4 lines to find
D10Mojibake in names and text
Why it happens: UTF-8 text was read as Latin-1 somewhere on the way.
1 line to find
D11A merged title row and notes rows in the spreadsheet
Why it happens: people use the sheet as a notebook.
4 lines to find
How it’s graded
Precision ≥ 0.95 and recall ≥ 0.95, for each defect.
The bar: the bar the Kelverne capstone sets for every defect.
Halden · Your client in the residency: Halden Freight, a simulated freight company you work with for ten weeks. Its labs run on the same company's data. Your client: Halden
Here the client data (the estate: a fictional client’s files, with documented problems planted in them) is already generated, with the kit’s seed: your code reads the files under dirty/. Run tests and Submit both grade your findings with the kit’s score.py, scoped as the task’s command scopes it; only Submit goes on your record. The written parts of the task aren’t graded here; they’re for your notes or your reviewer.
Dirty data variant. The desk's spreadsheet is the other kind of document you will ingest. Generate the Halden estate (python3 _lab/estates/halden/generate.py --out ./halden-estate) and load dirty/known_bad_shippers.csv into typed rows: find the header below the merged title row, drop the notes rows (D11), restore the leading zeros on the vendor IDs (D04) and repair the mojibake (D10). Flag every line you dropped or changed as {"file": "dirty/known_bad_shippers.csv", "line": n, "defect": "D11"} (or D04, D10), score it with python3 _lab/estates/score.py ./halden-estate findings.jsonl --file dirty/known_bad_shippers.csv, and check your rows against clean/known_bad_shippers.csv. Report what you dropped and why: the notes rows are the desk lead's warnings, and a loader that skips them silently loses them.
Run tests calls find() and grades what it returns. Submit does the same and saves the result.
⌘/Ctrl+Enter runs the tests, add Shift to submit. First run downloads 2 KB of data.