| # | Test | Group | Coverage | Status | Duration | Details |
|---|---|---|---|---|---|---|
| 1 | createBatch returns ID with correct prefix and initial state | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 2 | deleteFile removes the file | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 3 | decodeJSONEscapes preserves values that already have real newlines | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 4 | markBatchCancelling and markBatchCancelled transitions | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 5 | getFileData returns raw data | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 6 | toJinjaCompatible() strips null keys from dicts — Jinja accepts it | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 7 | toJinjaCompatible() strips null elements from arrays | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 8 | toJinjaCompatible() preserves all non-null types | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 9 | getFile returns nil for nonexistent file | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 10 | toAny() wraps null as NSNull — Jinja throws on it | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 11 | toAny() dict with null value — Jinja throws | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 12 | toAny() result in ToolSpec — Jinja throws (proves the bug) | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 13 | markBatchFailed sets status and error | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 14 | toJinjaCompatible() deeply nested nulls — Jinja accepts them | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 15 | deleteFile returns false for nonexistent file | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 16 | returns unchanged when tools is empty | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 17 | getFile returns stored file metadata | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 18 | recordResult increments failed count for error results | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 19 | markBatchInProgress transitions status and stores slot IDs | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 20 | getSlotIds returns empty for nonexistent batch | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 21 | returns empty array and original text when no tool calls found | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 22 | toJinjaCompatible() result survives ToolSpec → Jinja Value round-trip | NullableSchema | unit smoke standard full | PASS | 0.0s | pass |
| 23 | storeFile creates file with correct metadata | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 24 | getBatch returns nil for nonexistent batch | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 25 | getFileData returns nil for nonexistent file | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 26 | Multiple files have unique IDs | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 27 | bare JSON that's not a tool call doesn't match | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 28 | leaves already-correct types alone (string stays string) | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 29 | coerces string to object | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 30 | returns unchanged when tool name not found in tools list | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 31 | parses JSON-in-XML format with 'arguments' key | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 32 | listBatches returns all batches | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 33 | completed tool call parsing resolves adaptive XML tool names against offered tools | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 34 | skips empty parameter values | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 35 | parses Mistral [TOOL_CALLS] func_name[ARGS]{...} format | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 36 | handles multiple tool calls | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 37 | XMLParser path drops unclosed parameter (no bare < to trigger fallback) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 38 | BatchObject encodes with all fields | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 39 | preserves content outside tool calls | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 40 | text content before and after tool call is preserved | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 41 | BatchResultLine with error encodes correctly | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 42 | decodeXMLEntities handles double-encoded entities: &lt; → < | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 43 | does not coerce non-string values | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 44 | handles multiple parameters with mixed string and JSON types | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 45 | FileObject encodes with snake_case keys | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 46 | decodeXMLEntities handles empty string | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 47 | question tool: array of objects with typed fields (OpenCode pattern) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 48 | BatchListResponse encodes with has_more field | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 49 | insert: exact match — node had no prior cache | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 50 | returns nil for content without <function=...> tag | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 51 | decodeXMLEntities handles entities at string boundaries | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 52 | findPrefix: query shorter than cached edge | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 53 | findPrefix: exact match returns full prefix | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 54 | write file with Python containing comparison operators (OpenCode pattern) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 55 | findPrefix: traverses nodes but no cached node found | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 56 | compactUpward merges single-child node after sibling eviction | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 57 | Count tracks insertions, evictions, and invalidation | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 58 | LRU eviction at capacity evicts oldest | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 59 | BatchCreateRequest decodes with snake_case keys | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 60 | Conversation fork: both branches survive and are findable | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 61 | BaseKVCache truncateToOffset is safe no-op on MambaCache | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 62 | FileDeleteResponse defaults | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 63 | findPrefix: miss with matched == 0 and debugLogging | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 64 | truncateToOffset on empty cache is no-op | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 65 | coerces whole-number string to Int for 'number' type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 66 | findPrefix with debugLogging exercises all log branches | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 67 | extracts think tags into reasoningContent | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 68 | empty stream produces nil content | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 69 | coerces string to array | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 70 | handles mixed XML and JSON in separate <tool_call> blocks | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 71 | RadixNode isLeaf and hasCachedState | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 72 | BatchScheduler default max concurrent is 8 | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 73 | buildChoiceLogprobs converts ResolvedLogprob to ChoiceLogprobs | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 74 | insert with debugLogging exercises log branches | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 75 | findPrefix: deepest cached node wins over shallower | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 76 | insert: partial edge split with remaining tokens | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 77 | BatchInputLine decodes from JSONL line | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 78 | finishReason is stop when stopped by sequence | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 79 | insert: partial edge split at exact split point | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 80 | Eviction with debugLogging | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 81 | JSONL with blank lines are skipped | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 82 | BatchCompletionRequest decodes array of requests | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 83 | findPrefix: miss with matched > 0 and debugLogging | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 84 | buildChoiceLogprobs returns nil for empty input | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 85 | KVCacheEntry stores tokens and layerStates | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 86 | insert: multiple inserts grow the tree (multi-turn) | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 87 | Touch via findPrefix prevents eviction | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 88 | findPrefix: empty cache — miss | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 89 | StreamChunk carries cached token count | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 90 | coerceStringValue coerces '0.0' to Int 0 for number type (whole number) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 91 | parses basic XML tool call | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 92 | insert: exact match update — node already has cache | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 93 | BatchInputLine handles messages with special characters | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 94 | insert: empty tokens is no-op | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 95 | runtime emits placeholder then final replacement for XML tool call | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 96 | runtime parses adaptive xml JSON fallback | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 97 | mixed: write content has real newlines, edit oldString has escaped — both decoded correctly | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 98 | runtime salvages incomplete tool call at stream end | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 99 | finishReason is length when max tokens reached | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 100 | coerceStringValue returns nil for unknown schema type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 101 | BatchScheduler helper extraction keeps tool call streams isolated per event list | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 102 | Multiple JSONL lines parse independently | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 103 | JSON-in-XML with invalid JSON falls through | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 104 | bash tool with JSON-escaped command gets decoded | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 105 | requiredParamNames preserves client schema order (not alphabetical) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 106 | decodeJSONEscapes unescapes literal \n and \" when no real newlines present | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 107 | insert: new edge (no matching child) | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 108 | KVCacheEntry touch updates access time | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 109 | parses JSON-in-XML format with 'parameters' key | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 110 | collects timing and token stats from final chunk | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 111 | multi-chunk think tags extracted correctly | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 112 | no think extraction when disabled | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 113 | StreamChunk carries timing info | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 114 | BatchScheduler stop helper does not stop while still inside think block | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 115 | does not fill non-required missing params | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 116 | MLXServiceError.noModelLoaded has descriptive message | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 117 | finishReason is tool_calls when tool calls present | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 118 | decodeJSONEscapes preserves real backslashes (\\n stays as \n literal) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 119 | EBNF grammar generates named required param rules for edit tool | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 120 | empty <tool_call></tool_call> block returns no calls | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 121 | coerceStringValue handles empty string for all types | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 122 | EBNF grammar param_value uses permissive pv_char rule | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 123 | does NOT fill missing required string param (let client report missing) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 124 | decodeJSONEscapes passes through plain text without escapes | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 125 | handles multiline parameter values | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 126 | findPrefix: no child for next token — miss at root | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 127 | decodeJSONEscapes handles empty string | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 128 | RequestSlot initializes with unique ID and zero content | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 129 | BatchInputLine handles optional body fields | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 130 | BatchScheduler emits only completed tool calls from slot runtime events | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 131 | BatchInputLine handles system + user messages | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 132 | invalidateAll with debugLogging | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 133 | invalidateAll clears everything | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 134 | stream with only think tags and no visible content | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 135 | finishReason is stop by default | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 136 | findPrefix: query longer than cached — partial prefix hit | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 137 | JSON format switch mid-conversation (Qwen3-Coder-Next common error) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 138 | write tool with real newlines is NOT affected by decodeJSONEscapes | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 139 | KVCacheSimple and ArraysCache are batch-eligible | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 140 | RequestSlot appendContent accumulates text | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 141 | StreamChunk defaults: only text, everything else nil | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 142 | coerces string to integer | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 143 | RotatingKVCache is NOT batch-eligible | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 144 | coerceStringValue returns nil for non-numeric string with integer type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 145 | decodeJSONEscapes handles \t escapes | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 146 | MambaCache without leftPadding returns nil mask | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 147 | findPrefix: partial edge match divergence mid-edge — returns cached state | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 148 | coerceStringValue returns nil for non-numeric string with number type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 149 | coerces string to negative integer | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 150 | BatchScheduler stop helper emits stopped chunk on exact stop match | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 151 | BatchScheduler stop helper buffers partial stop across chunk boundaries | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 152 | Multiple evictions on single insert (maxEntries=1) | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 153 | think extraction with tool calls returns nil content and reasoning | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 154 | BatchScheduler emits delta chunks before completed tool call chunks | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 155 | collects logprobs from stream chunks | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 156 | fills missing required boolean param with false | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 157 | runtime preserves nulls in adaptive xml JSON fallback | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 158 | coerces string to boolean true and false | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 159 | RequestSlot IDs are unique across instances | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 160 | regex fallback handles bare < in parameter value | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 161 | MLXServiceError.serviceShuttingDown has descriptive message | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 162 | normalizeToolCall remaps keys before coercing values | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 163 | BatchScheduler emits incremental tool call deltas from slot runtime events | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 164 | bare JSON with 'parameters' key instead of 'arguments' | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 165 | parses bare JSON tool call without wrapper tags | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 166 | decodeXMLEntities passes through strings without entities | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 167 | handles duplicate parameters (keeps first non-empty) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 168 | returns unchanged when arguments JSON is invalid | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 169 | regex fallback salvages unclosed parameter (max_tokens truncation) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 170 | handles parameter values with special characters in Python code | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 171 | decodeXMLEntities handles multiple < in Python code | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 172 | coerceStringValue returns nil for float string with integer type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 173 | JSON-in-XML with missing name returns no tool calls | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 174 | decodeXMLEntities handles consecutive entities | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 175 | returns unchanged when tools is nil | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 176 | parses Mistral [TOOL_CALLS] with multiple items in array | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 177 | coerceStringValue returns nil for invalid JSON with object type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 178 | EBNF grammar generates named required param rules for bash tool | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 179 | completed tool call parsing preserves remaining non-tool text | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 180 | coerceStringValue returns nil for invalid JSON with array type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 181 | parses Mistral [TOOL_CALLS] JSON array format | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 182 | EBNF grammar handles tool with no required params | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 183 | decodeJSONEscapes full edit oldString from real Qwen3-Coder output | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 184 | normalizeToolCalls assigns sequential indices from startIndex | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 185 | decodeXMLEntities passes through bare & without entity suffix | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 186 | coerceStringValue handles negative numbers | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 187 | coerces string to number (float) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 188 | mixed coercion: some params coerced, some left alone | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 189 | multiple parameters with same non-empty value keeps first | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 190 | JSON-in-XML with no arguments key still parses name | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 191 | preserves JSON object parameter values | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 192 | bash tool with special characters | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 193 | strips <think></think> tags from remaining text | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 194 | decodeJSONEscapes handles only \" without \n | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 195 | does not coerce when property not in schema | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 196 | edit tool with JSON-escaped oldString gets decoded (model pre-escaping bug) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 197 | requiredParamNames returns empty for tool with no required array | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 198 | decodeXMLEntities decodes all 5 standard entities | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 199 | does NOT coerce 'yes'/'no'/'1'/'0' to boolean | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 200 | coerceStringValue coerces '0' to Int 0 for integer type | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 201 | decodes XML entities in parameter values via XMLParser | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 202 | coerces boolean case-insensitively (TRUE, True, FALSE) | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 203 | preserves JSON array parameter values | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 204 | EBNF grammar allows extra optional params after required ones | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 205 | fills missing required integer param with 0 | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 206 | RequestSlot is thread-safe under concurrent writes | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 207 | BatchStore handles concurrent batch creates safely | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 208 | Cancel batch transitions to cancelled | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 209 | Cancel batch on non-in_progress returns 400 | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 210 | Cancel nonexistent batch returns 404 | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 211 | BatchCompletionsController sets grammar downgrade header when strict tools present | XMLParsing | unit smoke standard full | PASS | 0.0s | pass |
| 212 | Rejects line with wrong url | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 213 | Rejects line with wrong method | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 214 | Accepts valid method and url | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 215 | BatchStore handles concurrent file operations safely | UnitTest | unit smoke standard full | PASS | 0.0s | pass |
| 216 | RequestSlot elapsedTime increases over time | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 217 | recordResult drops results for cancelling batch | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 218 | recordResult drops results for cancelled batch | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 219 | recordResult increments completed count | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 220 | Batched prefill cache creation matches expected pattern for mixed layers | XMLParsing | unit smoke standard full | PASS | 0.1s | pass |
| 221 | recordResult still works for in_progress batch | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 222 | Batch auto-completes when all requests are done | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 223 | Output JSONL file contains all results | XMLParsing | unit smoke standard full | PASS | 0.1s | pass |
| 224 | BatchResultLine round-trips through JSON | XMLParsing | unit smoke standard full | PASS | 0.1s | pass |
| 225 | MambaCache mask returns nil after state is set (non-prefill) | XMLParsing | unit smoke standard full | PASS | 0.1s | pass |
| 226 | truncateToOffset is no-op when offset matches array size | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 227 | state getter returns raw refs after truncateToOffset (fast path) | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 228 | truncateToOffset physically shrinks arrays to offset | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 229 | createSSMMask delegates to MambaCache.makeMask | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 230 | BatchKVCacheSimple update stores KV for all sequences | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 231 | createAttentionMask delegates to BatchKVCacheSimple.makeMask | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 232 | truncateToOffset after multiple trim cycles | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 233 | MambaCache leftPadding creates correct SSM mask | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 234 | BatchKVCacheSimple mask with uniform padding (same-length sequences) | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 235 | BatchKVCacheSimple mask with asymmetric padding (different-length sequences) | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 236 | BatchKVCacheSimple decode mask with padding (n=1) | XMLParsing | unit smoke standard full | PASS | 0.1s | pass |
| 237 | Extracted cache can be loaded into KVCacheSimple for radix save | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 238 | BatchKVCacheSimple extend merges prefill batch with existing decode batch | XMLParsing | unit smoke standard full | PASS | 0.1s | pass |
| 239 | Full extraction round-trip: batch → individual → KVCacheSimple | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 240 | MambaCache batched state can be sliced per-sequence | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 241 | BatchKVCacheSimple extract returns correct per-sequence KV | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 242 | Left-padding stacks variable-length token arrays correctly | UnitTest | unit smoke standard full | PASS | 0.1s | pass |
| 243 | BatchAPIController response includes reasoningContent when model supports thinking | UnitTest | unit smoke standard full | PASS | 0.6s | pass |
| 244 | BatchAPIController response includes logprobs when provided in stream | UnitTest | unit smoke standard full | PASS | 0.6s | pass |
| 245 | BatchAPIController response includes tool_calls with correct finish_reason | UnitTest | unit smoke standard full | PASS | 0.6s | pass |