Stage 1

Load the desk's spreadsheet

Go to the editor

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.

The situation

The desk's spreadsheet is the other kind of document you will ingest.

Steps

0 of 7 done

  1. Already generated here, with the kit’s seed.

    Command
    python3 _lab/estates/halden/generate.py --out ./halden-estate --seed 2026
  2. Load dirty/known_bad_shippers.csv into 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

  3. Flag every line you dropped or changed.

    findings.jsonl, one line each
    {"file": "dirty/known_bad_shippers.csv", "line": n, "defect": "D11"}

    (or , )

  4. Run tests and Submit grade your findings with this same scorer, here in your browser.

    Command
    python3 _lab/estates/score.py ./halden-estate findings.jsonl --file dirty/known_bad_shippers.csv
  5. Check your rows against clean/known_bad_shippers.csv.

  6. 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.

solution.py · Python 3 in your browser
Loading your code…

First run downloads 2 KB of data.