Separate bridge and transfer answers
Compare these references after your own attempt. You can read them at any time; they do not record a live model or vendor run.
Attempt the predictions, changed inputs and diagnostic worksheet before reading. These answers explain small cases; the complete capstone stays in solutions/capstone.py.
Structural checkpoint
Changing R1's units from unknown to 3 leaves a structurally sound two-field record and permits integer conversion to 3. The planned value-rejection message no longer appears. R1,"2,3" also has two parsed fields, because quoting protects the embedded comma. Its second field is the string 2,3, which fails integer conversion: value rejection, not structural failure.
Duplicate/conflict checkpoint
When label 2 changes from A01 to C01, label 1 remains one exact duplicate extra. Labels 0, 2 and 3 now have distinct normalized IDs; conflict count is zero and all three remain eligible for acceptance pending field checks. Starting again from the original toy table and changing label 1's units to 5 removes the exact duplicate relationship: no duplicate extras remain, and labels 0, 1 and 2 all conflict on A01. Keeping the first ID would improperly choose one of three disagreeing records. Every nonduplicate row still receives field checks, including conflicted rows, so a conflicting ID cannot hide an additional date or price failure.
Field/rationale checkpoint
Digit-only source spelling and numeric range are separate: 1000001 has valid spelling but exceeds the unit bound; 1.0 is numerically whole but outside the declared source-syntax contract. Checking spelling before conversion also protects against a fractional source rounding to a whole float.
An ISO-shaped impossible date still fails calendar parsing. A calendar date outside the supported range fails the range rule. Do not change the contract to whatever one installed library happens to parse.
Aligned-reasons checkpoint
After repairing R2's date but leaving its units unknown, label 2 should contain invalid_units. Giving R3 a bad date makes label 3 contain invalid_date. Label 0 remains valid. The rejected source labels are [2, 3], and their original text remains accessible in raw. If one row has two defects, per-rule failure counts include it twice; a combined rejection mask counts the row once.
Collections transfer
A list fits a repeatable ordered history; a dictionary fits named session fields; a set fits membership/uniqueness; a tuple is a conventional fixed coordinate pair. The retrieval results are sessions[1]["minutes"] == 30, sessions[:2] is a two-record list, and x, y = (4, 7) assigns integers 4 and 7. These are choices with reasons, not claims that alternative representations are impossible.
Debugging evidence
The original count function returns 1 for [10, 0, 20], though 2 is required. A smaller failing case is [1, 1], where resetting count to zero in the second iteration erases the first positive observation. Moving initialization before the loop preserves accumulated state and also gives an empty list a defined zero count. Keep both cases as regressions. The separate traceback experiment on 20minutes fails at int(text), before division; inspect or correct the source field rather than the division operation.
NumPy transfer
For shape (2, 3), summing axis 0 gives shape (3,) and values [35, 70, 105]. Summing axis 1 gives shape (2,) and values [90, 120]. Division by 60 gives [[0.25, 0.5, 0.75], [1/3, 2/3, 1.0]]; allclose checks the intended approximate numeric equality. List repetition produces four entries, while elementwise multiplication produces two doubled values. Excluding NaN with nanmean changes which observations contribute and must be disclosed.
Inspection transfer
The exercise has five rows and two preserved-text columns. not yet causes one failed numeric conversion. -4 is numeric but negative; the final record has an empty topic. These are three different failed rows, leaving labels [0, 2], with normalized arrays/15 and tables/0. A valid zero duration stays in the table. Useful observations lead to actions: trim topic spacing, retain and investigate the malformed duration, and reject the empty topic rather than inventing one.
Chart selection and robustness
Use a bar chart for category counts, a line chart for ordered dated observations, and a scatter plot for paired numeric values. None alone establishes causation. The changed values 140 and 20 need an upper range above 140; 20% headroom gives 168. Empty data means no accepted records, while all-zero data means records exist with zero subtotal. A text alternative must state which case occurred.
Public-check expectations
The supplied learner checker imports no solution. Its first two new fixtures yield 610 and 810 cents, respectively; the next cases deliberately probe classification and preserved evidence rather than only the original 6,690-cent result. Do not hard-code those fixtures either. A human reviewer should still ask for a new change and an explanation of the stages it passes through.