npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.

> canvas-mcp-code-api@1.0.6 test
> node --import tsx --test tests/code_api/*.test.ts

✔ committed grade followed by 503 is not sent twice (60.92468ms)
✔ committed grade followed by disconnect is not sent twice (10.069945ms)
✔ committed grade followed by invalid-json is not sent twice (5.109787ms)
✔ committed grade followed by redirect is not sent twice (8.01754ms)
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Starting bulk grading for assignment 2...
Concurrent processing: 1 submissions per batch
Found 2 submissions to process

Processing batch 1/2 (1 submissions)...
✓ Graded submission for user 1

Processing batch 2/2 (1 submissions)...
✓ Graded submission for user 2

==================================================
Bulk grading complete!
==================================================
  Total:   2
  Graded:  2
  Skipped: 0
  Failed:  0
Starting bulk grading for assignment 2...
Concurrent processing: 2 submissions per batch
Found 5 submissions to process

Processing batch 1/3 (2 submissions)...
✔ duplicate submission targets reject before callbacks or writes (11.20263ms)
✔ invalid maxConcurrent 0 rejects before fetching (0.493127ms)
✔ invalid maxConcurrent -1 rejects before fetching (0.620282ms)
✔ invalid maxConcurrent 1.5 rejects before fetching (0.212475ms)
✔ invalid maxConcurrent NaN rejects before fetching (0.576791ms)
✔ invalid maxConcurrent Infinity rejects before fetching (0.431638ms)
✔ invalid rateLimitDelay -1 rejects before fetching (0.530721ms)
✔ invalid rateLimitDelay NaN rejects before fetching (0.311951ms)
✔ invalid rateLimitDelay Infinity rejects before fetching (0.383427ms)
✔ invalid rateLimitDelay 2147483648 rejects before fetching (1.338087ms)
✔ invalid rateLimitDelay 0.5 rejects before fetching (0.186359ms)
✔ explicit zero delay schedules no inter-batch timer (3.756372ms)
✓ Graded submission for user 1
✓ Graded submission for user 2
Waiting 17ms before next batch...

Processing batch 2/3 (2 submissions)...
✓ Graded submission for user 3
✓ Graded submission for user 4
Waiting 17ms before next batch...

Processing batch 3/3 (1 submissions)...
✓ Graded submission for user 5

==================================================
Bulk grading complete!
==================================================
  Total:   5
  Graded:  5
  Skipped: 0
  Failed:  0
Request failed (attempt 1/4), retrying in 1000ms...
✔ batch cap includes asynchronous writes and delay follows settlement (18.763792ms)
Request failed (attempt 2/4), retrying in 2000ms...
Request failed (attempt 3/4), retrying in 4000ms...
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Found 3 submissions to process

Processing batch 1/1 (3 submissions)...
Skipped submission for user 1
✓ Graded submission for user 3
✗ Failed to grade user 2: callback failed

==================================================
Bulk grading complete!
==================================================
  Total:   3
  Graded:  1
  Skipped: 1
  Failed:  1

Failed submissions:
  User 2: callback failed
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Found 2 submissions to process

Processing batch 1/1 (2 submissions)...
✓ Graded submission for user 1
✓ Graded submission for user 2

==================================================
Bulk grading complete!
==================================================
  Total:   2
  Graded:  2
  Skipped: 0
  Failed:  0
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Found 1 submissions to process

Processing batch 1/1 (1 submissions)...

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  0
  Skipped: 0
✗ Failed to grade user 1: null
  Failed:  1

Failed submissions:
  User 1: null
Starting bulk grading for assignment 2...
Concurrent processing: 5 submissions per batch
Found 1 submissions to process

Processing batch 1/1 (1 submissions)...

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  0
  Skipped: 0
  Failed:  1

Failed submissions:
  User 1: undefined
✔ GET retries terminate after four attempts with 1,2,4 second backoff (5.670911ms)
✔ write operation ()=>canvasPost("/courses",{}) is not automatically replayed (0.483771ms)
✔ write operation ()=>canvasPut("/courses/1",{}) is not automatically replayed (0.255128ms)
✔ write operation ()=>canvasDelete("/courses/1") is not automatically replayed (0.384405ms)
✔ dry run never writes and accounts for skip, callback failure and grade (0.882221ms)
✔ fractional batch stride cannot exceed its requested cap (0.306649ms)
✔ invalid submission user undefined fails before grading (0.343905ms)
✗ Failed to grade user 1: undefined
✔ invalid submission user 0 fails before grading (0.511397ms)
✔ invalid submission user -1 fails before grading (0.235373ms)
✔ invalid submission user 1.5 fails before grading (0.237988ms)
✔ invalid submission user 7 fails before grading (0.218727ms)
✔ callback mutation cannot redirect two jobs to the same submission (1.378775ms)
✔ callback throwing null keeps the failed target in the summary (0.532497ms)
✔ callback throwing undefined keeps the failed target in the summary (0.429254ms)
Starting bulk grading for assignment 2...
Concurrent processing: 2 submissions per batch
Found 2 submissions to process

Processing batch 1/1 (2 submissions)...
✓ Graded submission for user 3
✓ Graded submission for user 4

==================================================
Bulk grading complete!
==================================================
  Total:   2
  Graded:  2
  Skipped: 0
  Failed:  0
Starting bulk grading for assignment 2...
Concurrent processing: 2 submissions per batch
Found 2 submissions to process

Processing batch 1/1 (2 submissions)...
✓ Graded submission for user 3
✓ Graded submission for user 4

==================================================
Bulk grading complete!
==================================================
  Total:   2
  Graded:  2
  Skipped: 0
  Failed:  0
✔ rubric precheck flag false (5.80859ms)
✔ rubric precheck flag undefined (0.51563ms)
✔ rubric precheck flag true (1.043937ms)
✔ unconfirmed score null is not success (1.422325ms)
✔ unconfirmed score 99 is not success (0.683202ms)
✔ lookup failure never writes (1.040988ms)
✔ simple zero grade stays explicit without a rubric lookup (0.631442ms)
✔ missing or incomplete rubric metadata is unconfirmed: undefined (1.014597ms)
✔ missing or incomplete rubric metadata is unconfirmed: [{"id":"a"}] (0.614183ms)
✔ bulk rubric grading fetches metadata once per run with repeated include params (116.622696ms)
ℹ tests 41
ℹ suites 0
ℹ pass 41
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 415.224588
