Request failed (attempt 1/4), retrying in 1000ms...
✖ committed grade followed by 503 is not sent twice (1061.040627ms)
Request failed (attempt 1/4), retrying in 1000ms...
✖ committed grade followed by disconnect is not sent twice (1025.104084ms)
Request failed (attempt 1/4), retrying in 1000ms...
✖ committed grade followed by invalid-json is not sent twice (1021.320312ms)
✖ committed grade followed by redirect is not sent twice (21.919969ms)
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 7
✓ Graded submission for user 7

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

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

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

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

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

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

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

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

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

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

==================================================
Bulk grading complete!
==================================================
  Total:   0
  Graded:  0
  Skipped: 0
  Failed:  0
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
Waiting 1000ms before next batch...
✖ duplicate submission targets reject before callbacks or writes (17.736503ms)
✖ invalid maxConcurrent 0 rejects before fetching (2.333127ms)
✖ invalid maxConcurrent -1 rejects before fetching (0.960244ms)
✖ invalid maxConcurrent 1.5 rejects before fetching (0.967164ms)
✖ invalid maxConcurrent NaN rejects before fetching (0.628857ms)
✖ invalid maxConcurrent Infinity rejects before fetching (0.846729ms)
✖ invalid rateLimitDelay -1 rejects before fetching (1.170472ms)
✖ invalid rateLimitDelay NaN rejects before fetching (0.77202ms)
✖ invalid rateLimitDelay Infinity rejects before fetching (0.705582ms)
✖ invalid rateLimitDelay 2147483648 rejects before fetching (0.757081ms)
✖ invalid rateLimitDelay 0.5 rejects before fetching (0.545227ms)

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)...
✖ explicit zero delay schedules no inter-batch timer (12.765943ms)
✓ 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 (9.023915ms)
Request failed (attempt 2/4), retrying in 2000ms...
Request failed (attempt 3/4), retrying in 4000ms...
Request failed (attempt 1/4), retrying in 1000ms...
✔ GET retries terminate after four attempts with 1,2,4 second backoff (6.558766ms)
Request failed (attempt 2/4), retrying in 2000ms...
Request failed (attempt 3/4), retrying in 4000ms...
Request failed (attempt 1/4), retrying in 1000ms...
✖ write operation ()=>canvasPost("/courses",{}) is not automatically replayed (4.97502ms)
Request failed (attempt 2/4), retrying in 2000ms...
Request failed (attempt 3/4), retrying in 4000ms...
Request failed (attempt 1/4), retrying in 1000ms...
✖ write operation ()=>canvasPut("/courses/1",{}) is not automatically replayed (5.148288ms)
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
✗ Failed to grade user 2: callback failed
Found 3 submissions to process

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

==================================================
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: 1.5 submissions per batch
Found 4 submissions to process

Processing batch 1/3 (1 submissions)...
✖ write operation ()=>canvasDelete("/courses/1") is not automatically replayed (6.557572ms)
✔ dry run never writes and accounts for skip, callback failure and grade (0.960127ms)
✓ Graded submission for user 1
Waiting 1000ms before next batch...

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

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

==================================================
Bulk grading complete!
==================================================
  Total:   4
  Graded:  4
  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)...
✓ Graded submission for user undefined

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  1
  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)...
✓ Graded submission for user 0

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  1
  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)...
✓ Graded submission for user -1

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  1
  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)...
✓ Graded submission for user 1.5

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  1
  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)...
✓ Graded submission for user 7

==================================================
Bulk grading complete!
==================================================
  Total:   1
  Graded:  1
  Skipped: 0
  Failed:  0
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 7
✓ Graded submission for user 7

==================================================
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:  1

