L17 INTEGRATED EXERCISE - SUBMISSION
Name: ____________________   Date: ____________   Problem (A/B/C/D): ___
Time I started: ______
Label for this exercise: AI allowed — keep a record.
Sections 1 and 2 are your own unaided work. Do not paste the problem or
your criteria into an assistant until section 1 is finished and timed.

Self-score: each section has a maximum. Score yourself after you finish,
using the rubric and the answer key in the lesson. Two caps apply:
  - no test record (section 2 empty, or tests with no run results):
    the whole exercise scores at most 50;
  - an incomplete AI-use record (any prompt missing or summarised, or no
    assistant named): the whole exercise scores at most 60.

======================================================================
1. SPECIFICATION AND ACCEPTANCE CRITERIA   (unaided, 10 minutes)  /30
======================================================================
Function name and signature:

Inputs (name, type, units, allowed range):

Output (type and exact form, including what is returned for bad input):

Constraints (what the function must not do; standard library only):

Assumptions I had to make (each one is a decision the problem statement
did not make for me):
  A1.
  A2.
  A3.

Acceptance criteria (each one testable, each one traced to a line of the
problem statement or to an assumption above):
  AC1.                                    Traces to:
  AC2.                                    Traces to:
  AC3.                                    Traces to:
  AC4.                                    Traces to:
  AC5.                                    Traces to:

======================================================================
2. TESTS   (unaided; written before reading any generated code)   /25
======================================================================
Time I finished writing tests: ______
Time I first read the generated code: ______

  #  | kind (normal / boundary / empty / bad input / forgotten case)
     | input | expected output | criterion it checks
  T1 |
  T2 |
  T3 |
  T4 |
  T5 |
  T6 |
  T7 |
  T8 |

Paste the test code you ran (check helper or asserts):


======================================================================
3. IMPLEMENTATION I AM SIGNING FOR                                 /10
======================================================================
Paste the final function. Mark any line you changed by hand with
  # CHANGED: <one-line reason>


======================================================================
4. CORRECTION RECORD                                               /25
======================================================================
One entry per failure. One change per hypothesis. Copy the ENTRY block
for each further failure.

Entry 1
  Failing test:
  What the test showed (expected vs actual, or the traceback's last line):
  Hypothesis (why it fails, written before changing anything):
  Evidence that confirmed or ruled out the hypothesis:
  Error category (circle one):  SPECIFICATION   GENERATION   TEST
  Repair (what changed, and who made it: me or the assistant):
  Re-test result (all tests, not just this one):

Entry 2
  Failing test:
  What the test showed:
  Hypothesis:
  Evidence:
  Error category (circle one):  SPECIFICATION   GENERATION   TEST
  Repair:
  Re-test result:

(If no test ever failed, write that here and list the boundary tests that
passed on the first run. A clean first run is possible; an empty record
with no boundary tests is not.)

Final test run output (paste it):


======================================================================
5. AI-USE RECORD                                                   /10
======================================================================
Label:            AI allowed — keep a record
Assistant:        (name and version as shown in the tool, or "local
                  model"; if you used the fallback file instead, write
                  "fallback file L17_<X>_fallback_code.py" and no prompts)
Date(s):
Prompts:          (copied exactly, in order, numbered; a summary of a
                  prompt is not the prompt)
  P1.
  P2.
  P3.
What I kept:      (from each response)
What I changed:   (and why)
What I verified:  (which tests I ran against the result, and the outcome)

In addition to the record (the statement is not one of its seven fields):
Statement: I have read every line of the implementation in section 3,
the tests in section 2 are my own, and I am willing to sign for this
result.                               Signature: ______________________

======================================================================
SELF-SCORE (fill in after the answer key)
======================================================================
  1. Specification and criteria   ____ /30
  2. Test design                  ____ /25
  3. Implementation               ____ /10
  4. Correction record            ____ /25
  5. AI-use record                ____ /10
  Total before caps               ____ /100
  Cap applied (none / 50 / 60):   ____
  Final self-score                ____ /100
