.F......F.....FF.FFFFFFFFFFFFFFFFFFFF...                                 [100%]
================================== FAILURES ===================================
__ test_direct_surrogate_rejection_is_typed_and_atomic[high-idempotency_key] __
tests\unit\test_task_checkpoint_boundaries_acceptance.py:114: in test_direct_surrogate_rejection_is_typed_and_atomic
    _save(owner, payload)
tests\unit\test_task_checkpoint_boundaries_acceptance.py:59: in _save
    return json.loads(TaskBook(owner).checkpoint(wing=WING, room=ROOM, **payload))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\tasks.py:162: in checkpoint
    key = "task:" + hashlib.sha256(state["idempotency_key"].encode("utf-8")).hexdigest()
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   UnicodeEncodeError: 'utf-8' codec can't encode character '\ud800' in position 6: surrogates not allowed
__ test_direct_surrogate_rejection_is_typed_and_atomic[low-idempotency_key] ___
tests\unit\test_task_checkpoint_boundaries_acceptance.py:114: in test_direct_surrogate_rejection_is_typed_and_atomic
    _save(owner, payload)
tests\unit\test_task_checkpoint_boundaries_acceptance.py:59: in _save
    return json.loads(TaskBook(owner).checkpoint(wing=WING, room=ROOM, **payload))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\tasks.py:162: in checkpoint
    key = "task:" + hashlib.sha256(state["idempotency_key"].encode("utf-8")).hexdigest()
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   UnicodeEncodeError: 'utf-8' codec can't encode character '\udfff' in position 6: surrogates not allowed
___ test_direct_oversized_evidence_ids_are_typed_and_atomic[int64-overflow] ___
tests\unit\test_task_checkpoint_boundaries_acceptance.py:128: in test_direct_oversized_evidence_ids_are_typed_and_atomic
    _save(owner, payload)
tests\unit\test_task_checkpoint_boundaries_acceptance.py:59: in _save
    return json.loads(TaskBook(owner).checkpoint(wing=WING, room=ROOM, **payload))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\tasks.py:223: in checkpoint
    self._evidence(state["evidence_ids"])