Failed submissions:
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:
✖ fractional batch stride cannot exceed its requested cap (6.110223ms)
✖ invalid submission user undefined fails before grading (1.114584ms)
✖ invalid submission user 0 fails before grading (0.810157ms)
✖ invalid submission user -1 fails before grading (1.351437ms)
✖ invalid submission user 1.5 fails before grading (0.895302ms)
✖ invalid submission user 7 fails before grading (0.774184ms)
✖ callback mutation cannot redirect two jobs to the same submission (1.635117ms)
✖ callback throwing null keeps the failed target in the summary (1.636614ms)
✖ callback throwing undefined keeps the failed target in the summary (0.797674ms)
ℹ tests 31
ℹ suites 0
ℹ pass 3
ℹ fail 28
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3292.760313

✖ failing tests:

test at ../typescript-before/tests/code_api/grading-commit-response.test.ts:1:371
✖ committed grade followed by 503 is not sent twice (1061.040627ms)
  AssertionError [ERR_ASSERTION]: one committed grade/comment must not be replayed

  2 !== 1

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-commit-response.test.ts:37:14)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 2,
    expected: 1,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-commit-response.test.ts:1:371
✖ committed grade followed by disconnect is not sent twice (1025.104084ms)
  AssertionError [ERR_ASSERTION]: one committed grade/comment must not be replayed

  2 !== 1

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-commit-response.test.ts:37:14)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 2,
    expected: 1,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-commit-response.test.ts:1:371
✖ committed grade followed by invalid-json is not sent twice (1021.320312ms)
  AssertionError [ERR_ASSERTION]: one committed grade/comment must not be replayed

  2 !== 1

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-commit-response.test.ts:37:14)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 2,
    expected: 1,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-commit-response.test.ts:1:371
✖ committed grade followed by redirect is not sent twice (21.919969ms)
  AssertionError [ERR_ASSERTION]: one committed grade/comment must not be replayed

  2 !== 1

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-commit-response.test.ts:37:14)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 2,
    expected: 1,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:968
✖ duplicate submission targets reject before callbacks or writes (17.736503ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:30:3)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /duplicate/i,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1365
✖ invalid maxConcurrent 0 rejects before fetching (2.333127ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:41:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /maxConcurrent/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1365
✖ invalid maxConcurrent -1 rejects before fetching (0.960244ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:41:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /maxConcurrent/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1365
✖ invalid maxConcurrent 1.5 rejects before fetching (0.967164ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:41:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /maxConcurrent/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1365
✖ invalid maxConcurrent NaN rejects before fetching (0.628857ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:41:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /maxConcurrent/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1365
✖ invalid maxConcurrent Infinity rejects before fetching (0.846729ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:41:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /maxConcurrent/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1844
✖ invalid rateLimitDelay -1 rejects before fetching (1.170472ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:52:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /rateLimitDelay/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1844
✖ invalid rateLimitDelay NaN rejects before fetching (0.77202ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:52:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /rateLimitDelay/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1844
✖ invalid rateLimitDelay Infinity rejects before fetching (0.705582ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:52:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /rateLimitDelay/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1844
✖ invalid rateLimitDelay 2147483648 rejects before fetching (0.757081ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:52:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /rateLimitDelay/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:1844
✖ invalid rateLimitDelay 0.5 rejects before fetching (0.545227ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:52:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /rateLimitDelay/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:2267
✖ explicit zero delay schedules no inter-batch timer (12.765943ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected

  + [
  +   1000
  + ]
  - []

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:64:10)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: [ 1000 ],
    expected: [],
    operator: 'deepStrictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:4202
✖ write operation ()=>canvasPost("/courses",{}) is not automatically replayed (4.97502ms)
  AssertionError [ERR_ASSERTION]: The input did not match the regular expression /may have been applied/. Input:

  'Error: Canvas API error (503): unavailable'

      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:105:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: Error: Canvas API error (503): unavailable
        at makeCanvasRequest (/workspace/scratch/5655cab44c80/typescript-before/src/canvas_mcp/code_api/client.ts:129:15)
        at async waitForActual (node:assert:646:5)
        at async strict.rejects (node:assert:769:25)
        at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:105:5)
        at async Test.run (node:internal/test_runner/test:1389:7)
        at async Test.processPendingSubtests (node:internal/test_runner/test:960:7),
    expected: /may have been applied/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:4202
✖ write operation ()=>canvasPut("/courses/1",{}) is not automatically replayed (5.148288ms)
  AssertionError [ERR_ASSERTION]: The input did not match the regular expression /may have been applied/. Input:

  'Error: Canvas API error (503): unavailable'

      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:105:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: Error: Canvas API error (503): unavailable
        at makeCanvasRequest (/workspace/scratch/5655cab44c80/typescript-before/src/canvas_mcp/code_api/client.ts:129:15)
        at async waitForActual (node:assert:646:5)
        at async strict.rejects (node:assert:769:25)
        at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:105:5)
        at async Test.run (node:internal/test_runner/test:1389:7)
        at async Test.processPendingSubtests (node:internal/test_runner/test:960:7),
    expected: /may have been applied/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:4202
✖ write operation ()=>canvasDelete("/courses/1") is not automatically replayed (6.557572ms)
  AssertionError [ERR_ASSERTION]: The input did not match the regular expression /may have been applied/. Input:

  'Error: Canvas API error (503): unavailable'

      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:105:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: Error: Canvas API error (503): unavailable
        at makeCanvasRequest (/workspace/scratch/5655cab44c80/typescript-before/src/canvas_mcp/code_api/client.ts:129:15)
        at async waitForActual (node:assert:646:5)
        at async strict.rejects (node:assert:769:25)
        at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:105:5)
        at async Test.run (node:internal/test_runner/test:1389:7)
        at async Test.processPendingSubtests (node:internal/test_runner/test:960:7),
    expected: /may have been applied/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5029
✖ fractional batch stride cannot exceed its requested cap (6.110223ms)
  AssertionError [ERR_ASSERTION]: The input did not match the regular expression /maxConcurrent/. Input:

  'AssertionError [ERR_ASSERTION]: observed 2 in-flight jobs with cap 1.5'

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:128:12)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: 'AssertionError [ERR_ASSERTION]: observed 2 in-flight jobs with cap 1.5',
    expected: /maxConcurrent/,
    operator: 'match',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5589
✖ invalid submission user undefined fails before grading (1.114584ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:137:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /user_id/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5589
✖ invalid submission user 0 fails before grading (0.810157ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:137:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /user_id/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5589
✖ invalid submission user -1 fails before grading (1.351437ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:137:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /user_id/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5589
✖ invalid submission user 1.5 fails before grading (0.895302ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:137:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /user_id/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5589
✖ invalid submission user 7 fails before grading (0.774184ms)
  AssertionError [ERR_ASSERTION]: Missing expected rejection.
      at async TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:137:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: /user_id/,
    operator: 'rejects',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:5923
✖ callback mutation cannot redirect two jobs to the same submission (1.635117ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected

    [
  +   '7',
  +   '7'
  -   '1',
  -   '2'
    ]

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:147:10)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: [ '7', '7' ],
    expected: [ '1', '2' ],
    operator: 'deepStrictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:6288
✖ callback throwing null keeps the failed target in the summary (1.636614ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected

  + []
  - [
  -   {
  -     error: 'null',
  -     userId: 1
  -   }
  - ]

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:157:12)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: [],
    expected: [ { userId: 1, error: 'null' } ],
    operator: 'deepStrictEqual',
    diff: 'simple'
  }

test at ../typescript-before/tests/code_api/grading-control-plane.test.ts:1:6288
✖ callback throwing undefined keeps the failed target in the summary (0.797674ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected

  + []
  - [
  -   {
  -     error: 'undefined',
  -     userId: 1
  -   }
  - ]

      at TestContext.<anonymous> (/workspace/scratch/5655cab44c80/typescript-before/tests/code_api/grading-control-plane.test.ts:157:12)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: [],
    expected: [ { userId: 1, error: 'undefined' } ],
    operator: 'deepStrictEqual',
    diff: 'simple'
  }