src\cairntir\tasks.py:137: in _evidence
    if self._store._task_drawers(ids).keys() != set(ids):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\memory\store.py:1181: in _task_drawers
    rows = self._conn.execute(
E   OverflowError: Python int too large to convert to SQLite INTEGER
________ test_direct_oversized_evidence_ids_are_typed_and_atomic[huge] ________
tests\unit\test_task_checkpoint_boundaries_acceptance.py:128: in test_direct_oversized_evidence_ids_are_typed_and_atomic
    _save(owner, payload)
tests\unit\test_task_checkpoint_boundaries_acceptance.py:59: in _save
    return json.loads(TaskBook(owner).checkpoint(wing=WING, room=ROOM, **payload))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\tasks.py:223: in checkpoint
    self._evidence(state["evidence_ids"])
src\cairntir\tasks.py:137: in _evidence
    if self._store._task_drawers(ids).keys() != set(ids):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\memory\store.py:1181: in _task_drawers
    rows = self._conn.execute(
E   OverflowError: Python int too large to convert to SQLite INTEGER
__ test_invalid_creation_leaves_no_task_or_failure_receipt[idempotency_key] ___
tests\unit\test_task_checkpoint_boundaries_acceptance.py:149: in test_invalid_creation_leaves_no_task_or_failure_receipt
    _save(owner, payload)
tests\unit\test_task_checkpoint_boundaries_acceptance.py:59: in _save
    return json.loads(TaskBook(owner).checkpoint(wing=WING, room=ROOM, **payload))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\tasks.py:162: in checkpoint
    key = "task:" + hashlib.sha256(state["idempotency_key"].encode("utf-8")).hexdigest()
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   UnicodeEncodeError: 'utf-8' codec can't encode character '\ud800' in position 6: surrogates not allowed
_ test_invalid_creation_leaves_no_task_or_failure_receipt[evidence-overflow] __
tests\unit\test_task_checkpoint_boundaries_acceptance.py:149: in test_invalid_creation_leaves_no_task_or_failure_receipt
    _save(owner, payload)
tests\unit\test_task_checkpoint_boundaries_acceptance.py:59: in _save
    return json.loads(TaskBook(owner).checkpoint(wing=WING, room=ROOM, **payload))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\tasks.py:223: in checkpoint
    self._evidence(state["evidence_ids"])
src\cairntir\tasks.py:137: in _evidence
    if self._store._task_drawers(ids).keys() != set(ids):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src\cairntir\memory\store.py:1181: in _task_drawers
    rows = self._conn.execute(
E   OverflowError: Python int too large to convert to SQLite INTEGER
_______ test_cli_surfaces_clean_boundary_errors_without_writes[content] _______
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: workflow request is not JSON-serializable: 'utf-8' codec can't encode character '\ud800' in position 276: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A0D82260>)
___ test_cli_surfaces_clean_boundary_errors_without_writes[idempotency_key] ___
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: 'utf-8' codec can't encode character '\ud800' in position 6: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A0D80660>)
_______ test_cli_surfaces_clean_boundary_errors_without_writes[task_id] _______
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: workflow request is not JSON-serializable: 'utf-8' codec can't encode character '\ud800' in position 226: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A0D80900>)
______ test_cli_surfaces_clean_boundary_errors_without_writes[completed] ______
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: workflow request is not JSON-serializable: 'utf-8' codec can't encode character '\ud800' in position 35: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A050BE60>)
_____ test_cli_surfaces_clean_boundary_errors_without_writes[outstanding] _____
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: workflow request is not JSON-serializable: 'utf-8' codec can't encode character '\ud800' in position 169: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A0D80740>)
_____ test_cli_surfaces_clean_boundary_errors_without_writes[next_action] _____
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: workflow request is not JSON-serializable: 'utf-8' codec can't encode character '\ud800' in position 127: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A0D81C40>)
________ test_cli_surfaces_clean_boundary_errors_without_writes[model] ________
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: cairntir: workflow request is not JSON-serializable: 'utf-8' codec can't encode character '\ud800' in position 345: surrogates not allowed
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A050B300>)
__ test_cli_surfaces_clean_boundary_errors_without_writes[evidence-overflow] __
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Traceback (most recent call last) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\cli.py:736 in checkpoint_cmd                   \u2502
E     \u2502                                                                             \u2502
E     \u2502    733 \u2502   \u2502   \u2502   or not isinstance(payload["checkpoint"], dict)           \u2502
E     \u2502    734 \u2502   \u2502   ):                                                           \u2502
E     \u2502    735 \u2502   \u2502   \u2502   raise MCPError("input requires content and checkpoint, w \u2502
E     \u2502 >  736 \u2502   \u2502   typer.echo(_backend(close_with=ctx).remember(wing=wing, room \u2502
E     \u2502    737 \u2502   except (OSError, UnicodeError, ValueError, CairntirError) as exc \u2502
E     \u2502    738 \u2502   \u2502   typer.echo(f"cairntir: {exc}", err=True)                     \u2502
E     \u2502    739 \u2502   \u2502   raise typer.Exit(code=1) from exc                            \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\mcp\\backend.py:209 in remember                 \u2502
E     \u2502                                                                             \u2502
E     \u2502    206 \u2502   \u2502   \u2502                                                            \u2502
E     \u2502    207 \u2502   \u2502   \u2502   if any(value is not None for value in (metadata, anchors \u2502
E     \u2502    208 \u2502   \u2502   \u2502   \u2502   raise MCPError("checkpoint cannot combine with metad \u2502
E     \u2502 >  209 \u2502   \u2502   \u2502   return TaskBook(self._store).checkpoint(                 \u2502
E     \u2502    210 \u2502   \u2502   \u2502   \u2502   wing=wing, room=room, content=content, checkpoint=ch \u2502
E     \u2502    211 \u2502   \u2502   \u2502   )                                                        \u2502
E     \u2502    212 \u2502   \u2502   try:                                                         \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\tasks.py:223 in checkpoint                     \u2502
E     \u2502                                                                             \u2502
E     \u2502   220 \u2502   \u2502   with self._store.transaction():                               \u2502
E     \u2502   221 \u2502   \u2502   \u2502   self._authorize("read", wing=wing, room=room)             \u2502
E     \u2502   222 \u2502   \u2502   \u2502   self._authorize("write", wing=wing, room=room)            \u2502
E     \u2502 > 223 \u2502   \u2502   \u2502   self._evidence(state["evidence_ids"])                     \u2502
E     \u2502   224 \u2502   \u2502   \u2502   execution = self._store.execute_once(                     \u2502
E     \u2502   225 \u2502   \u2502   \u2502   \u2502   idempotency_key=key, operation=_OPERATION, request=re \u2502
E     \u2502   226 \u2502   \u2502   \u2502   )                                                         \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\tasks.py:137 in _evidence                      \u2502
E     \u2502                                                                             \u2502
E     \u2502   134 \u2502   \u2502   \u2502   self._store.authorize(capability, wing=wing, room=room)   \u2502
E     \u2502   135 \u2502                                                                     \u2502
E     \u2502   136 \u2502   def _evidence(self, ids: list[int]) -> None:                      \u2502
E     \u2502 > 137 \u2502   \u2502   if self._store._task_drawers(ids).keys() != set(ids):         \u2502
E     \u2502   138 \u2502   \u2502   \u2502   raise TaskError("task evidence is unavailable")           \u2502
E     \u2502   139 \u2502                                                                     \u2502
E     \u2502   140 \u2502   def checkpoint(                                                   \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\memory\\store.py:1181 in _task_drawers          \u2502
E     \u2502                                                                             \u2502
E     \u2502   1178 \u2502   \u2502   \u2502   for start in range(0, len(drawer_ids), 400):             \u2502
E     \u2502   1179 \u2502   \u2502   \u2502   \u2502   batch = drawer_ids[start : start + 400]              \u2502
E     \u2502   1180 \u2502   \u2502   \u2502   \u2502   placeholders = ",".join("?" for _ in batch)          \u2502
E     \u2502 > 1181 \u2502   \u2502   \u2502   \u2502   rows = self._conn.execute(                           \u2502
E     \u2502   1182 \u2502   \u2502   \u2502   \u2502   \u2502   f"SELECT * FROM drawers WHERE id IN ({placeholde \u2502
E     \u2502   1183 \u2502   \u2502   \u2502   \u2502   \u2502   tuple(batch),                                    \u2502
E     \u2502   1184 \u2502   \u2502   \u2502   \u2502   ).fetchall()                                         \u2502
E     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
E     OverflowError: Python int too large to convert to SQLite INTEGER
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A050B140>)
____ test_cli_surfaces_clean_boundary_errors_without_writes[evidence-huge] ____
tests\unit\test_task_checkpoint_boundaries_acceptance.py:165: in test_cli_surfaces_clean_boundary_errors_without_writes
    _clean_error(rejected.stdout + rejected.stderr, "cairntir:")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:86: in _clean_error
    assert not any(
E   AssertionError: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Traceback (most recent call last) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\cli.py:736 in checkpoint_cmd                   \u2502
E     \u2502                                                                             \u2502
E     \u2502    733 \u2502   \u2502   \u2502   or not isinstance(payload["checkpoint"], dict)           \u2502
E     \u2502    734 \u2502   \u2502   ):                                                           \u2502
E     \u2502    735 \u2502   \u2502   \u2502   raise MCPError("input requires content and checkpoint, w \u2502
E     \u2502 >  736 \u2502   \u2502   typer.echo(_backend(close_with=ctx).remember(wing=wing, room \u2502
E     \u2502    737 \u2502   except (OSError, UnicodeError, ValueError, CairntirError) as exc \u2502
E     \u2502    738 \u2502   \u2502   typer.echo(f"cairntir: {exc}", err=True)                     \u2502
E     \u2502    739 \u2502   \u2502   raise typer.Exit(code=1) from exc                            \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\mcp\\backend.py:209 in remember                 \u2502
E     \u2502                                                                             \u2502
E     \u2502    206 \u2502   \u2502   \u2502                                                            \u2502
E     \u2502    207 \u2502   \u2502   \u2502   if any(value is not None for value in (metadata, anchors \u2502
E     \u2502    208 \u2502   \u2502   \u2502   \u2502   raise MCPError("checkpoint cannot combine with metad \u2502
E     \u2502 >  209 \u2502   \u2502   \u2502   return TaskBook(self._store).checkpoint(                 \u2502
E     \u2502    210 \u2502   \u2502   \u2502   \u2502   wing=wing, room=room, content=content, checkpoint=ch \u2502
E     \u2502    211 \u2502   \u2502   \u2502   )                                                        \u2502
E     \u2502    212 \u2502   \u2502   try:                                                         \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\tasks.py:223 in checkpoint                     \u2502
E     \u2502                                                                             \u2502
E     \u2502   220 \u2502   \u2502   with self._store.transaction():                               \u2502
E     \u2502   221 \u2502   \u2502   \u2502   self._authorize("read", wing=wing, room=room)             \u2502
E     \u2502   222 \u2502   \u2502   \u2502   self._authorize("write", wing=wing, room=room)            \u2502
E     \u2502 > 223 \u2502   \u2502   \u2502   self._evidence(state["evidence_ids"])                     \u2502
E     \u2502   224 \u2502   \u2502   \u2502   execution = self._store.execute_once(                     \u2502
E     \u2502   225 \u2502   \u2502   \u2502   \u2502   idempotency_key=key, operation=_OPERATION, request=re \u2502
E     \u2502   226 \u2502   \u2502   \u2502   )                                                         \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\tasks.py:137 in _evidence                      \u2502
E     \u2502                                                                             \u2502
E     \u2502   134 \u2502   \u2502   \u2502   self._store.authorize(capability, wing=wing, room=room)   \u2502
E     \u2502   135 \u2502                                                                     \u2502
E     \u2502   136 \u2502   def _evidence(self, ids: list[int]) -> None:                      \u2502
E     \u2502 > 137 \u2502   \u2502   if self._store._task_drawers(ids).keys() != set(ids):         \u2502
E     \u2502   138 \u2502   \u2502   \u2502   raise TaskError("task evidence is unavailable")           \u2502
E     \u2502   139 \u2502                                                                     \u2502
E     \u2502   140 \u2502   def checkpoint(                                                   \u2502
E     \u2502                                                                             \u2502
E     \u2502 C:\\Dev\\Cairntir\\src\\cairntir\\memory\\store.py:1181 in _task_drawers          \u2502
E     \u2502                                                                             \u2502
E     \u2502   1178 \u2502   \u2502   \u2502   for start in range(0, len(drawer_ids), 400):             \u2502
E     \u2502   1179 \u2502   \u2502   \u2502   \u2502   batch = drawer_ids[start : start + 400]              \u2502
E     \u2502   1180 \u2502   \u2502   \u2502   \u2502   placeholders = ",".join("?" for _ in batch)          \u2502
E     \u2502 > 1181 \u2502   \u2502   \u2502   \u2502   rows = self._conn.execute(                           \u2502
E     \u2502   1182 \u2502   \u2502   \u2502   \u2502   \u2502   f"SELECT * FROM drawers WHERE id IN ({placeholde \u2502
E     \u2502   1183 \u2502   \u2502   \u2502   \u2502   \u2502   tuple(batch),                                    \u2502
E     \u2502   1184 \u2502   \u2502   \u2502   \u2502   ).fetchall()                                         \u2502
E     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
E     OverflowError: Python int too large to convert to SQLite INTEGER
E     
E   assert not True
E    +  where True = any(<generator object _clean_error.<locals>.<genexpr> at 0x000002B4A0D82260>)
____ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[content] ____
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 180 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...dd4-4e963c7f8a31"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
_ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[idempotency_key] _
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 340 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...58a-84a14468f5c7"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
____ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[task_id] ____
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 516 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...fore\\\\udfffafter"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
___ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[completed] ___
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 393 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...733-64f16e9c6a26"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
__ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[outstanding] __
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 412 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...63e-9d45e184870a"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
__ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[next_action] __
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 457 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...6bf-78de11f2609e"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
_____ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[model] _____
tests\unit\test_task_resume_acceptance.py:222: in request
    line = self.lines.get(timeout=max(0.01, deadline - time.monotonic()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C:\Users\pnmcg\AppData\Local\Programs\Python\Python311\Lib\queue.py:179: in get
    raise Empty
E   _queue.Empty

During handling of the above exception, another exception occurred:
tests\unit\test_task_checkpoint_boundaries_acceptance.py:181: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    rejected = peer.call("cairntir_remember", wing=WING, room=ROOM, **payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:244: in call
    response = self.request("tools/call", {"name": name, "arguments": arguments})
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\unit\test_task_resume_acceptance.py:224: in request
    pytest.fail(f"TASK_RESUME_INFRASTRUCTURE: stdio timeout: {self.errors[-10:]}")
E   Failed: TASK_RESUME_INFRASTRUCTURE: stdio timeout: ['Received exception from stream: 1 validation error for JSONRPCMessage\n', '  Invalid JSON: lone leading surrogate in hex escape at line 1 column 251 [type=json_invalid, input_value=\'{"jsonrpc": "2.0", "id":...90f-90cf8df91677"}}}}\\n\', input_type=str]\n', '    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid\n']
_ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[evidence-overflow] _
tests\unit\test_task_checkpoint_boundaries_acceptance.py:184: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    _clean_error("\n".join(item["text"] for item in rejected["content"]), "[cairntir error]")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:85: in _clean_error
    assert prefix in text and text.strip() != prefix
E   AssertionError: assert ('[cairntir error]' in 'Python int too large to convert to SQLite INTEGER')
_ test_stdio_surfaces_typed_boundary_errors_and_remains_usable[evidence-huge] _
tests\unit\test_task_checkpoint_boundaries_acceptance.py:184: in test_stdio_surfaces_typed_boundary_errors_and_remains_usable
    _clean_error("\n".join(item["text"] for item in rejected["content"]), "[cairntir error]")
tests\unit\test_task_checkpoint_boundaries_acceptance.py:85: in _clean_error
    assert prefix in text and text.strip() != prefix
E   AssertionError: assert ('[cairntir error]' in 'Python int too large to convert to SQLite INTEGER')
=========================== short test summary info ===========================
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_direct_surrogate_rejection_is_typed_and_atomic[high-idempotency_key]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_direct_surrogate_rejection_is_typed_and_atomic[low-idempotency_key]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_direct_oversized_evidence_ids_are_typed_and_atomic[int64-overflow]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_direct_oversized_evidence_ids_are_typed_and_atomic[huge]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_invalid_creation_leaves_no_task_or_failure_receipt[idempotency_key]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_invalid_creation_leaves_no_task_or_failure_receipt[evidence-overflow]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[content]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[idempotency_key]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[task_id]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[completed]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[outstanding]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[next_action]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[model]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[evidence-overflow]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_cli_surfaces_clean_boundary_errors_without_writes[evidence-huge]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[content]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[idempotency_key]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[task_id]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[completed]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[outstanding]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[next_action]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[model]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[evidence-overflow]
FAILED tests/unit/test_task_checkpoint_boundaries_acceptance.py::test_stdio_surfaces_typed_boundary_errors_and_remains_usable[evidence-huge]
24 failed, 16 passed in 166.70s (0:02:46)
