Files
SnapOtter/tests/baseline/unit.json
T

9103 lines
1.9 MiB
Plaintext

{
"testIds": [
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback does not retry on non-OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback does not retry when already using u2net",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback fires progress callback on fallback retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback propagates error if fallback also fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback retries with fallback when no model is specified (default)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback retries with u2net when OOM is detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback throws when OOM fallback succeeds at bridge level but Python returns success: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback uses 300000ms timeout for the u2net fallback attempt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback uses fallback error message when OOM fallback returns success: false without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases handles missing width and height from metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases passes backgroundColor option in args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling propagates bridge timeout errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling propagates sharp conversion errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling throws fallback error when success: false and no error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling throws when Python returns success: false with custom error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling calls resize when longest edge exceeds 2048px",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling constrains by height when portrait orientation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling does not call resize when image is within limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling does not upscale mask when image was not downscaled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling upscales mask back to original dimensions after processing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground onProgress forwarding passes onProgress callback through to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground onProgress forwarding passes undefined onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization calls remove_bg.py with input path, output path, and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization converts input to PNG via sharp before writing to disk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes all post-processing options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes backgroundColor option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes both model and backgroundColor together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes decontaminate option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes edgeRefine option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes model option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization uses unique UUID in temp file names to prevent collisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization writes input to system tmpdir, output to outputDir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground response parsing passes stdout through parseStdoutJson",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground response parsing reads the output file and returns its buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup cleans up both input and output temp files on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup cleans up temp files when Python returns failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup cleans up temp files when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup does not throw if unlink fails (swallows cleanup errors)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation scales timeout with megapixels for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses 300000ms base timeout for non-birefnet models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses 600000ms base timeout for birefnet models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses 600000ms base timeout for birefnet-massive model",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses default 300000ms base when model is not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PROCESSING_TIMEOUT_S env for dispatcher path ignores negative PROCESSING_TIMEOUT_S and uses default 600s",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PROCESSING_TIMEOUT_S env for dispatcher path ignores zero PROCESSING_TIMEOUT_S and uses default 600s",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PROCESSING_TIMEOUT_S env for dispatcher path uses PROCESSING_TIMEOUT_S for dispatcher requests when no explicit timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PYTHON_VENV_PATH env handling passes PYTHON_VENV_PATH through to env when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PYTHON_VENV_PATH env handling uses custom PYTHON_VENV_PATH when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - buildMinimalEnv LANG fallback defaults LANG to C.UTF-8 when LANG is not set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - buildMinimalEnv LANG fallback passes through LANG when set in parent env",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - concurrent dispatcher requests with timeouts one request timing out does not prevent other requests from resolving",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher crash retry annotation appends retry annotation to stderr when dispatcher crashes and per-request succeeds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher crash retry annotation does not retry per-request for non-crash errors (e.g. timeout)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher error event extracts error for pending requests dispatcher error with non-ENOENT code rejects pending requests with extracted error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher malformed stdout responses handles response where exitCode is missing (treated as undefined !== 0)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher malformed stdout responses ignores response with valid JSON but missing id field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher malformed stdout responses ignores truncated JSON on stdout and processes next valid response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr interleaving with stdout responses handles empty lines in stderr between valid progress events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr interleaving with stdout responses handles multiple progress events interleaved between two responses",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr interleaving with stdout responses handles stderr arriving between split stdout response chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr non-progress JSON does not invoke onProgress for JSON with progress as string type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr non-progress JSON does not invoke onProgress for JSON with stage as number type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr non-progress JSON handles ready=true signal after dispatcher was already ready (idempotent)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stdin error suppression does not crash when stdin emits an error event",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stdin write failure falls back to per-request after dispatcher stdin write failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stdin write failure retries per-request when dispatcher stdin.write throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher timeout recovery timeout kills the dispatcher so subsequent requests can restart it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars does not include unset vars in subprocess env",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars passes DATA_DIR to subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars passes DISPATCHER_MAX_REQUESTS to subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars passes U2NET_HOME to subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches extracts error from stderr JSON with error field on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches extracts error from stdout JSON when stderr is empty on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches extracts non-traceback stderr as plain text error on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches uses message field when error object has only message property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - graceful shutdown during active requests shutdown during active request triggers SIGTERM and the request retries per-request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - graceful shutdown during active requests shutdown with multiple active requests causes all to retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - initDispatcher additional edge cases handles concurrent initDispatcher calls -- both resolve with same result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - initDispatcher additional edge cases resolves with ready=false when getDispatcher returns null during backoff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with backslash in path values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with boolean false and empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with curly braces inside string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with newline characters in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with tab characters in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with zero/negative number values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases throws on stdout containing brace pair with invalid content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases throws on stdout containing only opening brace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - per-request ENOENT retry with non-ENOENT fallback error venv ENOENT triggers python3 fallback, non-ENOENT on fallback rejects directly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - per-request stderr buffer flush on error exit includes partial stderr buffer in error when process exits non-zero",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - backoff prevents restart during cooldown second crash has 2x the backoff delay of the first crash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests dispatcher crash rejects all pending concurrent requests with retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests one failing request does not affect other concurrent requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests progress events on stderr are forwarded to all pending requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests sends multiple concurrent requests to the same dispatcher process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - crash recovery resets on successful readiness resets consecutiveCrashes to 0 when dispatcher becomes ready",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher error event handling ENOENT error permanently disables the dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher error event handling non-ENOENT dispatcher error increments crash counter and clears dispatcher state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher error event handling non-ENOENT error records a crash but does not permanently disable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress concurrent requests to per-request fallback both resolve",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher close event rejects all pending requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher progress events are forwarded to pending request callbacks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher ready signal sets dispatcherReady and processes requests via dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher ready signal with GPU=false sets gpu to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher stderr collects non-JSON non-bracket lines as error output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher stderr routes diagnostic messages with bracket prefix to logger",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress does not count exit code 0 as a crash (normal MAX_REQUESTS restart)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress falls back to per-request spawn when dispatcher ENOENT marks it failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress getDispatcherStatus reflects consecutiveCrashes after dispatcher crashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress graceful shutdown does not throw when dispatcher already exited",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress handles dispatcher crash followed by successful per-request retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress per-request fallback retries with python3 when venv python fails with ENOENT",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress reports failed status when dispatcher ENOENT occurs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress shutdown is idempotent when called multiple times",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress still counts non-zero exit codes as crashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress timeout rejects the promise without affecting other requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher request timeout kills the dispatcher on timeout so subsequent requests can proceed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher request timeout rejects with timeout when dispatcher does not respond within timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior calls kill(SIGTERM) on the dispatcher process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior calls stdin.end() before killing the process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior does not change GPU status after shutdown (isGpuAvailable returns module-level state)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior sets status to not running and not ready after shutdown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering buffers partial JSON progress lines across stderr chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering does not fire progress for partial JSON that is not yet complete",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering handles multiple complete lines in a single stderr chunk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering handles readiness signal split across stderr chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol collects stderr lines and returns them with the response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol generates a unique UUID id for each request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol handles chunked stdout responses split across data events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol ignores stdout lines that are not valid JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol ignores stdout responses with unknown request IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol rejects the correct request when dispatcher returns non-zero exitCode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol rejects with OOM message when dispatcher response has exitCode 137",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol rejects with segfault message when dispatcher response has exitCode 139",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol returns empty stdout when dispatcher response omits stdout field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol routes responses by ID to the correct pending request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol strips .py extension from script name in dispatcher request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol writes a JSON-line with id, script (without .py), and args to dispatcher stdin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdout partial line buffering handles dispatcher response split across 3 or more stdout chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdout partial line buffering handles two complete responses in a single stdout data event",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError coverage via per-request path extracts error from JSON on stdout when non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError coverage via per-request path extracts last meaningful line from traceback when error is only in stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError coverage via per-request path returns generic exit code message when stderr has only the traceback header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError via dispatcher responses extracts error from JSON stdout in dispatcher response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError via dispatcher responses extracts error from traceback in dispatcher stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError via dispatcher responses uses generic exit code message when dispatcher stderr and stdout are both empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - getDispatcherStatus returns initial state with no dispatcher running",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher edge cases resolves with ready=false when dispatcher fails during init timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher edge cases returns ready=false immediately when dispatcher already permanently failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher edge cases returns ready=false when spawn throws synchronously",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher is idempotent -- second call returns same result without respawning",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with gpu=false when dispatcher reports no GPU",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with ready=false after timeout when dispatcher never signals ready",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with ready=false when dispatcher fails with ENOENT",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with ready=true and gpu status after dispatcher emits readiness",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - isGpuAvailable returns false by default (no dispatcher started)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold after reaching crash threshold, subsequent requests go directly to per-request path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold does not reach threshold when fewer than 5 crashes occur",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold resets crash counter outside the 60s crash window",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold sets dispatcherFailed after 5 consecutive crashes within the crash window",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold uses exponential backoff delay between crash restarts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON preceded by ANSI escape codes in stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with empty arrays and nested empty objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with escaped quotes in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with negative numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with only whitespace before the object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with very long string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions throws on truncated JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases extracts JSON that follows multiple non-JSON log lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with array values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with boolean and null values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with numeric values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with unicode characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles deeply nested JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases throws on stdout that is only whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson extracts JSON from stdout with leading progress lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson extracts JSON object from clean stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson extracts JSON with special characters in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson handles multiline JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson matches greedily from first brace to last brace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws on empty stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws when JSON is malformed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws when multiple JSON objects produce invalid merged JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws when stdout contains no JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases does not invoke onProgress for JSON stderr that lacks progress field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases does not invoke onProgress for JSON stderr that lacks stage field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases handles empty stdout with successful exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases handles large stdout that arrives in many small chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases handles stderr that mixes progress JSON and regular text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases per-request stderr JSON with only progress is not collected as error output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) accumulates multiple stderr chunks into a single string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) does not invoke onProgress for JSON without progress field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) does not invoke onProgress for non-JSON stderr lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) extracts error from JSON stderr when Python writes structured errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) extracts last line from Python traceback on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) flushes partial stderr buffer on process close",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) handles chunked stdout data arriving in multiple events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) handles stderr output that is not JSON (regular log lines)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) ignores empty stderr lines during progress parsing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) ignores invalid PROCESSING_TIMEOUT_S values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) includes exit code in error when no signal and no stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) invokes onProgress callback for JSON progress lines on stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) passes script path and args to spawn correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects when spawn emits ENOENT error and fallback also fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with OOM message on exit code 137 (SIGKILL)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with error message on non-zero exit code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with segfault message on exit code 139 (SIGSEGV)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with timeout error when process exceeds timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) resolves with stdout/stderr on successful exit (code 0)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) treats SIGKILL signal as OOM error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) treats SIGSEGV signal as segfault error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) uses PROCESSING_TIMEOUT_S env var when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - shutdownDispatcher does not throw when no dispatcher is running",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize edge cases handles zero width and height in response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling propagates bridge rejection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling throws fallback error when success: false and no error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling throws when Python returns success: false with custom error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize onProgress forwarding passes onProgress callback to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization calls colorize.py with input path, output path, and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization serializes both intensity and model together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization serializes intensity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization serializes model option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing defaults method to 'unknown' when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing preserves width and height from Python response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing reads from alternate output_path when provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing reads from default output path when output_path not in response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing returns ColorizeResult with buffer, width, height, and method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization calls detect_faces.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization serializes blurRadius option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization serializes both blurRadius and sensitivity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization serializes sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing defaults faces to empty array when field absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing reads the output file for the blurred image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing returns BlurFacesResult with multiple face regions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing returns empty faces array when none detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces edge cases converts input to PNG before writing to tmpdir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces edge cases propagates sharp conversion errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces edge cases propagates writeFile errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces error handling propagates segfault error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces error handling throws fallback error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization calls detect_faces.py with detectOnly: true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization merges user sensitivity with detectOnly flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization passes 'unused' as the output path argument",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization writes input to tmpdir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces response parsing defaults faces to empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces response parsing returns DetectFacesResult without a buffer property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces temp file cleanup cleans up temp file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces temp file cleanup cleans up temp input file after failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces temp file cleanup cleans up temp input file after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces edge cases handles response with zero facesDetected and non-empty faces array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces edge cases propagates segfault errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization calls enhance_faces.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes model option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes onlyCenterFace option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes strength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing defaults faces to empty array when absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing defaults model to 'unknown' when absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing reads the enhanced output file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing returns EnhanceFacesResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing returns multiple face regions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases handles faceDetected true with missing landmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases uses timestamps in temp file names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling propagates OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks request serialization calls face_landmarks.py with input path, 'unused', and '{}'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks request serialization converts input buffer to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks request serialization writes to system tmpdir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing defaults imageHeight to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing defaults imageWidth to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing defaults landmarks to null when field is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns all landmark points when face is detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns both dimensions as 0 when both absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns imageWidth and imageHeight from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns individual landmark points correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns null landmarks when no face detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup cleans up temp input file after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup cleans up temp input file when Python returns failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup cleans up temp input file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup does not throw if unlink fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough always includes PYTHONUNBUFFERED=1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough does not include SNAPOTTER_GPU when not set in parent env",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough does not leak unrelated env vars to Python subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough does not pass MODELS_DIR (removed dead entry)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes CUDA_VISIBLE_DEVICES when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes LD_LIBRARY_PATH when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes MODELS_PATH to Python subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes SNAPOTTER_GPU to Python subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint edge cases propagates writeFile error when writing input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates bridge OOM",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates sharp conversion errors on input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization calls inpaint.py with input, mask, and output paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization converts both input and mask to PNG via sharp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization does not pass any options argument (only 3 args)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization writes both input and mask files to disk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint response parsing reads from the correct output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint response parsing returns output buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint sharp conversion errors propagates sharp error on mask conversion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases handles zero dimensions from metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval parseStdoutJson error propagation propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization calls noise_removal.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes colorNoise option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes detailPreservation option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes strength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes tier option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing defaults format to 'png' when absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing defaults tier from Python response when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing falls back to 'balanced' when both Python and options omit tier",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing falls back to options tier when Python omits it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing reads from default output path when output_path not in response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing returns NoiseRemovalResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval sharp conversion converts input to PNG and writes to outputDir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval sharp conversion propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval timeout calculation scales timeout for large images using megapixels * 120000",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval timeout calculation uses metadata from the PNG-converted buffer for timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval timeout calculation uses minimum 300000ms timeout for small images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases handles zero dimensions from metadata for timeout calculation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases passes empty options as empty JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText image downscaling caps input to 2048px using resize with inside fit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText multiline and unicode text handles multiline OCR text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText multiline and unicode text handles unicode text from CJK languages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization calls ocr.py with input path and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization resizes input to max 2048px before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes deprecated engine option for backward compatibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes enhance option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes language option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes quality option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization writes resized PNG to outputDir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns OcrResult with text and engine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns empty text string when no text detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns engine information",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns text with special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns undefined engine when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText sharp conversion errors propagates sharp conversion errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText timeout calculation scales timeout for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText timeout calculation uses minimum 600000ms timeout for small images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint edge cases handles zero extension on all sides",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates bridge OOM",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates sharp conversion error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint module exports accepts a valid OutpaintOptions object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint module exports exports outpaint as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization calls outpaint.py with input, output, and extension args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization converts input to PNG via sharp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization passes 'fast' tier value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization passes custom tier value instead of default 'balanced'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization writes input file to disk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint response parsing reads from the correct output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint response parsing returns output buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling propagates bridge segfault",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization calls red_eye_removal.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes strength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing defaults eyesCorrected to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing defaults facesDetected to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing defaults format to 'png' when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing handles multiple faces with multiple corrections",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing reads from default output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing reports zero corrections when no red eyes found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing returns RedEyeRemovalResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases handles single-step restoration pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling propagates OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization calls restore.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes colorize option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes colorizeStrength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes denoise and denoiseStrength options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes faceEnhancement option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes fidelity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes scratchRemoval option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults colorized to false when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults facesEnhanced to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults isGrayscale to false when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults scratchCoverage to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults steps to empty array when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing preserves multi-step restoration pipeline info",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing reads from default output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing returns RestorePhotoResult with all fields populated",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve accepts 75% reduction exactly (ratio = 0.25)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve always passes -preview=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve caches the caire binary path after first discovery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve cleans up temp files even when image is too large",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve cleans up temp files on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve cleans up temp files on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve does not pass -blur and -sobel when not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve does not pass -face when protectFaces is false or absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve does not pass width/height args when not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve falls back to default caire when CAIRE_PATH is not set and caire is in PATH",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve handles zero dimensions from metadata gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve includes megapixels in the too-large error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes blurRadius and sobelThreshold options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes only height when width is not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes only width when height is not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes protectFaces option as -face flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes width and height args to caire",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve pre-resizes large image for square mode with small target",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve pre-resizes when height reduction exceeds 75%",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve pre-resizes when width reduction exceeds 75%",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates readFile error when reading caire output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates sharp jpeg conversion error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates sharp metadata error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates writeFile error when writing input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve returns SeamCarveResult with output dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve scales timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve square mode uses shortest dimension for both width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve throws when caire binary is not found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve throws when image exceeds 25 MP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve timeout is always an integer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses CAIRE_PATH env var when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses default width and height when no options are specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses square mode with shortest side",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses unique UUID in temp file names to prevent collisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve writes JPEG input and reads PNG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE does NOT match data: CSS url()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches @import with bare URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches @import with double-quoted URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches @import with single-quoted URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches double-slash CSS url()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches single-slash CSS url()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE does NOT match data: URIs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE does NOT match relative paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches double-slash http img",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches double-slash https img",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches formaction attribute",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches poster attribute",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches single-slash http img (pandoc rewrite)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches single-slash https img",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches srcset attribute",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OCR dynamic timeout uses megapixel-based timeout for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through detectFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python noiseRemoval reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python removeRedEye reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python restorePhoto reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python upscale reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces calls runPythonWithProgress with detect_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces passes blur options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces returns BlurFacesResult with face regions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces returns empty faces array when none detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces throws when detection fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize calls runPythonWithProgress with colorize.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize passes intensity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize returns ColorizeResult with buffer and metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize throws when colorization fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result blurFaces surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result detectFaceLandmarks surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result noiseRemoval surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result removeBackground surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result removeRedEye surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result restorePhoto surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result upscale surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields blurFaces defaults faces to empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields colorize defaults method to unknown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields detectFaceLandmarks defaults imageWidth and imageHeight to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields enhanceFaces defaults faces to empty array and model to unknown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields noiseRemoval defaults format and tier from options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields removeRedEye defaults format to png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks calls runPythonWithProgress with face_landmarks.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks cleans up temp file even on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks cleans up temp file in finally block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks converts input buffer to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks returns FaceLandmarksResult with all landmark points",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks returns null landmarks when no face detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces calls runPythonWithProgress with detectOnly option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces cleans up temp input file after failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces cleans up temp input file after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces returns DetectFacesResult without buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces calls runPythonWithProgress with enhance_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces defaults model to unknown when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces passes enhancement options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces returns EnhanceFacesResult with model info",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces throws when enhancement fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates OOM errors through tool functions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates bridge rejection through tool functions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates segfault through detectFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through removeBackground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) calls runPythonWithProgress with ocr.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) passes quality and language options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) returns OcrResult with text and engine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) throws when OCR fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) uses fallback error message when no error string provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent blurFaces uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent colorize uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent detectFaceLandmarks uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent detectFaces uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent enhanceFaces uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent noiseRemoval uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent removeBackground uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent removeRedEye uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent restorePhoto uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent upscale uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint calls runPythonWithProgress with inpaint.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint returns the output buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint throws when inpainting fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint uses fallback error message when no error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint writes both input and mask files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval calls runPythonWithProgress with noise_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval defaults tier from options when Python omits it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval passes strength and tier options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval returns NoiseRemovalResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding blurFaces forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding colorize forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding detectFaceLandmarks forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding detectFaces forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding enhanceFaces forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding inpaint forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding noiseRemoval forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding removeRedEye forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding restorePhoto forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding upscale forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization blurFaces passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization detectFaceLandmarks passes fixed unused and empty options args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization detectFaces merges user options with detectOnly flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization noiseRemoval passes all option fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization removeBackground passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization removeRedEye passes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization restorePhoto passes all option fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization upscale passes all option fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization upscale passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through detectFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through extractText",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through removeBackground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run blurFaces propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run colorize propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run enhanceFaces propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run inpaint propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run noiseRemoval propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run removeRedEye propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run restorePhoto propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run upscale propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground calls runPythonWithProgress with remove_bg.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground cleans up temp files on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground cleans up temp files on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground dynamic timeout uses megapixel-based timeout for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground passes onProgress callback to runPythonWithProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground passes options as JSON string argument",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground returns the output buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground throws when Python returns success: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground uses higher timeout for birefnet models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye calls runPythonWithProgress with red_eye_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye defaults facesDetected and eyesCorrected to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye passes sensitivity and strength options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye returns RedEyeRemovalResult with correction counts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto calls runPythonWithProgress with restore.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto defaults optional fields when Python omits them",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto passes restoration options including scratch and colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto returns RestorePhotoResult with all metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through removeBackground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > temp file cleanup on bridge rejection detectFaceLandmarks cleans up temp file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > temp file cleanup on bridge rejection detectFaces cleans up temp file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > temp file cleanup on bridge rejection removeBackground cleans up when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale calls runPythonWithProgress with upscale.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale defaults method and format when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale passes scale and model options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale reads from output_path when Python provides alternate path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale returns UpscaleResult with dimensions and method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale throws when Python returns success: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run blurFaces propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run colorize propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run detectFaceLandmarks propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run detectFaces propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run enhanceFaces propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run inpaint propagates writeFile error on input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run noiseRemoval propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run removeRedEye propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run restorePhoto propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run upscale propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing defaults language to en when missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing defaults text to empty string when missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing returns empty segments when segments field is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing returns empty segments when segments is not an array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing returns empty segments when segments is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling throws when Python returns an error field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization always includes task: transcribe",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization calls transcribe.py with input path and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization serializes a specific language",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization uses 30 minute timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio response parsing returns detected language",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio response parsing returns language, text, and segments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping defaults missing start/end to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping defaults missing text to empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping maps python start/end to startS/endS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping trims segment text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling propagates OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization calls upscale.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes denoise option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes faceEnhance option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes model option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes scale option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing defaults format to 'png' when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing defaults method to 'unknown' when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing reads from default output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing returns UpscaleResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing returns correct dimensions for 4x upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation defaults scale to 2 when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation handles zero dimensions from metadata gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation passes a timeout to runPythonWithProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation provides generous timeout for CPU upscale at high scale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation scales timeout with image megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation scales timeout with scale factor squared",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation uses minimum timeout of 600s for small images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation uses shorter timeout when GPU is available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> accept immediately -> never show again",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> decline immediately -> never show again",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> maybe later -> remind time NOT yet passed -> stay hidden",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> maybe later -> remind time passes -> show again -> accept",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > isConsentEnabled edge cases returns false when analyticsEnabled is false (explicitly declined)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > isConsentEnabled edge cases returns false when analyticsEnabled is null (never decided)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > isConsentEnabled edge cases returns false when server disabled even if user opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns false when remindAt is 1ms in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns false when server is disabled regardless of remindAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns true after 'Maybe later' and 7 days have passed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns true when remindAt is exactly equal to Date.now()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns true when remindAt is set but consentShownAt is null (defensive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > isConsentEnabled returns false when server disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > isConsentEnabled returns false when user has not consented",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > isConsentEnabled returns true when user opted in and server enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when remind-at is in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when server has analytics disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when user already opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when user explicitly declined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns true for a fresh user who has never been asked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns true when remind-at has passed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS AI_BUNDLE_ACTION has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS PIPELINE_EXECUTED has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS SEARCH has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS TOOL_USED has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS all event values are strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS all values are unique (no duplicate event names)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS all values follow snake_case convention",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS contains the expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS has exactly 4 event keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS is frozen (as const prevents mutation)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type accepts a config with analytics disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type accepts a fully populated config object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type accepts fractional sample rates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type has exactly the expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts all-null state (fresh user)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts declined state (analyticsEnabled = false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts deferred state (maybe later with remindAt set)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts mixed state with analyticsEnabled true and remindAt set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts opted-in state (analyticsEnabled = true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type has exactly the expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery ENOENT error permanently disables dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery applies exponential backoff between crash restarts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery increments crash count on non-zero close",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery marks dispatcher as permanently failed after max consecutive crashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery rejects all pending requests on dispatcher error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery rejects pending requests when dispatcher closes unexpectedly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery retries with per-request mode after dispatcher crash during request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - getDispatcherStatus reports not running initially",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - getDispatcherStatus reports running after init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher is idempotent when already ready",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher returns ready:false on timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher returns ready:false when dispatcher failed permanently",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher spawns python process with dispatcher.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - isGpuAvailable returns false when dispatcher has not started",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - isGpuAvailable returns false when dispatcher reports no GPU",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - isGpuAvailable returns true when dispatcher reports GPU",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson extracts JSON object from the end of stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson handles nested JSON objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson handles stdout that is only JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson throws on empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson throws when no JSON object is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing collects non-JSON stderr as error context for failed requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing ignores non-JSON stderr lines (logs them, does not crash)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing readiness signal sets GPU status",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing routes JSON progress events from stderr to onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) clears timeout on successful response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) extracts error from JSON stdout on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) handles concurrent requests matched by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) rejects on non-zero exit code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) rejects with timeout error and kills dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) resolves with stdout and stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) returns OOM message for exit code 137",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) returns segfault message for exit code 139",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) routes progress events to the onProgress callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) sends JSON-lines request to dispatcher stdin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) strips .py from script name in dispatcher request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) uses PROCESSING_TIMEOUT_S env var when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) falls back to per-request mode when dispatcher is not available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request SIGKILL maps to OOM message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request SIGSEGV maps to segfault message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request fallback tries system python3 on ENOENT",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request mode parses progress events on stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request mode rejects on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request mode rejects on timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - shutdownDispatcher is safe to call when no dispatcher is running",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - shutdownDispatcher kills the dispatcher process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - shutdownDispatcher marks status as not running after shutdown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - stdout buffering (partial JSON lines) handles response split across multiple chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces calls runPythonWithProgress with detect_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces defaults faces to empty array when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces passes blur options in args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces returns buffer, facesDetected, and faces array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize calls runPythonWithProgress with colorize.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize defaults method to 'unknown' when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize forwards onProgress callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize passes options as JSON in args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize returns structured result with buffer, dimensions, and method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools accept default empty options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools call parseStdoutJson on the result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools convert input to PNG via sharp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools propagate runPythonWithProgress errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks calls face_landmarks.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks cleans up temp file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks converts input buffer to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks defaults dimensions to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks passes 'unused' as output path and empty JSON options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks returns landmarks result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks returns null landmarks when no face found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces cleans up temp file even on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces cleans up temp input file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces merges sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces passes 'unused' as outputPath arg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces passes detectOnly: true in options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces returns facesDetected and faces without a buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces calls enhance_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces defaults model to 'unknown'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces passes all options through",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces returns result with buffer, facesDetected, faces, and model",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces throws on failure with specific error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) calls ocr.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) resizes image to max 2048px",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) returns text and engine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint calls inpaint.py with input, mask, and output paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint converts both input and mask to PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint returns the output buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint writes both input and mask files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval calls noise_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval defaults format and tier",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval prefers tier from result over options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval returns structured result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground calls runPythonWithProgress with remove_bg.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground cleans up temp files even on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground cleans up temp files in finally block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground does not retry OOM if already using u2net",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground downscales large images and upscales mask back",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground passes onProgress callback through to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground passes options as JSON in args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground provides fallback error message when error field is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground retries with u2net fallback on OOM error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground returns the output file buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground throws when Python reports failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground uses longer base timeout for birefnet model",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground writes input as PNG before processing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye calls red_eye_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye defaults optional fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye returns structured result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto calls restore.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto defaults optional result fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto returns full restoration result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve cleans up temp files even on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve cleans up temp files in finally block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -face flag when protectFaces is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -preview=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -square flag with shortest dimension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -width and -height flags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes blur and sobel options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve pre-resizes when reduction exceeds 75% instead of rejecting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve rejects images larger than 25 MP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve returns buffer with dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve uses original dimensions when width/height not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve writes input as JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale calculates higher timeout for CPU mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale calculates timeout with GPU rate when GPU available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale calls upscale.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale defaults method and format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale defaults scale to 2 for timeout calculation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale returns structured result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks auth_anomaly condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks backup_never_run condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks backup_stale condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks disk_space_low condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks license_expiring condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions only delivers to enabled webhooks of type alerts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator module exports evaluateAlerts is the only named export",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator module exports exports evaluateAlerts as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds auth anomaly alert reports windowMinutes of 5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds auth anomaly threshold is 20 failures",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds auth anomaly window is 5 minutes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds backup staleness alert reports threshold of 48",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds backup staleness threshold is 48 hours",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds disk space alert reports threshold of 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds disk space threshold is 1 GB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds license expiry warning threshold is 30 days",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED defaults to false (no-phone-home)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED rejects non-enum values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED='false' transforms to boolean false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED='true' transforms to boolean true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE < 0 fails validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE > 1 fails validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE defaults to 1.0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=0 is valid (no sampling)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=0.5 parses correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=1 is valid (full sampling)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=2 fails validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_API_KEY can be overridden with a custom value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_API_KEY can be set to empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_API_KEY defaults to empty string (no baked key)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_HOST can be overridden",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_HOST defaults to the PostHog US endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation SENTRY_DSN can be overridden with a custom value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation SENTRY_DSN can be set to empty string to disable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation SENTRY_DSN defaults to empty string (no baked DSN)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN does NOT match non-image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN matches all common image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN matches extensions in the middle of paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN replaces extensions with [REDACTED]",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_PATH_PATTERN does NOT match safe paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_PATH_PATTERN matches workspace and data paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_PATH_PATTERN replaces paths with [REDACTED]",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant captureException consent gating (code review) captureException checks isRequestOptedIn before sending to Sentry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant captureException consent gating (code review) error handler passes request to captureException",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant initAnalytics gating (code review) initAnalytics bails when ANALYTICS_ENABLED is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant initAnalytics gating (code review) shutdownAnalytics nulls both clients",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant isUserOptedIn logic (code review) checks ANALYTICS_ENABLED before user DB lookup",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant isUserOptedIn logic (code review) returns false for anonymous user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant shouldSample logic rate 0.0 always rejects (Math.random() < 0.0 is always false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant shouldSample logic rate 1.0 always accepts (checked before Math.random call)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant shouldSample logic rate between 0 and 1 produces a mix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant trackEvent gating (code review) trackEvent checks posthogClient, consent, and sampling",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant trackEvent gating (code review) trackEvent wraps capture in try-catch (never throws)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic enabled=false sets analyticsEnabled to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic enabled=true sets analyticsEnabled to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic missing enabled defaults to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic remindLater branch sets analyticsEnabled to null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic remindLater sets remind-at 7 days in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts both enabled and remindLater together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts enabled: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts enabled: true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts remindLater: true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema rejects enabled as number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema rejects enabled as string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema rejects remindLater as string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema strips unknown properties",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException captures when sentry is initialized and no request provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException captures when sentry is initialized and request user is opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException does nothing when request user is not opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException does nothing when sentryModule is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics does nothing when ANALYTICS_ENABLED is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics does nothing when ANALYTICS_ENABLED is true but POSTHOG_API_KEY is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics initializes posthog when enabled with API key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics initializes sentry when SENTRY_DSN is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > shutdownAnalytics closes sentry when initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > shutdownAnalytics resolves without error when no clients initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > shutdownAnalytics shuts down posthog when initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent allows anonymous users with x-analytics-consent header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent captures event when all conditions are met",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does not throw when capture throws internally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when ANALYTICS_ENABLED is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when ANALYTICS_SAMPLE_RATE is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when posthogClient is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when request user is not opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent rejects anonymous users without consent header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent uses instance ID from DB when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false anonymous admin can pass requirePermission('settings:write')",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false anonymous admin has all admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false anonymous admin has settings:write permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false assigns admin role to anonymous user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > session endpoint when AUTH_ENABLED=false GET /api/auth/session returns admin role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > session endpoint when AUTH_ENABLED=false GET /api/auth/session returns null expiresAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic API key format raw key has correct length (si_ + 96 hex chars = 99)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic API key format raw key starts with si_ prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts all fields together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts empty object (all fields optional)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts empty permissions array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts name exactly 100 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts permissions array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts valid expiresAt date string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts valid name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation rejects name longer than 100 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic default name behavior uses default name when name is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic default name behavior uses default name when name is whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic default name behavior uses provided name when not empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation accepts date in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation rejects date in the past",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation rejects empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation rejects invalid date string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic key prefix computation always starts with si_ prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic key prefix computation handles short keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic key prefix computation returns first 10 characters of the key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping fails when requesting permissions user does not have",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping fails when user has no permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping passes when all requested permissions are in user permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping passes with empty requested permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping returns all invalid permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic response serialization formats key list entry correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic response serialization handles null permissions and dates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor already matching ratio returns same-ish dims (both even)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor odd-dim source gets even output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor small source into 4:3",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor tall source into wide ratio (portrait into 16:9)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor wide source into tall ratio (landscape into 9:16)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audio-output.test.ts > audioOutputFor falls back to mp3 for decode-only formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audio-output.test.ts > audioOutputFor maps .aac input to .m4a output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audio-output.test.ts > audioOutputFor normalises uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine COMPLETE is terminal (no outgoing transition)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine covers all non-terminal states",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine defines exactly 5 states",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine follows the exact sequence PENDING->EXPORTING->EXPORTED->PURGING->COMPLETE",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine has exactly 4 transitions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine has no cycles in the transition graph",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine state transitions are valid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine visits each state exactly once in the transition chain",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType API_KEY_CREATED -> api_key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType API_KEY_DELETED -> api_key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType FILE_DELETED -> file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType FILE_UPLOADED -> file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType LOGIN_FAILED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType LOGIN_SUCCESS -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType LOGOUT -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType PASSWORD_CHANGED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType PASSWORD_RESET -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType ROLE_CREATED -> role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType ROLE_DELETED -> role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType ROLE_UPDATED -> role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType SETTINGS_UPDATED -> setting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType USER_CREATED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType USER_DELETED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType USER_UPDATED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId falls back to adminId when userId is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId prefers userId over adminId when both are present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId returns null for an empty details object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId returns null when neither userId nor adminId is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId returns userId when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername falls back to newUsername when username is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername prefers username over newUsername when both are present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername returns \"system\" for an empty details object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername returns \"system\" when neither username nor newUsername is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername returns username when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes deeply nested objects (3+ levels)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes mixed types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes with null values included",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes with sorted keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity computes and verifies HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity computes deterministic HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity detects tampering",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity key order does not matter with 5+ keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity key ordering does not affect HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity produces different HMACs for different keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity serializes undefined values as null in canonicalization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity verifyHmac returns false for completely wrong HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity verifyHmac returns false for empty HMAC string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity verifyHmac returns false for malformed HMAC string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog extracts actorId from userId field first",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog extracts username from details",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog falls back to adminId when userId is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog handles empty details object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog includes all detail fields in the log output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog inserts a record into the database",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog logs different event types correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog logs to the structured logger with audit flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog serializes details as JSON for DB storage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog survives DB insert failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic entry serialization handles null details",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic entry serialization parses JSON details string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic entry serialization serializes a complete entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing adds action filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing adds from date filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing adds to date filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing handles all filters together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing ignores invalid from date",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing ignores invalid to date",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing keeps valid filters even when one is invalid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing returns empty conditions for no filters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing calculates correct offset for page 2 with limit 25",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing calculates correct offset for page 5 with limit 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps limit to maximum 100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps limit to minimum 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps negative page to 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps page to minimum 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing defaults to page 1, limit 50",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing handles non-numeric limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing handles non-numeric page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing parses valid page and limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput does not truncate a string at exactly 200 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput preserves safe characters unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput returns (empty) for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput returns (empty) when only special characters remain",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips all dangerous characters in one pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips ampersand",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips angle brackets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips double quotes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips single quotes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput truncates a 201-character string to 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput truncates long strings after stripping characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix is deterministic (same input gives same output)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix produces different prefixes for different inputs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix returns a 16-character hex string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix works with various key formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword generates different salts on each call",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword produces a 128-character hex hash (64 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword produces a 64-character hex salt (32 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword produces a hash that can be verified back",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword returns a string in salt:hash format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword handles unicode passwords",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for a malformed stored string (no colon)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for a truncated hash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for a wrong password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for an empty stored string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns true for the correct password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > computeKeyPrefix (additional coverage) prefix for binary-like input still works",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > computeKeyPrefix (additional coverage) returns consistent 16-char prefix for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > getAuthUser returns null when request has no user property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > getAuthUser returns null when user is undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > getAuthUser returns the user when request has user property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > hashPassword (additional coverage) different passwords produce different hashes even with same salt length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > hashPassword (additional coverage) handles empty string password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > hashPassword (additional coverage) handles very long passwords",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats admin routes as private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats auth routes as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats docs as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats download routes as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats health endpoint as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats job progress as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats meme templates as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats non-API routes as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats tool endpoints as private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns null and sends 401 when not authenticated at all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns null and sends 403 when role is not admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns null for editor role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns the user when role is admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAuth returns null and sends 401 when not authenticated",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAuth returns the user when authenticated",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength accepts password with special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength accepts valid password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password shorter than 8 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password without lowercase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password without number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password without uppercase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername accepts exactly 3 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername accepts exactly 50 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername accepts valid usernames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username longer than 50 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username shorter than 3 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username with special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > verifyPassword (additional coverage) handles special characters in password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > verifyPassword (additional coverage) returns false for completely empty input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > verifyPassword (additional coverage) returns false when stored has colon but empty salt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient handles orientation 2 (horizontal flip)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer for corrupted/invalid input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer unchanged when no EXIF orientation is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer unchanged when orientation is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient rotates image when orientation is 3 (180)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient rotates image when orientation is 6 (90 CW)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient rotates image when orientation is 8 (270 CW)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient strips orientation tag after rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > blurBackground modifies the background corner relative to pure blue",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > blurBackground preserves the subject center pixel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > blurBackground produces an image of the same dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > compositeOnColor fills transparent corners with the background color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > compositeOnColor preserves the subject pixel in the center",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > compositeOnColor produces a fully opaque image (no alpha)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix adds tool suffix when filename unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix handles filenames with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix handles filenames without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix preserves filename when tool changed it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch progress status determination status is 'completed' when no files fail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch progress status determination status is 'completed' when some files succeed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch progress status determination status is 'failed' when all files fail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement allows any count when limit is 0 (unlimited)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement allows files within the limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement allows when count equals limit exactly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement rejects files exceeding the limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement rejects when count equals limit + 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) builds correct map for unique filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) deduplicates conflicting filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) returns empty map when all files failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) skips null entries (failed files)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools does not skip preprocess for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools does not skip preprocess for resize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools skips preprocess for edit-metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools skips preprocess for strip-metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow higher opacity produces more shadow alpha than lower opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow opacity 0 produces no visible shadow (alpha bytes near zero in shadow area)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow opacity 100 produces visible shadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow output dimensions match input dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow returns a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow throws when buffer has no readable dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects blurEnabled with blur bgType blurs the original background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects blurEnabled with transparent bgType blurs the original background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects color backgroundType composites on solid color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects combined shadow + color background works",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects defaults backgroundType to transparent when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects defaults blurIntensity to 50 when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects gradient backgroundType composites on gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects image backgroundType composites on provided image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects image backgroundType with blurEnabled blurs the background image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects shadowEnabled with opacity adds shadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects shadowOpacity 0 does not add shadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects transparent backgroundType with no effects returns subject approximately unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground clamps intensity above 100 to 100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground clamps intensity below 0 to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground different intensity values produce different output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground intensity 0 produces minimal blur (sigma ~1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground intensity 100 produces heavy blur (sigma 50)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground output dimensions match subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground returns a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor accepts hex color without hash prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor composites subject onto solid color background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor output dimensions match subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor output is a valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor throws on invalid buffer with no dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage background is resized to cover subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage composites subject onto background image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage output dimensions match subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage output is a valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage throws on invalid subject buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground creates correct size output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground default angle is 180 (top to bottom)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground different angles produce different pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground different colors produce different output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground output is a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context extraction creates root span when _otel is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context extraction extracts parent context from _otel carrier",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context injection injects _otel with traceparent when a span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context injection injects nothing when no SDK is registered",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) computes deleteAfter as retentionHours converted to milliseconds from now",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) falls back to FILE_MAX_AGE_HOURS when team has no retentionHours",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) function is defined as async",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) gates on team_retention_overrides enterprise feature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) is called fire-and-forget from enqueueToolJob",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) looks up the user's team from the users table",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) reads retentionHours from the teams table",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) returns early when feature is not enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) returns early when user has no team",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) updates the job row with the computed deleteAfter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports does not export computeDeleteAfter (private function)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports closeFlowProducer as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports closeQueueEvents as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports enqueueToolJob as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports getFlowProducer as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports waitForJob as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp allows OpenStreetMap tiles in img-src for app pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog assets (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog assets (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog ingest (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog ingest (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes Sentry ingest (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes Sentry ingest (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains keeps self (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains keeps self (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows data: URIs for client-side blob operations (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows data: URIs for client-side blob operations (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp font-src allows Scalar docs fonts app pages do not include Scalar fonts origin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp font-src allows Scalar docs fonts docs pages include Scalar fonts origin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp includes frame-ancestors none for app pages but not docs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader app pages do not allow unsafe-inline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader docs pages allow unsafe-inline for Scalar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader includes PostHog assets origin (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader includes PostHog assets origin (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt groups endpoints by tag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt handles spec with no description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes parameters section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes request body section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes responses section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes the description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes title with version",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt marks auth-required endpoints",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt marks public endpoints",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt puts untagged endpoints under 'Other'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt handles spec with empty paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt handles spec with no tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt includes authentication section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt includes the Docs section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt lists API sections with endpoint counts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt starts with the API title",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns false for non-empty security array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns false for null-like security",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns false for undefined security",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns true for empty security array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions exact counts for built-in roles admin has exactly 17 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions exact counts for built-in roles editor has exactly 7 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions exact counts for built-in roles user has exactly 5 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names case-sensitive: ADMIN (uppercase) returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names case-sensitive: Admin (capitalized) returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names case-sensitive: User (capitalized) returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names empty string returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names null coerced to string returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names undefined coerced to string returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names whitespace-padded role name returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions role permission subsets editor permissions are a subset of admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions role permission subsets user permissions are a subset of admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions role permission subsets user permissions are a subset of editor permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key cannot grant permissions the role lacks editor with apiKeyPermissions including settings:write still denied",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key cannot grant permissions the role lacks unknown role gains nothing even with full apiKeyPermissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key cannot grant permissions the role lacks user with apiKeyPermissions including users:manage still denied",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key scoping restricts permissions admin scoped to tools:use can only use tools:use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key scoping restricts permissions editor scoped to files:own and tools:use only has those",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key scoping restricts permissions user scoped to settings:read only has that",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission empty apiKeyPermissions blocks everything admin with empty array has no effective permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission empty apiKeyPermissions blocks everything user with empty array has no effective permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission undefined apiKeyPermissions inherits all role permissions admin without apiKeyPermissions gets full admin access",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission undefined apiKeyPermissions inherits all role permissions user without apiKeyPermissions gets full user access",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) admin can use any permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) editor can use all editor permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) editor cannot use admin-only permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) unknown role has no effective permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) user can use all user permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) user cannot use editor or admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for a non-existent permission string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for an empty string permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for both unknown role and unknown permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for unknown role even with valid permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt passes through non-encrypted values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt returns null for $ENC$ with corrupted ciphertext",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt returns null for $ENC$ with truncated data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt returns null for wrong key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt tries previous key on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption deriveAuditHmacKey is deterministic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption deriveAuditHmacKey produces a 32-byte buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption deriveAuditHmacKey produces different keys for different master keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts a value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts a very long input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts an empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts special characters (newlines, tabs, null bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts unicode and emoji characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption isEncrypted returns false for plaintext",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption isEncrypted returns true for $ENC$ prefix with invalid base64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption produces different ciphertext for same plaintext (random IV)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption two encryptions of the same plaintext decrypt to the same value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags enterprise plan includes everything",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags has exactly 19 features total",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags includes all Phase 1 flags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags includes all Phase 2-4 flags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags includes distributed_tracing in enterprise plan only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags team plan does NOT include compliance features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags team plan includes operational features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock mocks feature enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock mocks no enterprise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock returns license payload with correct shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock returns null license when no enterprise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors formats single issue with path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors formats single issue without path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors joins multiple issues with semicolons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors joins nested paths with dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors returns empty string for empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths handles pipeline step error wrapping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths leaves safe messages untouched",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths leaves timeout messages untouched",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /app container paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /data/ai/venv Python traceback paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /home paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /opt paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /tmp scratch paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /workspace paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips multiple paths in one message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs adds keywords in add mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs allows field names with colons and hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs allows field names with underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs applies dateShift without explicit sign as positive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs applies negative dateShift",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs applies positive dateShift",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs artist takes precedence over author",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs clearGps takes priority over GPS coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs clears GPS data with clearGps flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs clears existing keywords before setting in set mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does not add keywords args when keywords array is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does not set GPS when only latitude is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does not set GPS when only longitude is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does nothing for empty fieldsToRemove array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs filters out blank and whitespace-only keywords",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles complex settings with multiple fields combined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles negative GPS altitude (below sea level)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles zero GPS altitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles zero GPS coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs imageDescription takes precedence over title for ImageDescription tag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs includes GPS altitude when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs rejects unsafe field names from removal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs removes safe field names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs returns empty array for empty settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC city",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC country",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC headline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC title (ObjectName)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets all dates to a specific value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets copyright field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets dateTime as ModifyDate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets dateTimeOriginal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets negative GPS latitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets positive GPS coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets software field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs trims keyword whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses artist field when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses author as fallback when artist is not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses imageDescription when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses title as fallback for imageDescription",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns correct filename and fileSize for JPEG with EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns keywords array (may be empty)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns non-null exif object for JPEG with EXIF data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns null for GPS when no GPS data present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata works with PNG which has no EXIF -- returns null for exif, iptc, xmp, gps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata empty tags array returns buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata returns a valid image buffer that Sharp can read",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata writing -Artist=TestArtist then inspecting shows the artist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata writing multiple tags works",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > external auth resolver module exports findUniqueUsername",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > external auth resolver module exports resolveExternalUser",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > external auth resolver module exports sanitizeUsername",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername appends _2 when the base username is taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername appends _3 when both base and _2 are taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername resolves collisions through the loop until a free slot is found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername returns the base username when it is not taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername allows input that starts with numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername collapses multiple underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername does not truncate input that is exactly 46 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles email addresses as input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles empty-after-strip edge case",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles numeric-only input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles pure whitespace input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles single character input by padding to 3",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername lowercases input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername pads short usernames to 3 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername passes through admin as a valid username",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername preserves consecutive dots and hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername preserves dots and hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername replaces non-alphanumeric characters with underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername replaces unicode characters with underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername strips leading @ from input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername strips leading and trailing separators",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername truncates input that is exactly 47 characters to 46",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername truncates to 46 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize handles deeply nested directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize recurses into subdirectories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize returns 0 for empty directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize returns 0 for non-existent directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize returns correct size for a single file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize sums sizes of multiple files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest handles manifest with empty bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest handles manifest with models without paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest handles manifest with multiple bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest parses valid manifest JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest returns null for invalid JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest returns null for non-existent file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > shared model path deduplication handles bundle with no models property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > shared model path deduplication identifies models shared between bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl decodes percent-encoded characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl extracts filename from URL with query string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl extracts filename from simple URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl handles deeply nested path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl handles filename at exactly 255 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl handles filename with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for URL without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for empty path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for filename over 255 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for invalid URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for root URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType handles uppercase extensions via toLowerCase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .jpg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .ttf to font/ttf",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType returns undefined for filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType returns undefined for unknown extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType uses the last dot for extension detection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName adds each unique name to the used set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName appends _1 for first collision",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName appends _2 when _1 is also taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName handles filename with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName handles filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName handles multiple collisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName returns name unchanged if not in used set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns false for filename with dots that are not traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns false for safe filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for ..",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for backslash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for embedded ..",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for forward slash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for null byte",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > deleteStoredFile deletes existing file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > deleteStoredFile does not throw for non-existent file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > ensureStorageDir creates directory if not exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > ensureStorageDir is idempotent (second call does not throw)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > getStoredFilePath returns correct joined path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile accepts known image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile creates storage directory on first call",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile lowercases extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile returns different filenames for same input (UUID-based)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile sanitizes dangerous extensions to .bin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile saves buffer and returns UUID-based filename with correct extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile uses .bin for files with no extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions deleteThumbnail does not throw for non-existent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions deleteThumbnail removes the file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions getCachedThumbnail reads back saved thumbnail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions getCachedThumbnail returns null for non-existent thumbnail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions saveThumbnail creates .thumbs subdirectory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions saveThumbnail writes to correct path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for double dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for four dots (.. removal leaves empty)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for single dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for triple dots (.. removal leaves .)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles emoji filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles filename with only unknown extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles filenames with dashes and underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles filenames with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles no extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles only null bytes falling back to upload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles trailing slash in path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles unicode filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles unknown extensions without truncation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename passes through a simple filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename preserves dotfiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename recognizes all safe image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename recognizes safe extensions across all modalities",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename removes .. sequences",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename removes embedded .. sequences in filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename removes null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename strips directory path and returns basename only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename strips relative directory path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates after first safe image extension (photo.png.php)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates after first safe image extension (report.jpg.exe)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates after first safe image extension with multiple unsafe parts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates long filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates long unicode filenames correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates very long filenames over 200 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic extension extraction from filename extracts extension from simple filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic extension extraction from filename handles filename with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic extension extraction from filename handles filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic filename encoding for Content-Disposition encodes special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic filename encoding for Content-Disposition encodes unicode characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic filename encoding for Content-Disposition preserves simple filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps HEIC/HEIF formats correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps RAW formats correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps avif to image/avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps bmp to image/bmp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps gif to image/gif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps ico to image/x-icon",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps jpg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps json to application/json",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps jxl to image/jxl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps pdf to application/pdf",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps specialty formats correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps svg to image/svg+xml",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps tif to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps tiff to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps zip to application/zip",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType returns application/octet-stream for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType returns application/octet-stream for unknown extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows alphanumeric-only segment",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows clean UUID-like segment",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows clean filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows hyphens and underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows single dot in filename (extension)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects Windows-style path traversal (..\\)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects backslash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects double dot traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects double dot with prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects forward slash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects null byte",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects relative path traversal (../)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - EPS size limit rejects EPS files over 50MB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - QOI decoder decoded QOI produces a buffer sharp can process further",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - QOI decoder decodes QOI fixture to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - QOI decoder round-trips PNG -> QOI -> PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification bmp: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification dds: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification dpx: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification exr: output has non-zero dimensions (requires delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification fits: output has non-zero dimensions (requires delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification hdr: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification ico: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification jp2: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification jxl: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification psd: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification tga: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes BMP to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes CUR using ICO decoder to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes DDS to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes DPX to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes EXR to valid PNG (requires EXR delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes FITS to valid PNG (requires FITS delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes HDR to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes ICO to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes JP2 to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes JXL to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PBM to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PGM to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PPM to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PSD to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes TGA to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for avif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for empty format string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for gif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for png format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for tiff format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for unknown/native formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for webp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for avif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for gif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for jpeg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for png format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for svg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for webp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for bmp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for cur format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for dds format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for dpx format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for eps format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for exr format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for fits format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for hdr format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for ico format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for jp2 format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for jxl format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for pbm format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for pgm format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for ppm format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for psd format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for qoi format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for raw format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for tga format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeBmp encodes JPEG input to BMP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeBmp encodes a PNG buffer to BMP format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeBmp produces a BMP with correct dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeIco encodes a PNG buffer to ICO format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeIco preserves small images without enlargement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeIco resizes large images to fit within 256x256",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeJp2 accepts optional quality parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeJp2 encodes a PNG buffer to JP2 format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeJp2 produces valid output at different quality levels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeQoi encodes JPEG input to QOI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeQoi encodes a PNG buffer to QOI format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeQoi encodes fixture image to QOI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic cleans up temp files after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic decodes sample.heic to a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic decodes sample.heif to a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic preserves image dimensions after decoding",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic rejects an empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic rejects invalid/corrupt data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat decodes a HEIC buffer to PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat detects heic brand in ftyp box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat detects mif1 brand in ftyp box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat does not treat a short buffer as HEIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat passes through a JPEG buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat passes through a PNG buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat passes through a WebP buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist EXEMPT_PATHS includes IdP callback paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist EXEMPT_PATHS includes all expected infrastructure paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList builds a list from IPv4 CIDRs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList builds a list from IPv6 CIDRs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList builds a list from bare IPv4 addresses",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList returns null for an empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList skips invalid entries without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath does NOT exempt regular API paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath does NOT exempt the root path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts OIDC callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts SAML callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts SCIM paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts health endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts metrics endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts readyz endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows /0 to match everything",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows /32 single-host CIDR",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows 127.0.0.1 when loopback is listed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows an IP inside a CIDR range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows an IPv6 address inside a subnet",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows an exact single-address match",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed denies an IP outside all ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed handles IPv4-mapped IPv6 addresses (::ffff:x.x.x.x)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed handles multiple CIDR ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid IPv4 CIDR",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid IPv6 CIDR",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid bare IPv4 address",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid bare IPv6 address",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects IPv4 prefix > 32",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects IPv6 prefix > 128",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects invalid strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects negative prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES contains all expected feature strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES contains exactly 19 features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES every entry is a non-empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES has no duplicate entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES enterprise plan has all 19 features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES enterprise plan is a superset of team plan",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES enterprise plan references the same array as ENTERPRISE_FEATURES",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES team plan contains the expected features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES team plan does not include compliance-only features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES team plan has exactly 8 features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false and license:null when called with an invalid key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false and license:null when called with empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false and license:null when called with undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false for a key with wrong signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise sets activeLicense to null for invalid keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (direct, no mock) returns false for all features after initEnterprise with invalid key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (direct, no mock) returns false for all features after initEnterprise with undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (direct, no mock) returns false for all features when initEnterprise was not called",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns correct results when switching from active to no license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns false for features NOT in the active license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns false when no license is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns true for features in the active license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for input without a dot separator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for invalid base64url payload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for payload with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for undefined input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for valid JSON payload with wrong signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for valid base64url that is not JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null when dot is at position 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/log-trace-mixin.test.ts > traceMixin returns empty object when no span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/log-trace-mixin.test.ts > traceMixin returns traceId, spanId, traceFlags when span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit respects maxFontSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit returns min size for tiny box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit returns size within bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit returns smaller size for longer text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > loadFont caches across calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > loadFont falls back to anton for unknown fonts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > loadFont loads anton font",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > measureText returns 0 for empty text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > measureText returns positive width for non-empty text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > measureText scales with font size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg applies allCaps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg has correct fill/stroke attributes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg has paint-order=\"stroke fill\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg renders differently with different fonts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg returns valid SVG with <path> elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg skips empty text boxes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg uses custom fontSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText handles multiple spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText handles single word exceeding width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText returns [\"\"] for empty text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText returns single line when text fits",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText wraps into multiple lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp generates a TOTP with a valid secret",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp generates a valid TOTP URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp generates unique secrets across calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp uses a provided secret when given",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA hashRecoveryCodes handles a single code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA hashRecoveryCodes hashes recovery codes into comma-separated SHA-256 hashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA hashRecoveryCodes produces deterministic hashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns false for admins_only policy when role is not admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns false for optional policy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns true for admins_only policy when role is admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns true for required policy regardless of role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode consumes a recovery code on use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode preserves other codes when one is consumed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode rejects an invalid recovery code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode returns empty remaining when last code is used",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode verifies a valid recovery code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode accepts codes within the 1-step window",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode rejects a code from a different secret",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode rejects an empty code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode rejects an incorrect TOTP code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode verifies a correct TOTP code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/object-storage.test.ts > object-storage (local backend) rejects path traversal in keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/object-storage.test.ts > object-storage (local backend) round-trips buffers and streams with size and listing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat accepts quality override for PNG without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat detects JPEG input and returns jpeg config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat detects PNG input and returns png config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat detects WebP input and returns webp config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat falls back to PNG for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat respects quality override for lossy formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange deduplicates overlapping ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange deduplicates repeated pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles a range of one page (start equals end)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles range ending at totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles ranges with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles single page equal to totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses a simple range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses a single page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses mixed single pages and ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses multiple ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses multiple single pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for ' all ' (trimmed)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for 'ALL' (case-insensitive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for 'all'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange sorts pages in ascending order",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for empty segment (leading comma)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for empty segment (trailing comma)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for negative page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for non-integer page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for non-numeric input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for page 0 (pages start at 1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for page exceeding totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for range exceeding totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for reversed range (start > end)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns collapses a full consecutive run: [2..80] -> '2-80'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns handles a single page: [3] -> '3'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns leaves non-consecutive pages as singles: [1,3,5,7] -> '1,3,5,7'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns mixes runs and singles: [1,2,4,5,6,9] -> '1-2,4-6,9'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns pathological alternation (odd pages 1..399) produces ~800 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns returns empty string for empty input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec '1,1' deduplicates to {1}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec '1-r1' of 5 resolves to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec 'r2-r1' of 5 resolves to {4,5}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec 'z-1' of 3 resolves to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec handles 1-z as all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec handles comma-separated values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: '1-2' of 3 yields keep '3'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: '1-z' of 3 leaves nothing to keep",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: '2' of 3 yields keep '1,3'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: 'z' of 3 yields keep '1,2'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves a range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves a single page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves r1 as the last page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves r2 as second-to-last",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves r3 as the first page of 3",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves z as the last page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec reversed range '3-1' normalizes to {1,2,3}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec throws on out-of-range page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec throws on page 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec throws on r-index that resolves below 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended admin without apiKeyPermissions has all permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended apiKeyPermissions that do NOT include the permission returns false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended apiKeyPermissions that include the permission returns true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended role lacking the permission returns false even if apiKeyPermissions include it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended user with apiKeyPermissions only gets intersecting permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended admin has all 14 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended editor does NOT have admin-only permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended editor has the expected permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended unknown role returns false for any permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended user does NOT have elevated permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended user has the expected permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns null and sends 401 when no user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns null when not owner and lacks allPermission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns user when resourceUserId matches user.id (own resource)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns user when user has the allPermission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns null and sends 401 when getAuthUser returns null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns null and sends 403 when user lacks permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns user when editor has an editor-level permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns user when user has the permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions does NOT contain admin-only permissions for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions returns all 17 permissions for admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions returns empty array for unknown role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions returns only basic permissions for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns false for user with settings:write",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns false for user with users:manage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns true for admin with users:manage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns true for user with tools:use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > content-aware resize routing keeps non-resize tools unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > content-aware resize routing keeps resize as-is without contentAware",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > content-aware resize routing resolves resize with contentAware to content-aware-resize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) adds _1 suffix on first conflict",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) handles filenames without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) handles multiple dots in filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) increments counter on repeated conflicts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) returns the original name when no conflicts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) tracks all used names across multiple calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step error message formatting falls back to generic message for non-Error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step error message formatting wraps step errors with step number and tool ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step schema validation defaults settings to empty object when omitted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step schema validation requires at least one step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step schema validation validates step has toolId field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup getToolConfig returns undefined for unregistered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup registered tool appears in getRegisteredToolIds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup registered tool is found via getToolConfig",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup registered tool process function executes correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > CONTENT_TYPE_TO_EXT maps common image MIME types to extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName appends toolId suffix when filename is unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName applies both suffix and extension fixup when needed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName does not add suffix when tool renames the file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName fixes extension mismatch between content-type and filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName handles filenames without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName preserves extension when content-type matches",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > JobProgress type shape supports all required fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > JobProgress type shape supports optional currentFile and type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress handles completed status",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress handles failed status with errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress handles progress with currentFile",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress stores progress that can be sent to SSE listeners",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles complete phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles failed phase with error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles processing phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles progress with result data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions admin has all 17 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions editor has collaborative but not admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions hasPermission checks correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions unknown role returns empty permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions user has basic permissions only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic ALL_PERMISSIONS constant contains all expected permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic ALL_PERMISSIONS constant contains exactly 14 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic builtin role protection allows modification of custom roles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic builtin role protection blocks deletion of builtin roles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic builtin role protection blocks modification of builtin roles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation accepts valid create payload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation description is optional",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation rejects description longer than 500 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation rejects missing permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation requires at least one permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation handles empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation returns all permissions if all are invalid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation returns empty array for valid permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation returns invalid permission strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name rename cascading updates all users when role name changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation accepts name exactly 2 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation accepts name exactly 30 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation accepts valid lowercase name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation allows hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation allows numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation allows underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation converts to lowercase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects dots in name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects names longer than 30 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects single character",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects spaces in name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation trims whitespace and lowercases",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts all fields together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts empty update body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts partial update with just description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts partial update with just name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts partial update with just permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic user reassignment on role deletion reassigns users to 'user' role when custom role is deleted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber defaults defaultValue to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber returns defaultValue when setting does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber returns defaultValue when setting value is NaN",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber returns the number when setting exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingString defaults defaultValue to empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingString returns defaultValue when setting does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingString returns the string when setting exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > upsertSetting handles empty string value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > upsertSetting inserts a new setting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > upsertSetting updates an existing setting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation accepts clean keys and values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation accepts values with angle brackets that are not HTML tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation allows multiple settings entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation rejects HTML tag in the middle of a value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation rejects HTML tags in keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation rejects HTML tags in values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation stringifies boolean values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation stringifies non-string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation stringifies object values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex does not match empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex does not match numeric comparisons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex does not match plain text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <!-- comments -->",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches </div> closing tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <?xml?> processing instructions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <img> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <script> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation accepts empty object body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation accepts object body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation rejects array body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation rejects null body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/sidecar-context-propagation.test.ts > sidecar trace context injection omits _otel when no SDK is registered",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/sidecar-context-propagation.test.ts > sidecar trace context injection produces _otel field when span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward circuit breaker behavior increments failure counter on failed delivery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward circuit breaker behavior opens circuit when failures reach threshold",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward circuit breaker behavior resets failure counter on successful delivery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants batch limit is 500",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants circuit breaker threshold is 5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants cursor key is siem_last_forwarded_at",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants failures key is siem_consecutive_failures",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward cursor behavior applies cursor filter using gte on createdAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward cursor behavior queries audit log ordered by createdAt ascending",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward cursor behavior updates cursor to the last forwarded row timestamp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward module exports exports runSiemForward as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward module exports runSiemForward is the only named export",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch follows a redirect chain within MAX_REDIRECTS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch rejects a redirect to a private IP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch returns response for a direct (non-redirect) fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch throws when redirect chain exceeds MAX_REDIRECTS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch throws when redirect has no Location header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl allows a public IP address directly in URL and returns resolved IP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl allows valid public HTTP URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl allows valid public HTTP URL without TLS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects CG-NAT range (100.64.0.0/10)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects IETF protocol assignments (192.0.0.0/24)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects IPv6 documentation range (2001:db8::/32)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects IPv6 unspecified address",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects benchmarking range (198.18.0.0/15)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects dotted IPv4-mapped IPv6 that URL parser canonicalizes to hex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 RFC1918 10.x (::ffff:a00:5)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 RFC1918 172.16.x (::ffff:ac10:1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 RFC1918 192.168.x (::ffff:c0a8:1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 loopback (::ffff:7f00:1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 metadata (::ffff:a9fe:a9fe)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects invalid URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects link-local addresses",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects localhost and loopback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects non-HTTP schemes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects private network ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects reserved/class E range (240.0.0.0/4)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking handles DNS lookup returning a single result object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking rejects hostname resolving to IPv4-mapped IPv6 with 10.x private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking rejects hostname that resolves to IPv4-mapped IPv6 with private IPv4",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking rejects when DNS returns multiple addresses with one private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic logs warning and skips registration when dist path does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic registers static plugin when dist path exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic sets SPA not-found handler that returns 404 for API routes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic sets SPA not-found handler that serves index.html for non-API routes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload passes undefined for both limits when both are 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload passes undefined for fileSize when MAX_UPLOAD_SIZE_MB is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload passes undefined for files when MAX_BATCH_SIZE is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload registers multipart with correct file size limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation module exports exports storageReconciliationJob as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation module exports storageReconciliationJob is the only named export",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure corrects only users whose storageUsed differs from actual",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure groups file sizes by userId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure handles case where no users have files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure sums file sizes per user from userFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure updates storageUsed on the users table",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure zeros out users with no files but nonzero storageUsed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toSrt formats two segments with comma millisecond separator and 1-based counters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toSrt returns empty string for empty segments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toVtt formats two segments with WEBVTT header and dot millisecond separator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toVtt returns WEBVTT header with trailing newlines for empty segments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz decompresses valid SVGZ content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz returns buffer unchanged when first bytes do not match gzip magic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz returns non-gzipped buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz returns short buffer unchanged (less than 2 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz throws on decompressed content that is not SVG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns false for PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns false for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns false for plain text buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for <?xml with leading whitespace before <svg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for SVG with leading whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for buffer starting with <?xml followed by <svg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for buffer starting with <svg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks data:text/html URIs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks external url() references",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks file: URIs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks file: url() references",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks http/https URLs in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks http/https URLs in xlink:href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks javascript: URIs in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg does NOT remove xml processing instruction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg preserves valid SVG content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes DOCTYPE declarations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes DOCTYPE with internal subset (XXE prevention)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes XInclude elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes event handlers (onload, onclick, onerror)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes foreignObject elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes script tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg throws on oversized SVG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic Default team protection identifies the Default team by name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic Default team protection non-Default teams can be deleted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection allows unique names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection detects duplicate when renaming to another team name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection detects duplicates case-insensitively",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection excludes current team when renaming",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic member count check allows deletion when team has no members",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic member count check blocks deletion when team has members",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic member count check handles null member count as zero",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation accepts name exactly 50 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation accepts single character name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation accepts valid team name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects empty string after trimming",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects missing name field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects name longer than 50 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects non-string name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation trims whitespace from team name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout enforces minimum for small megapixel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout enforces minimum timeout of 60_000ms",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout returns correct timeout for external category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout scales with megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout uses override when PROCESSING_TIMEOUT_S > 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout defaults to fileCount of 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout enforces minimum timeout for small megapixel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout enforces minimum timeout of 60_000ms",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout minimum applies per-file before multiplying by count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout multiplies timeout by file count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout override ignores megapixels and fileCount",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for ai_cpu category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for ai_gpu category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for external category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for python category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for sharp category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout scales correctly for large megapixel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout uses override when PROCESSING_TIMEOUT_S > 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery does not overwrite settings already collected from the iterator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery handles array-form fields from part.fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery recovers fileId and clientJobId from part.fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery recovers settings from part.fields when the iterator drops trailing fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart parsing error returns 400 when parts iterator throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling omits resultPayload fields when processV2 returns no resultPayload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 200 success envelope when waitForJob resolves",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 202 when waitForJob returns null (sync window expired)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when image validation fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when multiple files are provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when no file is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when settings JSON is invalid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when settings fail Zod validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 422 when waitForJob rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 501 when AI feature bundle is not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling spreads resultPayload fields at top level in sync 200 envelope",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling uses empty settings when none are provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute route registration adds the tool config to the registry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute route registration registers a POST route at /api/v1/tools/:toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getRegisteredToolIds includes a registered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getRegisteredToolIds includes multiple registered tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getRegisteredToolIds returns an array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getToolConfig returns the config for a registered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getToolConfig returns undefined for an unregistered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions overwrite behavior later registration overwrites earlier for the same toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions overwrite behavior overwriting does not change the count for that toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions process function execution stored process function returns expected output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions process function execution stored process function with custom schema validates correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions registerToolProcessFn adds a tool to the registry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions registerToolProcessFn stores the correct config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tracing-bootstrap.test.ts > tracing bootstrap initializes with valid config and enterprise license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tracing-bootstrap.test.ts > tracing bootstrap is inactive when OTEL_EXPORTER_OTLP_ENDPOINT is unset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tracing-bootstrap.test.ts > tracing bootstrap is inactive when enterprise package is unavailable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation accepts single id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation accepts valid ids array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation rejects empty ids array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation rejects missing ids field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation rejects non-array ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime handles extension without leading dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime handles uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .avif to image/avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .gif to image/gif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .jpg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .tif to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .tiff to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime returns application/octet-stream for unknown extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic filename preservation for results handles parent name with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic filename preservation for results handles parent name without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic filename preservation for results preserves parent base name with new extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps avif to image/avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps bmp to image/bmp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps gif to image/gif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps tiff to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime returns application/octet-stream for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime returns application/octet-stream for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic pagination parsing defaults to limit 50 and offset 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic pagination parsing falls back to defaults for non-numeric values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic pagination parsing parses custom limit and offset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic search escaping does not modify strings without special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic search escaping escapes SQL LIKE wildcards",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic search escaping trims search string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile parses toolChain JSON when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile preserves null width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile returns empty array for null toolChain",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile serializes a complete file row",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic builds tool chain by appending toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic computes next version from parent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic preserves chain when no toolId provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic starts with empty chain for first tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects '<script>' (angle brackets)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'has space' (space)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user\nname' (newline)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user name' (tab character)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user!name' (exclamation mark)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user#name' (# symbol)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user/name' (forward slash)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user@name' (@ symbol)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too long rejects a 51-character username",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too short rejects (empty string)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too short rejects a (1 character)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too short rejects ab (2 characters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects 'élève' (accented Latin letters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects 'üser' (umlaut)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects 'пользователь' (Cyrillic characters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects '用户名' (CJK characters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts 123 (digits only)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts A.B-C_D (mixed separators and uppercase)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (maximum length (50))",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts abc (minimum length (3))",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts alice (lowercase letters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts bob123 (letters and digits)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts user-name (hyphens)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts user.name (dots)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts user_name (underscores)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > assertLocalCapacity / isBelowCapacity isBelowCapacity boundary: just below 0.5 GB is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > assertLocalCapacity / isBelowCapacity isBelowCapacity returns false when free space is above 0.5 GB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > assertLocalCapacity / isBelowCapacity isBelowCapacity returns true when free space is below 0.5 GB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword different passwords produce different hashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles empty string password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles password with colons (does not break salt:hash parsing)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles unicode password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles very long password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword hash (derived key) is 64 bytes (128 hex chars)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword produces a string in salt:hash format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword salt is 32 bytes (64 hex chars)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword same password produces different derived keys due to different salts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword same password produces different salts (non-deterministic)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns false for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns false for non-RAW extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for ARW extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for CR2 extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for DNG extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for NEF extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for ORF extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for RW2 extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true with leading dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts 0 for numeric fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts DEFAULT_TOOL_VIEW=fullscreen",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts DEFAULT_TOOL_VIEW=sidebar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts all custom values at once",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts string values for string fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces floating point string for FILE_MAX_AGE_HOURS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces negative numbers for numeric fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces numeric strings for MAX_MEGAPIXELS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces string 'false' for AUTH_ENABLED to boolean false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces string 'true' for AUTH_ENABLED to boolean true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv defaults DEFAULT_TOOL_VIEW to sidebar when not set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv parses custom PORT as a number via coercion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv parses env vars and applies Zod schema correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects AUTH_ENABLED with a non-enum value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects DEFAULT_THEME with an invalid enum value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects DEFAULT_TOOL_VIEW with an invalid value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects STORAGE_MODE with an invalid enum value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects non-numeric strings for number fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename extracts basename from a full path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename falls back when filename is only null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles directory path with trailing slash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles filename consisting only of spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles filename with only extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles very long filenames by truncating to filesystem-safe length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves Arabic script",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves CJK characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a dotfile (starts with single dot)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a filename with dashes and underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a filename with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a normal filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves accented Latin characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves emoji in filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves filename with multiple extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename removes multiple null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename removes null bytes from filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for double dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for four dots (.. removal leaves empty)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for single dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for slash only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for triple dots (.. removal leaves .)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips Windows-style backslash traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips directory traversal ../../etc/passwd",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips double dots embedded in a filename but keeps the rest",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips more deeply nested traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips traversal with URL encoding (literal %2e%2e)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename truncates very long filenames to filesystem-safe length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts BMP magic (decoded via CLI, not Sharp)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a BMP buffer with correct magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a GIF buffer with correct magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a HEIC file with correct magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a TIFF buffer (big-endian byte order)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a TIFF buffer (little-endian byte order)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a tiny 1x1 PNG file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a valid JPEG file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a valid PNG file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a valid WebP file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts an HDR buffer with #?RADIANCE header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts an HDR buffer with #?RGBE header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts an SVG buffer with valid XML",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects EXR format and bypasses sharp dimension check",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects ICO format via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects JXL ISOBMFF container format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects JXL raw codestream format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects PSD format and bypasses sharp dimension check",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects RAW format when TIFF magic bytes + RAW extension (DNG)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects RAW format with CR2 extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects RAW format with NEF extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects TGA format by extension (no magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer does not detect HDR for a buffer shorter than 10 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a JSON file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a PDF file (%PDF-)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a RIFF container that is AVI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a RIFF container that is not WebP (e.g. WAVE)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a RIFF container too short to contain WEBP signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a ZIP file (PK magic 0x50 0x4B)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer of random bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer that is entirely null bytes (small)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer with JPEG magic bytes but truncated body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer with PNG magic bytes but no real image data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer with only the first byte of a PNG header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a large buffer that is entirely null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a single-byte buffer (0xFF -- JPEG first byte only)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a text file disguised with no image magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a truncated PNG header (3 of 4 magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an EXE file (MZ header)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an HTML file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an image that exceeds MAX_MEGAPIXELS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects ftyp box with unrecognized brand (not avif/heic)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects null passed as buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects two JPEG magic bytes without the third",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects undefined passed as buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts APNG file (detected as png)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts CUR file with CUR magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts DDS file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts DNG file (detected as raw)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts DPX file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts EPS file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts FITS file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts HEIF file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts JP2 file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts PBM file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts PGM file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts PPM file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts QOI file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts SVGZ file (detected as svg)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats rejects a PDF file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword handles unicode passwords in verification",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword is case-sensitive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for a corrupted (truncated) hash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for a stored hash with no colon separator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for a valid salt with wrong hash bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for an empty stored hash string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for empty password when hash was non-empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for stored hash that is just a colon",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for the wrong password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false when hash part is present but salt is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false when salt is present but hash part is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns true for empty password when hash was from empty password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns true for the correct password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/video-speed.test.ts > buildAtempoChain chains correctly for very small factors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/video-speed.test.ts > buildAtempoChain chains factors of 0.5 for values below 0.5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/video-speed.test.ts > buildAtempoChain returns a single atempo for factor >= 0.5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery applies custom initialDelayMs to backoff schedule",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery delivers a batch of events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery delivers empty events array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery does not retry on 4xx client errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery fails after exhausting retries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery follows exponential backoff delay pattern",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery handles very large events array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery limits retries when maxRetries is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery makes no retries when maxRetries is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery omits Authorization header when auth is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery passes through Authorization header with Bearer prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery retries on network errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery retries on server error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery returns error when request times out",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery sends Content-Type application/json header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery sends payload with source, version, and events fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery sends to URL with path and query components",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage detects low contrast on a flat image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage detects overexposure on a bright image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage detects underexposure on a dark image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage handles grayscale images without white balance issues",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage produces contrast score near 50 for a typical well-exposed image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage produces near-zero corrections for well-exposed images (dead zone)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage returns scores, corrections, issues, and suggestedMode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage suggests low-light mode for very dark images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) applies CLAHE at intensity 0 with no visible effect",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) brightens a dark image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) does not darken a bright-but-normal image (exposure score ~55-65)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) does not darken a well-exposed image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) each enhancement mode produces output without crashing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) intensity 100 produces a visibly different output from intensity 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections produces a valid output buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections respects toggle overrides",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases applies denoise with kernel 3 when denoise adjustment is >= 2 but < 4",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases applies denoise with kernel 5 when denoise adjustment is >= 4",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases produces negative saturation correction for over-saturated image (saturation > 60)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases scaleCorrections with landscape mode applies correct multipliers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases suggests document mode for high-contrast low-saturation image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > scaleCorrections applies preset multipliers for portrait mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > scaleCorrections scales corrections by intensity 50 (1x) without change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > scaleCorrections scales corrections to zero at intensity 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a linear gradient background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a radial gradient background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a solid color background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a transparent background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates an image background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates multi-stop linear gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > getDominantBackground returns last gradient stop for gradient type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > getDominantBackground returns solid color for solid type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > getDominantBackground returns transparent for transparent type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame handles narrow images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame handles wide images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders MacBook frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders Windows dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders Windows light frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders browser dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders browser light frame with URL bar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders iPad frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders iPhone dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders iPhone frame with image composited into screen area",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders macOS dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders macOS light frame with title bar above image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame returns original image for frame 'none'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow handles negative offsets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow handles zero-blur shadow gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow produces RGBA output with alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow returns image position within shadow canvas",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow returns larger buffer with shadow applied",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/binaries.test.ts > doc-engine binary resolution availability checks return booleans without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget handles filter names with colons after the first",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget handles single-character extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget returns a bare extension unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget splits on the first colon for qualified filter targets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/pandoc.test.ts > pandocAvailable returns a boolean without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/pandoc.test.ts > runPandoc (requires pandoc) converts a trivial markdown file to html",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention _FILE takes precedence when both are set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention errors when _FILE points to nonexistent file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention errors when _FILE points to unreadable file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention leaves var empty when neither is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention leaves var unchanged when _FILE is not set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention preserves internal whitespace in secret",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention reads secret from file into env var",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention strips trailing newline from secret file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention works for all supported vars simultaneously",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses multi-line dumps (>3 lines)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses python tracebacks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses raw ffmpeg stderr dumps to a safe sentence",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses raw ffprobe stderr dumps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses very long (>280 char) messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError does NOT collapse clean messages that merely contain tool-ish words (false-positive guard)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError is idempotent (safe to apply at every error surface)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError preserves intentional, user-facing validation messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError scrubs internal filesystem paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases TOOL_BUNDLE_MAP has no undefined values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle has a non-empty estimated size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle has a non-empty name and description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle has at least one tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle id matches its key in FEATURE_BUNDLES",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases getBundleForTool returns null for unknown tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases getToolsForBundle returns empty array for unknown bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases no duplicate tools across bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles TOOL_BUNDLE_MAP covers all sidecar tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles all 7 bundles are defined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles every PYTHON_SIDECAR_TOOL maps to exactly one bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles getBundleForTool returns null for non-AI tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles getToolsForBundle returns correct tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure all 7 bundles are defined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure every bundle has at least one enabled tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure every bundle has required fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure manifest has valid version fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: architecture parity every bundle with amd64 packages has arm64 packages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: architecture parity mediapipe is present on both architectures when present on either",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness background-removal bundle includes rembg (needed by remove-background)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness face-detection bundle includes mediapipe (needed by blur-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness face-detection bundle includes mediapipe (needed by red-eye-removal)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness object-eraser-colorize bundle includes huggingface-hub (needed by colorize)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness object-eraser-colorize bundle includes huggingface-hub (needed by erase-object)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness ocr bundle includes paddleocr (needed by ocr)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness photo-restoration bundle includes codeformer-pip (needed by restore-photo)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness photo-restoration bundle includes mediapipe (needed by restore-photo)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness photo-restoration bundle includes realesrgan (needed by restore-photo)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes codeformer-pip (needed by enhance-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes einops (needed by noise-removal)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes mediapipe (needed by enhance-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes realesrgan (needed by enhance-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes realesrgan (needed by upscale)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: enablesTools consistency with shared features manifest enablesTools matches features.ts for each bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe dependency (regression for #129) upscale-enhance bundle includes mediapipe for amd64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe dependency (regression for #129) upscale-enhance bundle includes mediapipe for arm64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe version consistency all bundles use the same mediapipe version for amd64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe version consistency all bundles use the same mediapipe version for arm64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields archive file paths include version prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields each archive entry has file, sha256, compressedSize, extractedSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields every bundle has archives with both arch variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields has bundleRepo field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields manifest version is 2",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior invalidateCache forces re-read",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior invalidateCache is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior isFeatureInstalled reads from cache on second call",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior markInstalled invalidates cache",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior markUninstalled invalidates cache",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates all bundles not_installed when installed.json is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates each result has correct shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates installed bundle + missing model returns error with model error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates installed bundle with valid models returns installed with version",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates lock held + progress set returns installing with progress data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates lock held + progress with error returns error with message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates lock held for bundle returns installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates not installed + stale error progress returns error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes .downloading files in models dir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes multiple staging directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes nested .downloading files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes orphaned .tar.gz in staging when bundle not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes staging-{bundleId}/ directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes stale download files in staging/",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes stale installed.json.tmp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes venv.bootstrapping/ directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls does NOT delete non-.downloading files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls does NOT delete non-staging directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls handles missing directories gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls invalidates cache after recovery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls preserves valid installed.json through recovery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls removes stale install lock",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isFeatureInstalled returns false for not-installed bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isFeatureInstalled returns false for random string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isFeatureInstalled returns true for installed bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled consistent after install then uninstall",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled returns false when bundle not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled returns true for non-AI tools like resize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled returns true when bundle is installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock acquireInstallLock creates lock file with bundleId and startedAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock acquireInstallLock returns false when lock already exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock acquireInstallLock returns true on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock getInstallingBundle deletes corrupt lock and returns null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock getInstallingBundle returns null when no lock",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock getInstallingBundle returns {bundleId, startedAt} from lock file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock lock file contains valid JSON with bundleId and startedAt fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock releaseInstallLock deletes lock file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock releaseInstallLock is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates checks minSize only when minSize > 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates error message identifies which model failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates ignores models without path field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns error when model file is undersized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns error with message when model file missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns installed when all models exist and meet minSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns installed when bundle not in manifest",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns installed when manifest is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > auto-repair state transition (install endpoint logic) does not clear entry when models are healthy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > auto-repair state transition (install endpoint logic) markUninstalled clears stale entry when models are broken, allowing reinstall",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > ensureAiDirs creates AI directories when the manifest exists and DATA_DIR is writable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > ensureAiDirs is a no-op outside managed environments (no manifest, no /.dockerenv)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > ensureAiDirs warns instead of throwing when DATA_DIR is uncreatable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management markInstalled records bundleId, version, installedAt, and models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management markInstalled with same bundleId overwrites (version update)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management markUninstalled removes bundle entry, preserves others",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management multiple bundles can coexist in installed.json",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management reads corrupt JSON as empty (graceful degradation)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management reads missing file as empty {bundles: {}}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management reads valid JSON correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management round-trip: install 3 bundles, uninstall all, verify empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management writes atomically (.tmp does not persist after write)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns error string when model file is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns error string when model file is undersized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns null when all models exist and meet minSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns null when bundle not in manifest",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns null when manifest is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/install-feature-prebuilt.test.ts > install_feature.py prebuilt mode exits non-zero when checksum mismatches",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/install-feature-prebuilt.test.ts > install_feature.py prebuilt mode extracts models and site-packages from a local tar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/install-feature-prebuilt.test.ts > install_feature.py prebuilt mode writes progress JSON to stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > Color blindness matrices all 8 types have a valid 3x3 matrix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > Color blindness matrices matrix row sums are in a reasonable range (0 to 1.5)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation achromatopsia produces grayscale output (R === G === B)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation different types produce different outputs on a red image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation returns a Sharp instance for each type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches EPS ASCII magic needs 10 bytes, 9-byte buffer is too short",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches FITS magic needs 6 bytes, 5-byte buffer is too short",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches RIFF header in 8-byte buffer is handled (Sharp may detect or magic bytes skip)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches buffer with ICO-like bytes but too short",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches buffer with only magic byte prefix but too short for full match returns unknown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects AVIF ftyp with exactly 12-byte buffer (minimum for brand check)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects CR3 magic bytes (ftyp at offset 4 with crx brand)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Cineon magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects DPX reverse byte order magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Fujifilm RAF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Minolta MRW magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Sigma X3F magic bytes (FOVb)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches rejects CR3 ftyp when buffer is too short for brand (< 12 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches rejects ftyp box with non-CR3 brand when CR3 entry is checked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches two-byte buffer matching only first two bytes of a 4-byte signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.avif as \"heif\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.bmp as \"bmp\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.exr as \"exr\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.gif as \"gif\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.heic via Sharp or magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.heif via Sharp or magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.ico as \"ico\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.jpg as \"jpeg\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.jxl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.png as \"png\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.psd as \"psd\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.svg as \"svg\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.tiff as \"tiff\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.webp as \"webp\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures cannot detect sample.hdr (Radiance text header not in magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures cannot detect sample.pbm (no P4 magic bytes registered)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures cannot detect sample.pgm (no P5 magic bytes registered)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.dng as tiff (DNG shares TIFF magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.jp2 as jp2 (JPEG 2000 box signature)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.ppm as ppm (P6 magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.svgz as svg (Sharp reads gzip-compressed SVG)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures does not reliably detect sample.tga (no TGA-specific magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects AVIF magic bytes (ftyp at offset 4 with avif brand)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects AVIF magic bytes with avis brand",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects BMP magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects CUR magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects DDS magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects DPX forward magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects EPS ASCII magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects EPS DOS binary magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects FITS magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects GIF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects ICO magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects J2K raw codestream magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JP2 box signature magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JPEG magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JXL ISOBMFF container magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JXL raw codestream magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects OpenEXR magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PNG magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PPM P3 (ASCII) magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PPM P6 (binary) magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PSD magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects QOI magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects WEBP magic bytes (RIFF + WEBP)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects big-endian TIFF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects little-endian TIFF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers rejects RIFF without WEBP signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers rejects ftyp box when buffer too short to read brand (< 12 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers rejects ftyp box with non-AVIF brand",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers returns 'unknown' for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers returns 'unknown' for unrecognized bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers returns 'unknown' for very short buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.apng",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.cur",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.dds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.dpx",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.eps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.fits",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.qoi",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata clearGps removes GPS data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata does not remove a field that is also being written",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata filters out unsafe round-trip keys from fieldsToRemove",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata handles both edits and removals together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata handles removal on image without existing EXIF gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata ignores empty string values for fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata removes a Photo (IFD2) field via fieldsToRemove",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata removes specified fields from EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata returns image unchanged when no edits or removals are specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata returns image unchanged with empty options object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata survives corrupt EXIF during removal (catch branch)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata uses merge path when only writing fields (no removals)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes EXIF to image that had no EXIF before",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes artist field to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes copyright field to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes dateTime field to IFD0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes dateTimeOriginal to IFD2",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes imageDescription to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes multiple fields at once",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes software field to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage FORMAT_MAP coverage jxl is a valid FORMAT_MAP entry (may fail if libvips lacks JXL support)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage brightness operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage color-channels operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage compress operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage contrast operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage convert operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage crop operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage flip operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage grayscale operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage invert operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage resize operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage rotate operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage saturation operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage sepia operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage strip-metadata operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios all OPERATION_MAP entries in one pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios empty operations with format conversion only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios multiple chained operations preserve correct order",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios result info.size equals buffer.length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage unsupported output formats throws for ico output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage unsupported output formats throws for jp2 output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage unsupported output formats throws for qoi output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage color-blindness operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage edit-metadata operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage heif output format maps to avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage sharpen operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage sharpen-advanced operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling error in later operation aborts entire pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling propagates validation errors from operations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling throws on empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling throws on invalid image buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling throws on unknown operation type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage operations + format conversion chain resize + rotate + grayscale + format conversion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage operations + format conversion resize then convert to JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage operations + format conversion rotate then convert to WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts JPEG input to PNG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to AVIF output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to GIF output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to JPEG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to TIFF output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to WebP output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts WebP input to PNG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format preserves JPEG format when no outputFormat specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format preserves input format when no outputFormat specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format throws on unsupported output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage result info.metadata contains expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage result returns buffer and info with correct shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes AVIF input from fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes GIF input from fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes JPEG input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes TIFF input from fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes WebP input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles NaN altitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles altitude ref = 0 (above sea level)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles altitude ref = 1 (below sea level)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles lat without ref (defaults to positive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles lon without ref (defaults to positive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles maximum coordinate values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles non-numeric altitude (string)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles undefined altitude ref (positive altitude)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles zero coordinates (prime meridian / equator)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases ignores latitude with wrong length (1 element)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases ignores latitude with wrong length (4 elements)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles XML with multiple rdf:Description elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles attributes with special characters in values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles empty attributes as empty strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles large XMP buffer without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles multiple attributes on same element",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases ignores attributes without namespace prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles NaN and Infinity numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles array with mixed types including Buffers and Dates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles deeply nested structure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles nested array of objects with dates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles object with Buffer value at 257 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles object with Buffer value at exactly 256 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles string values without transformation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles zero-length buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo detects EXIF presence in JPEG with EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo reports no EXIF for plain PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns channel count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct dimensions for JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct dimensions for PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct dimensions for WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct format for JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct format for PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct format for WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct size matching buffer length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns hasAlpha boolean",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns info for a dynamically created image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns metadata sub-object with expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo throws for invalid buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif parses EXIF from test fixture with metadata fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif parses GPSInfo section when GPS data is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif populates Iop section when exif-reader returns Iop data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif returns empty sections for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif returns empty sections for null-like buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps handles missing latitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps handles missing longitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps ignores invalid (NaN) GPS values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps ignores wrong-length GPS arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps parses north-east coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps parses southern hemisphere with altitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps returns negative altitude for below sea level",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps returns nulls for empty GPS data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp extracts key-value pairs from XMP XML",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp extracts multiple namespaced attributes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp filters out rdf: prefixed attributes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp filters out xmlns: namespace declarations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp returns empty object for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp returns empty object for non-XML content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue converts Date to ISO string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue converts large Buffer (>256 bytes) to placeholder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue converts small Buffer to number array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue handles Buffer at 257 bytes (just over boundary)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue handles Buffer at exactly 256 bytes boundary",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through booleans",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue recursively sanitizes arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue recursively sanitizes nested objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings handles mixed case for exotic extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"3fr\" to \"image/x-hasselblad-3fr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"apng\" to \"image/apng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"cin\" to \"image/x-cineon\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"cr3\" to \"image/x-canon-cr3\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"cur\" to \"image/x-icon\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"dcr\" to \"image/x-kodak-dcr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"dds\" to \"image/vnd.ms-dds\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"dpx\" to \"image/x-dpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"eps\" to \"application/postscript\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"epsf\" to \"application/postscript\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"erf\" to \"image/x-epson-erf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fff\" to \"image/x-hasselblad-fff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fit\" to \"image/fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fits\" to \"image/fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fts\" to \"image/fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"gpr\" to \"image/x-gopro-gpr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"iiq\" to \"image/x-phaseone-iiq\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"j2c\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"j2k\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jp2\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jpc\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jpf\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jpx\" to \"image/jpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"kdc\" to \"image/x-kodak-kdc\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"mef\" to \"image/x-mamiya-mef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"mrw\" to \"image/x-minolta-mrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"nrw\" to \"image/x-nikon-nrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pam\" to \"image/x-portable-anymap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pbm\" to \"image/x-portable-bitmap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pef\" to \"image/x-pentax-pef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pfm\" to \"image/x-portable-floatmap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pgm\" to \"image/x-portable-graymap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pnm\" to \"image/x-portable-anymap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"ppm\" to \"image/x-portable-pixmap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"ptx\" to \"image/x-pentax-ptx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"qoi\" to \"image/qoi\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"raf\" to \"image/x-fuji-raf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"rwl\" to \"image/x-leica-rwl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"srw\" to \"image/x-samsung-srw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"svgz\" to \"image/svg+xml\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"x3f\" to \"image/x-sigma-x3f\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings strips leading dot for exotic extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToExt expanded handles mixed case consistently",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToExt expanded maps non-jpeg formats to lowercase identity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToExt expanded passes through truly unknown format strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded handles mixed case for jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded handles mixed case for non-jpeg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'bmp' to 'image/bmp'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'heif' to 'image/heif'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'ico' to 'image/x-icon'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'jxl' to 'image/jxl'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings handles uppercase MIME for exotic types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"application/postscript\" to \"eps\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/apng\" to \"apng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/fits\" to \"fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/jp2\" to \"jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/jpx\" to \"jpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/qoi\" to \"qoi\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/vnd.ms-dds\" to \"dds\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-canon-cr3\" to \"cr3\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-cineon\" to \"cin\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-dpx\" to \"dpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-epson-erf\" to \"erf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-fuji-raf\" to \"raf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-gopro-gpr\" to \"gpr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-hasselblad-3fr\" to \"3fr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-hasselblad-fff\" to \"fff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-kodak-dcr\" to \"dcr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-kodak-kdc\" to \"kdc\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-leica-rwl\" to \"rwl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-mamiya-mef\" to \"mef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-minolta-mrw\" to \"mrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-nikon-nrw\" to \"nrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-pentax-pef\" to \"pef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-pentax-ptx\" to \"ptx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-phaseone-iiq\" to \"iiq\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-anymap\" to \"pnm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-bitmap\" to \"pbm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-floatmap\" to \"pfm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-graymap\" to \"pgm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-pixmap\" to \"ppm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-samsung-srw\" to \"srw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-sigma-x3f\" to \"x3f\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"arw\" to \"image/x-sony-arw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"avif\" to \"image/avif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"bmp\" to \"image/bmp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"cr2\" to \"image/x-canon-cr2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"dng\" to \"image/x-adobe-dng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"exr\" to \"image/x-exr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"gif\" to \"image/gif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"hdr\" to \"image/vnd.radiance\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"heic\" to \"image/heic\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"heif\" to \"image/heif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"ico\" to \"image/x-icon\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"jpeg\" to \"image/jpeg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"jpg\" to \"image/jpeg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"jxl\" to \"image/jxl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"nef\" to \"image/x-nikon-nef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"orf\" to \"image/x-olympus-orf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"png\" to \"image/png\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"psd\" to \"image/vnd.adobe.photoshop\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"rw2\" to \"image/x-panasonic-rw2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"svg\" to \"image/svg+xml\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"tga\" to \"image/x-tga\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"tif\" to \"image/tiff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"tiff\" to \"image/tiff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"webp\" to \"image/webp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime normalizes uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime returns application/octet-stream for unknown extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime strips leading dot from extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'gif' to 'gif' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'jpeg' to 'jpg'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'png' to 'png' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'tiff' to 'tiff' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'webp' to 'webp' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt normalizes case",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt returns the format itself for unknown formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'avif' to 'image/avif'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'gif' to 'image/gif'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'jpeg' (Sharp format) to 'image/jpeg'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'png' to 'image/png'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'svg' to 'image/svg+xml'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'tiff' to 'image/tiff'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'webp' to 'image/webp'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime returns application/octet-stream for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/avif\" to \"avif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/bmp\" to \"bmp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/gif\" to \"gif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/heic\" to \"heic\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/heif\" to \"heif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/jpeg\" to \"jpg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/jxl\" to \"jxl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/png\" to \"png\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/svg+xml\" to \"svg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/tiff\" to \"tiff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/vnd.adobe.photoshop\" to \"psd\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/vnd.radiance\" to \"hdr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/webp\" to \"webp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-adobe-dng\" to \"dng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-canon-cr2\" to \"cr2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-exr\" to \"exr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-icon\" to \"ico\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-nikon-nef\" to \"nef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-olympus-orf\" to \"orf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-panasonic-rw2\" to \"rw2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-sony-arw\" to \"arw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-tga\" to \"tga\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt normalizes uppercase MIME types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt returns 'bin' for unknown MIME type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness boundary value = -100 does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness boundary value = 100 does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness negative value darkens the image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness positive value brightens the image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness throws on extreme values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness throws on value = -101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness throws on value = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness value = -100 produces black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness value = 0 makes no visible change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels 100/100/100 is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels boundary values 0/0/0 makes everything black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels doubling green channel doubles green value (clamped)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when blue < 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when blue > 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when green < 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when green > 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when red < 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when red > 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels zeroing red channel removes red",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress compresses with explicit quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress compresses with format=avif adds effort option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress compresses with target size (binary search)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress defaults to quality 80 when no quality or target specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress falls back to PNG for SVG input (NO_ENCODER format)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress lower quality produces smaller output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target size binary search gets reasonably close",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target size early break when within tolerance",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target size falls back to dimension reduction when quality alone fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy 500KB-to-50KB scenario produces output at or below target",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy aggressive target on large image triggers dimension reduction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy does not reduce dimensions when quality alone suffices",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy output never exceeds target size for JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy output never exceeds target size for PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy output never exceeds target size for WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy preserves requested format during dimension reduction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on negative quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on negative targetSizeBytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on quality = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on quality = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on targetSizeBytes = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress uses input format when no format specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast negative contrast pushes values toward mid-gray",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast positive value increases contrast",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast throws on value = -101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast throws on value = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast value = 0 makes no visible change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert applies quality parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to avif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to gif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to jpg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to png format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to tiff format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to webp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert quality = 1 (minimum) does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert quality = 100 (maximum) does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on invalid format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on negative quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on quality = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on quality = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on quality = 999",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops 100% of image using percent unit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops a 1x1 region from top-left corner",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops a valid region",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops from the last pixel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops the full image (0,0 to full dimensions)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops using percent unit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on height = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on negative left",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on negative top",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on negative width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on width = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when crop is 1px past the boundary",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when crop region exceeds image height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when crop region exceeds image width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when left alone puts region out of bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata clears GPS while preserving other EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata edit wins over remove for same field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata preserves metadata with no options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata removes specific fields via fieldsToRemove",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata writes common fields readable via exif-reader",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata writes fresh EXIF to image without existing metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip flips both horizontal and vertical",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip flips horizontally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip flips vertically",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip horizontal flip actually mirrors pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip throws when both are explicitly false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip throws when neither horizontal nor vertical specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip vertical flip actually mirrors pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > grayscale already grayscale image does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > grayscale converts a color image to grayscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > grayscale preserves dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert double invert returns to original",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert inverts black to white",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert inverts white to black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert preserves dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb combines maxWidth + stripMetadata=false + progressive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to avif with quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to jpeg with quality and progressive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to png with palette optimization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to webp with quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb does not enlarge image when maxWidth > actual width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb handles 1x1 pixel image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb handles jpg input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb handles webp input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb lower quality produces smaller file for jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb lower quality produces smaller file for webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb preserves metadata when stripMetadata=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb progressive defaults to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb progressive=false for jpeg does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb resizes to both maxWidth and maxHeight (fit inside)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb resizes to maxHeight without enlargement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb resizes to maxWidth without enlargement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb stripMetadata=true (explicit) does not include metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb strips metadata by default",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb throws on unsupported format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb without maxWidth/maxHeight preserves original dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseExif parses EXIF buffer from test fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseExif returns empty sections for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseGps handles southern hemisphere",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseGps parses DMS coordinates to decimal degrees",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseGps returns nulls for empty GPS data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseXmp extracts key-value pairs from XMP XML",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseXmp returns empty object for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseXmp skips xmlns and rdf namespace prefixes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage all 14 operation types run without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage applies a single resize operation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage applies brightness then contrast then saturation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage applies crop then flip",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage chains multiple operations in sequence",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage color-channels operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage convert + strip-metadata pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage converts output format via outputFormat parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage empty buffer throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage error in second operation aborts pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage invalid buffer input throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage invert then sepia pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage processes with no operations (passthrough)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage propagates operation-level errors through pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage resize then compress pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage result contains accurate ImageInfo metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage throws on unknown operation type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage throws on unknown output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize fit=contain preserves aspect ratio within box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize fit=fill stretches to exact dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage = 200 doubles size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage on a 1x1 image rounds to at least 1px (percentage >= 50)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage rounds correctly for non-integer results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage=1 on 1x1 clamps to 1px minimum",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes by percentage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes to explicit width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes with height only (width derived)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes with width only (height derived)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on height = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on negative height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on negative percentage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on negative width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on percentage = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on width = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws when neither width, height, nor percentage given",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize withoutEnlargement clamps height only (no width given)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize withoutEnlargement does not clamp when target is smaller",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize withoutEnlargement prevents upscaling",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate arbitrary angle defaults background to black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate arbitrary angle produces a larger bounding box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate arbitrary angle uses custom background color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate negative angle rotates counter-clockwise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 0 degrees (no-op)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 180 degrees (dimensions stay same)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 270 degrees (dimensions swap)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 360 degrees (no-op equivalent)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 90 degrees (dimensions swap)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue converts Date to ISO string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue converts large Buffer to placeholder string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue converts small Buffer to number array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue passes through primitives unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue recursively sanitizes objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation boundary value 100 does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation throws on value = -101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation throws on value = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation value = -100 desaturates to grayscale-like",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation value = 0 makes no change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia applies sepia tone to a colored image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia applies sepia tone to a white image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia black stays black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia preserves dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen negative value returns image unchanged (no-op)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen sharpening actually modifies pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen throws on value = 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen throws on value > 100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 0 returns image unchanged (no-op)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 1 applies minimal sharpening",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 100 applies maximum sharpening",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 50 applies moderate sharpening",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen works on a 1x1 pixel image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen works on different image formats (webp)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced adaptive method with custom params",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced adaptive method with defaults does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise changes pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=light applies median(3) pre-pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=medium applies median(5) pre-pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=off applies no median filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=strong applies median(7) pre-pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced high-pass method with 3x3 kernel (default)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced high-pass method with 5x5 kernel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced high-pass method with custom strength",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced preserves dimensions for all methods",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced sharpen through processImage pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced sharpen-advanced through processImage pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced throws on unknown method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced unsharp-mask method with custom params",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced unsharp-mask method with defaults does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata empty options defaults to strip all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata returns an image (default strips all)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata selective strip (stripExif only) returns image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripAll=true returns image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripGps=true enters selective stripping path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripIcc=true enters selective stripping path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripXmp=true enters selective stripping path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths 3-channel encoding uses 255 for alpha in output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises DIFF encoding for small color changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises INDEX encoding for repeated colors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises LUMA encoding for medium color changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises RGB encoding for large color changes with same alpha",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises RGBA encoding for alpha changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises maximum RUN length of 62",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths handles all-zero pixels (black with full alpha)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths handles checkerboard pattern (many INDEX lookups)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths round-trips large image (100x100) with varied data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths run ending at last pixel produces correct output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec compresses solid color efficiently",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec decodes real fixture with correct header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec encodes 3-channel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec ends with correct end marker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec re-encodes real fixture with matching pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips 1x1 image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips RGBA pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips random-ish data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips solid color image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips varying alpha",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on invalid channels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on invalid magic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on zero height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on zero width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec writes correct header dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec writes correct header magic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation accepts boundary value +100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation accepts boundary value -100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation decreases saturation at value -50",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation doubles saturation at value +100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation fully desaturates at value -100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation increases saturation at value +50",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation returns a Sharp instance at value 0 (no change)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation throws for value above +100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation throws for value below -100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation works with JPEG input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/encoders.test.ts > resolveEncoder defaults to software encoders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/encoders.test.ts > resolveEncoder falls back to software for unknown accel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/encoders.test.ts > resolveEncoder maps nvenc when SNAPOTTER_HW_ACCEL=nvenc",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/fonts.test.ts > resolveFontFile falls back to a real candidate on this machine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/fonts.test.ts > resolveFontFile honors SNAPOTTER_FONT_FILE + SNAPOTTER_FONT_FAMILY",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/progress.test.ts > parseProgressBlock flags progress=end",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/progress.test.ts > parseProgressBlock parses an ffmpeg -progress key=value block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/progress.test.ts > parseProgressBlock tolerates missing fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation every template has a corresponding full-size image in full/ directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation every template has a corresponding thumbnail in thumbs/ directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation every template has required fields with correct types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation has no duplicate template IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation manifest file exists and is valid JSON with version 1 and non-empty templates array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation no duplicate text box IDs within a template",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation text box coordinates are in valid percentage range (0-100)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator covers every pair of values across all axis pairs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator handles degenerate inputs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator is deterministic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator produces far fewer cases than the full cartesian product",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange deduplicates overlapping ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange handles whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange parses a range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange parses a single page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange parses mixed ranges and singles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange returns all pages for 'all'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange returns all pages for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange sorts output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on empty range segment",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on negative page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on non-numeric input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on page 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on page exceeding total",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on range exceeding total",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on reversed range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns angle for rotate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns dimensions for crop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns dimensions for resize with width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns empty string for tool with no relevant settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns empty string for unknown tool with empty settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns format for convert",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns percentage for resize with scale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns quality for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns target size for compress targetSize mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns text preview for watermark-text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns width only for resize with just width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary truncates long watermark text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore addStep appends a step with generated id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore addStep auto-expands the new step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore loadSteps replaces all steps and generates new ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore removeStep clears expandedStepId if removing expanded step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore removeStep removes by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore reorderSteps swaps two step positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore reset clears all state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore starts with empty steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore updateStepSettings merges settings for the target step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: all schemas accept valid input all schemas pass with normal-length fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: changePasswordSchema max lengths rejects oversized currentPassword",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: changePasswordSchema max lengths rejects oversized newPassword",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults LOGIN_ATTEMPT_LIMIT defaults to 30",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults MAX_STORAGE_PER_USER_MB defaults to 5000",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults MAX_WORKSPACE_SIZE_GB defaults to 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults RATE_LIMIT_PER_MIN is parsed correctly (test env overrides to 10000)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths accepts password at exactly 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths accepts username at exactly 255 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths rejects password longer than 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths rejects username longer than 255 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: registerSchema max lengths rejects password longer than 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: registerSchema max lengths rejects username longer than 255 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: resetPasswordSchema max lengths rejects newPassword longer than 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > Settings payload size limit allows normal-sized settings payload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > Settings payload size limit allows settings payload at exactly 64KB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > Settings payload size limit rejects settings payload exceeding 64KB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths handles empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths handles multiple paths in a single message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths preserves messages with no filesystem paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths preserves non-path content unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /app/ paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /data/ paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /home/ and /opt/ paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /tmp paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /workspace/ paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-file-processing.test.ts > Temp file exclusive creation (O_EXCL) cleans up in finally blocks even after write failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-file-processing.test.ts > Temp file exclusive creation (O_EXCL) creates a new temp file successfully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-file-processing.test.ts > Temp file exclusive creation (O_EXCL) fails if the file already exists (prevents overwrite)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > Drizzle ORM: parameterized query audit confirms no sql.raw() or sql.identifier() usage in API source",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping does not strip non-sensitive paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping leaves safe messages untouched",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /app paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /data paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /home paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /opt paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /tmp paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /tmp paths including trailing colons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips multiple paths in one message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation accepts valid tag names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation buildTagArgs validates fieldsToRemove tag names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects empty tag names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects tag names with path traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects tag names with shell metacharacters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects tag names with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation accepts tag values at exactly 10,000 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation buildTagArgs rejects tag values over the limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation buildTagArgs strips null bytes from all string fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation rejects tag values exceeding 10,000 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation rejects when cleaned value (after null removal) is still too long",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation strips null bytes from tag values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation strips null bytes then checks length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: expected directives present includes connect-src with analytics origins",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: expected directives present includes default-src, script-src, style-src, and object-src in non-docs CSP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: expected directives present includes img-src with blob: and data: in non-docs CSP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: script-src does NOT include unsafe-inline for non-docs docs CSP script-src includes unsafe-inline (required by Scalar)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: script-src does NOT include unsafe-inline for non-docs non-docs CSP script-src omits unsafe-inline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: allows public IPs allows 1.1.1.1 (Cloudflare DNS)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: allows public IPs allows 8.8.8.8 (Google DNS)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: allows public IPs allows 93.184.216.34 (example.com)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks 6to4 addresses (2002::) blocks 2002::1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks 6to4 addresses (2002::) blocks 2002:c0a8::1 (encapsulated 192.168.x.x)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks IPv6 loopback blocks :: (IPv6 unspecified)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks IPv6 loopback blocks ::1 (IPv6 loopback)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks NAT64 addresses (64:ff9b::) blocks 64:ff9b::1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks NAT64 addresses (64:ff9b::) blocks 64:ff9b::c0a8:0101 (NAT64 mapping of 192.168.1.1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 10.x.x.x (class A private)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 127.0.0.1 (loopback)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 169.254.x.x (link-local / cloud metadata)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 172.16.x.x - 172.31.x.x (class B private)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 192.168.x.x (class C private)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic allows upload within quota",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic calculates quota correctly for MB to bytes conversion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic formats the error message correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic identifies exceeded quota",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic skips quota check when limit is 0 (unlimited)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Upload route rate limit configuration rate limit config has reasonable bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Upload route rate limit configuration rate limit config object matches expected shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker allows processing at >= 0.5GB free after cleanup",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker correctly calculates GB from statfs values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker rejects processing at < 0.5GB free",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker skips check when workspace directory does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker statfs returns valid disk space info for existing directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker triggers cleanup threshold at < 1GB free",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- CDATA bypass strips CDATA sections that hide script content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XInclude strips xi:include elements and namespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XSS script injection strips case-varied <SCRIPT> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XSS script injection strips nested SVG with script",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XSS script injection strips standard <script> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XXE attacks removes DOCTYPE with SSRF XXE entity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XXE attacks removes DOCTYPE with file-read XXE entity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XXE attacks removes XML entity bypass with entity-encoded javascript URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- animation injection strips <animate> elements with javascript: values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- animation injection strips <set> elements that inject event handlers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- clean SVGs pass through preserves a minimal clean SVG unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- clean SVGs pass through preserves internal CSS styles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- clean SVGs pass through preserves internal fragment href in <use>",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks data: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks embedded image with data:text/html href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks entity-encoded javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks newline-obfuscated javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks null-byte-obfuscated javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks tab-obfuscated javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- event handler injection removes onload event handler",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- external <use> href preserves <use> with internal fragment reference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- external <use> href removes <use> with external href (no xlink)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- external <use> href removes <use> with external xlink:href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF preserves <feImage> with internal fragment reference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with HTTPS external href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with data: href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with external HTTP href (cloud metadata SSRF)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with file: href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with xlink:href external URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- foreignObject strips foreignObject with embedded HTML body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- foreignObject strips mixed-case <ForeignObject> variant",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- url() scheme blocking blocks data: scheme inside url() property values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata AI (sidecar) tools are hinted long (except pure-CV ones)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata defines five modalities with UI metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata detects modality from mime",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata every tool declares a valid modality, acceptedInputs and executionHint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata maps every modality to a worker pool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata pdf-to-image is a document-modality tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/use-focus-trap.test.ts > useFocusTrap should be importable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp bootstraps on first run when no venv exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp cleans up interrupted bootstrap from previous start",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp does not reset installed.json when no bundles were installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp does nothing when /opt/venv does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp does nothing when /opt/venv has no stamp (old image)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp refreshes when stamps differ (upgrade)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp refreshes when venv has no stamp (pre-stamp image upgrade)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp resets installed.json when refreshing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp skips when stamps match",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry blocks fetch breadcrumbs to file URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry blocks ui.click breadcrumbs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry redacts file paths from exception values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry strips user.email and user.username from events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant consent revoked during async SDK import PostHog is not active if consent revoked while import resolves",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant rapid consent toggles ending on false means nothing is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) identify() never calls posthog.identify",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) initAnalytics with enabled config but no consent skips PostHog",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) no PostHog or Sentry SDK is loaded at all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) startErrorReplay() never calls posthog.startSessionRecording",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) track() never calls posthog.capture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted Sentry beforeBreadcrumb returns null after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted Sentry beforeSend returns null after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted identify() is silent after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted shutdownAnalytics opts out and resets PostHog",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted startErrorReplay() is silent after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted track() is silent after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false identify() is a silent no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false initAnalytics never calls Sentry.init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false initAnalytics never calls posthog.init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false startErrorReplay() is a silent no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false track() is a silent no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when user is in remind-later state (consent = null) no SDK activity after remind-later even with enabled config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when user is in remind-later state (consent = null) remind-later calls setAnalyticsConsent(false), not true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback passes through breadcrumbs without message field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback passes through fetch breadcrumbs without file extension URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback returns null for fetch breadcrumbs with file extension URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback returns null for ui.click breadcrumbs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback returns null when consent is not granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback scrubs messages containing file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback handles event without user or exception fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback handles exception values without stacktrace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback returns null when consent is not granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback scrubs file extensions from exception values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib full consent lifecycle accept -> use -> revoke -> silent -> re-accept -> use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib full consent lifecycle rapid consent toggles do not corrupt state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib full consent lifecycle server disabled overrides user consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify calls posthog.identify with consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify does not call posthog.identify without consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify does not throw before initialization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify swallows exceptions from posthog.identify",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics bails out if consent is revoked during async import",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics calls posthog.init when config.enabled and consent are both true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics does not double-initialize on repeated calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics initializes Sentry when sentryDsn is provided and consent is granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics retries initialization if first attempt throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics skips Sentry when sentryDsn is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics skips initialization when config.enabled is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics skips posthog.init when consent is not granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics swallows Sentry init errors and logs a warning",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent can be toggled multiple times",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent does not throw when setting consent to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent does not throw when setting consent to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent does not trigger shutdown when set to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent triggers shutdown when set to false after init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics allows re-initialization after shutdown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics calls opt_out_capturing and reset on the posthog instance",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics is safe to call multiple times",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics is safe to call when not initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics swallows exceptions from posthog.opt_out_capturing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics swallows exceptions from posthog.reset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay calls startSessionRecording with consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay does not call startSessionRecording without consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay does not throw before initialization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay swallows exceptions from posthog.startSessionRecording",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track calls capture with consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track does not call capture without consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track does not throw before initialization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track swallows exceptions from posthog.capture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track works without properties",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path does NOT grant admin when authEnabled is true and session fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path does not call session endpoint when auth is disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path includes all admin permissions in anonymous mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path includes settings:write in anonymous permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path sets role to admin when authEnabled is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth hasPermission returns false for permissions not in the list",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError returns empty string if API message is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError returns original message for unmapped API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError returns original message when mapped key is missing from translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Authentication required'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Connection error'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Current password is incorrect'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'File too large'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Invalid credentials'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Invalid username or password' to same key as invalid credentials",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'No valid files uploaded'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Not found'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Permission denied'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Processing failed'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Rate limit exceeded'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Request timed out'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > URL helpers getDownloadUrl builds correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > URL helpers getFileDownloadUrl builds correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > URL helpers getFileThumbnailUrl builds correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDeleteUserFiles sends DELETE with JSON body of ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDeleteUserFiles throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDeleteUserFiles triggers disconnected on TypeError",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDownloadBlob network errors does NOT trigger disconnected on non-TypeError",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDownloadBlob network errors triggers disconnected on TypeError from fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiGetFileDetails returns merged file and versions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles calls correct URL without params",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes all params when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes limit param when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes offset param when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes search param when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiUploadUserFiles sends files as FormData to upload endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiUploadUserFiles throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiUploadUserFiles triggers disconnected on network error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders does not include analytics consent header when consent is not true/false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders does not include analytics consent header when token exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders includes Authorization header when token is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders includes analytics consent header when consent is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders includes analytics consent header when no token and consent is set to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders merges provided HeadersInit with auth headers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders omits Authorization header when no token",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns FeatureNotInstalledError for FEATURE_NOT_INSTALLED code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns JSON-stringified details for object arrays without message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns JSON-stringified object details",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns array details joined with semicolons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns array of objects details with message property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns details only when error is not a string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns error string when error field is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns fallback message when no error or message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns message field when error field is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns string details appended to error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > throwWithMessage error extraction extracts error field from response JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > throwWithMessage error extraction extracts message field when error is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > throwWithMessage error extraction falls back to status code when JSON parsing fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle borderRadius is 0px when a frame is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle borderRadius is normal when frame is none",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle custom shadow computes CSS from parameters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle image background sets backgroundImage with blob URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle image background without URL does not set backgroundImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle linear gradient builds CSS gradient string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle named shadow presets return correct CSS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle none shadow returns no boxShadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle padding and borderRadius are set from settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle radial gradient builds CSS gradient string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle solid background returns the color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle transparent background sets no background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > hexToRgba converts arbitrary color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > hexToRgba converts black with full opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > hexToRgba converts white with half opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders amber banner when disconnected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders green banner when reconnected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders nothing when connected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders offline banner when offline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth is a no-op when already connected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth stays disconnected on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions connected → disconnected on fetch failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions connected → disconnected on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions disconnected → reconnected on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions offline → reconnected on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store does not overwrite failedSince on repeated setDisconnected calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store refreshStaleData calls settings fetch and features refresh",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store setOnline is no-op when not offline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store startPolling is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store starts in connected state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store stopPolling clears the interval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store transitions from offline to disconnected on setOnline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store transitions to disconnected on setDisconnected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store transitions to offline on setOffline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload calls onFiles when files are selected via file picker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload calls onFiles with multiple files from file picker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload disables multiple when multiple=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload does not call onFiles when no files are selected (dialog cancelled)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload opens file picker when the Upload button is clicked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload opens file picker when the section is clicked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload sets accept attribute when accept prop is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload sets multiple attribute on the file input by default",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste accepts pasted HEIC image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste calls onFiles when an image is pasted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste does not call onFiles when pasted content has no image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste does not prevent default on paste when no image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste filters out non-image files from paste",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste handles multiple pasted images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste handles paste where getAsFile returns null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste ignores paste with no clipboardData at all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste ignores paste with no clipboardData items and no files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste ignores text-only paste (no file items)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste prevents default on paste when image files are found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste removes paste listener on unmount",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) accepts RAW and HEIC files from Finder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) falls back to items when files is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) filters non-image files from Finder paste",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) handles a single file from Finder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) handles multiple files copied from Finder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) ignores Finder paste with only non-image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) prefers clipboardData.files over items when both are present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) prevents default when files are found via clipboardData.files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone compact mode renders without min-height in compact mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone compact mode uses standard min-height in default mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop accepts HEIC files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop accepts PSD files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop accepts RAW files identified by extension on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop calls onFiles with image files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop does not call onFiles when all dropped files are non-image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop filters out non-image files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop handles multiple image files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop removes drag styling after drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop shows drag-active styling on dragenter and removes on dragleave",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop shows drag-active styling on dragover",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering does not show file list for a single file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering does not show file list when no files provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering renders the drop zone section with aria label",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering renders upload button and helper text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering shows file count and list when multiple files are provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering shows supported formats hint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone without onFiles callback does not throw on click without onFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone without onFiles callback does not throw on drop without onFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone without onFiles callback does not throw on paste without onFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts HEIC/HEIF variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts JPEG 2000 variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts RAW camera formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts common image extensions even without MIME type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts files with image/* MIME type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts netpbm/scientific formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts professional/specialized formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile is case-insensitive for extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile rejects files with no extension and no image MIME",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile rejects non-image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments defaults all to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments resetAdjustments restores all to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment clamps brightness to -100..100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment clamps contrast to -100..100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment clamps hue to 0..359",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment does not affect other values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment updates a specific value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings default brushHardness is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings default brushOpacity is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings default brushSize is 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushHardness clamps to 0..1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushOpacity clamps to max 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushOpacity clamps to min 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushOpacity updates value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize clamps negative to 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize clamps to max 500",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize clamps to min 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize updates value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State default canvas size is 1920x1080",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage resets zoom and panOffset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage sets sourceImageSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage sets sourceImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage updates canvasSize to image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State resizeCanvas marks dirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State resizeCanvas updates canvasSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State resizeImage updates both canvasSize and sourceImageSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setPanOffset updates offset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom clamps negative values to minimum",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom clamps to maximum 64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom clamps to minimum 0.01",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom updates zoom",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms flipCanvasHorizontal flips object x positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms flipCanvasVertical flips object y positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 180 keeps dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 270 swaps dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 90 swaps dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 90 transforms object positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms trimCanvas no-ops when no objects exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms trimCanvas trims to object bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard clipboard starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard copyObjects does not modify original objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard copyObjects stores selected objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard cutObjects stores and removes selected objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteInPlace adds at exact position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteInPlace assigns new IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteInPlace is a no-op when clipboard is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects adds with new IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects is a no-op when clipboard is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects is a no-op when clipboard is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects offsets by 10px",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects selects pasted objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System defaults to black foreground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System defaults to white background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System recentColors has no duplicates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System recentColors max 12 entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System recentColors puts newest first",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System resetColors restores defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System setBackgroundColor updates color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System setForegroundColor adds to recentColors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System setForegroundColor updates color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System swapColors exchanges foreground and background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop clears cropState and isCropping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop is a no-op without cropState",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop marks dirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop offsets objects by crop origin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop updates canvasSize to crop dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop cropState starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop setCropState null clears crop and isCropping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop setCropState stores state and sets isCropping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Cursor Position setCursorPosition updates position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State addLayer sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State addObject sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State applyCrop sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State isDirty starts false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State markClean sets isDirty to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State markDirty sets isDirty to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State removeObjects sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State reorderLayers sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State resizeCanvas sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State setLoadingState null clears it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State setLoadingState stores loading state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State updateLayer sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters all filters disabled initially",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters setFilterParam does not affect other filters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters setFilterParam updates a filter parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters toggleFilter disables an enabled filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters toggleFilter enables a filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides addGuide assigns unique ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides addGuide creates a guide",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides guides starts empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides removeGuide deletes by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleGrid flips gridVisible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleGuides flips guidesVisible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleRulers flips rulersVisible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleSnapping flips snappingEnabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides updateGuide changes position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer auto-increments name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer creates a new layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer inserts above active layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer marks isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer sets new layer as active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management default layer is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer copies objects to new layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer creates copy with (copy) suffix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer preserves layer properties",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer sets new layer as active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management flattenAll moves all objects to bottom layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management flattenAll reduces to single layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management mergeDown combines layer into the one below",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management mergeDown does nothing for the bottom layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management mergeDown sets active layer to the one below",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer also removes objects belonging to that layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer deletes the layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer keeps activeLayerId when non-active is removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer prevents deleting the last layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer selects adjacent layer when active is removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management reorderLayers moves layer from one index to another",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management setActiveLayer changes activeLayerId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management starts with one layer named Layer 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes blendMode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes locked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes visibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject appends to objects array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject assigns active layerId when not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject marks dirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject preserves specified layerId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringForward does nothing for last object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringForward swaps with next object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringToFront moves object to end of its layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringToFront with non-existent id is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management removeObjects clears selection for removed ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management removeObjects deletes by ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management removeObjects keeps selection for non-removed ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management sendBackward does nothing for first object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management sendBackward swaps with previous object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management sendToBack moves object to start of its layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management setSelectedObjects stores ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management updateObject does not affect other objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management updateObject modifies attrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Right Panel default tab is layers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Right Panel setRightPanelTab changes tab",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Right Panel toggleRightPanel flips visibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection invertSelection does nothing with no selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection invertSelection does nothing without a mask",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection invertSelection flips mask bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection selection starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection setSelection null clears selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection setSelection stores state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management default tool is move",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management previousTool starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool changes activeTool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool stores previousTool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool to crop sets isCropping true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool to non-crop sets isCropping false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > applyCrop with line objects shifts line points by crop offset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > batchNudge creates history entry with Nudge action",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > batchNudge moves line objects (points array) by dx, dy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > batchNudge moves multiple objects by dx, dy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute flipCanvasHorizontal negates rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute flipCanvasVertical negates rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute rotateCanvas 90 adds 90 to existing rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute rotateCanvas 90 compounds with existing rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > commitHistory increments _historyVersion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > commitHistory sets lastAction to provided string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > cutObjects atomic creates history entry with Cut action",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > cutObjects atomic does nothing when no objects selected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > cutObjects atomic removes selected objects and stores in clipboard atomically",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > flipCanvas with line objects flipCanvasHorizontal flips line points x-coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > flipCanvas with line objects flipCanvasVertical flips line points y-coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > invertSelection for bounds-based selections area inside bounds is 0 after inversion, outside is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > invertSelection for bounds-based selections creates mask from bounds and inverts it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > invertSelection for bounds-based selections mask has correct dimensions (canvasSize width * height)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling handles non-uniform scaling (different scaleX/scaleY)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales ellipse radii proportionally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales line/arrow points arrays proportionally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales rect positions and dimensions proportionally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales strokeWidth",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales text fontSize and position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > rotateCanvas with line objects rotates line points 180 degrees",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > rotateCanvas with line objects rotates line points 270 degrees clockwise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > rotateCanvas with line objects rotates line points 90 degrees clockwise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > sendToBack with multiple layers handles case when no other objects on same layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > sendToBack with multiple layers places object at start of its layer's section, not at index 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > transform with center-based objects flipCanvasHorizontal correctly flips ellipse center position (no width subtraction)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > transform with center-based objects rotateCanvas 90 correctly rotates ellipse center position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > trimCanvas with line objects computes correct bounds from line points",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > trimCanvas with line objects offsets line points after trim",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > updateLayerThumbnail does not affect other layers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > updateLayerThumbnail sets thumbnail on the specified layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to ellipse type with EllipseAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to line type with LineAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to rect type with RectAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to text type with TextAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > ToolType each variant is a string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > ToolType includes expected tool variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) clearError does not affect other errors when clearing one",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) fetch edge cases recovers multiple active installs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) fetch edge cases sets loadError false on success after previous error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) fetch edge cases uses fallback progress for recovering installs without progress data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) getBundleForTool edge cases returns null when bundles array is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) installBundle queuing edge cases does not duplicate already-queued bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) installBundle skips already-installed bundles from queue skips bundle that got installed while queued",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) isToolInstalled edge cases handles error status as not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) isToolInstalled edge cases handles installing status as not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) isToolInstalled edge cases returns true for unknown tools (no bundle requirement)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) refresh updates bundles even when already loaded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) startTimes tracking records startTime when install begins",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) uninstallBundle edge cases refreshes bundles after successful uninstall",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling falls back to polling on EventSource error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling handles failed phase from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling handles failed phase with no error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling progress percent never decreases",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling updates progress on message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore clearError() does nothing if error does not exist for bundleId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore clearError() removes error for specified bundleId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() does a background refresh if already loaded without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() recovers active installs after successful fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() retries fetch if previously loaded with error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() sets bundles from response and loaded = true on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() sets loadError = true on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore getBundleForTool() returns matching bundle state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore getBundleForTool() returns null when bundle id has no matching state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore getBundleForTool() returns null when no bundle for tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state bundles is empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state errors is empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state installAllActive is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state installing is empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state loadError is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state loaded is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state queued is empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installAll() clears stale errors for pending bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installAll() sets installAllActive = true and processes all uninstalled bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() clears previous error for the bundle before installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() on API failure with non-Error: uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() on API failure: sets error and clears installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() sets installing state and calls API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore isToolInstalled() returns false when bundle exists but not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore isToolInstalled() returns true when tool bundle is installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore isToolInstalled() returns true when tool has no bundle requirement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore refresh() refreshes bundles from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore refresh() silently handles refresh failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore reinstallBundle() calls uninstall then install in sequence",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore uninstallBundle() calls API and refreshes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore uninstallBundle() sets error on failure with Error instance",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore uninstallBundle() sets fallback error on failure with non-Error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked calls API with checked IDs and refreshes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked is a no-op when no IDs are checked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked sets error on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles loads files from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles passes searchQuery to API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles passes undefined search when searchQuery is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles sets error on API failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles sets loading true during request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore selectFile sets selected file ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore selectFile with null clears selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore setActiveTab switches to recent tab",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore setActiveTab switches to upload tab",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore setSearchQuery updates search query",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleCheckAll deselects all when all are already selected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleCheckAll selects all files when none are selected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleCheckAll selects all when only some are checked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleChecked adds an ID to the checked set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleChecked handles multiple IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleChecked removes an already-checked ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore uploadFiles calls API then refreshes files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore uploadFiles sets error on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore uploadFiles sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate formats a Date object with en-US locale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate formats an ISO date string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate formats end-of-year date correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate handles different locales",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDateTime formats an ISO string with time",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDateTime handles midnight correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDateTime includes both date and time components",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format handles empty template",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format handles template with no placeholders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format preserves unmatched placeholders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format replaces multiple placeholders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format replaces numeric values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format replaces single placeholder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats gigabytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats kilobytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats megabytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize handles zero",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns one form for count 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns other form for count 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns other form for count > 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns other form for negative count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES all locales have required fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES has 21 locales including English",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES has Arabic as RTL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES includes English as first entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has 24 categories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has 25 rotating phrases",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has 30 progress messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has all required top-level sections",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > loadTranslations returns English fallback for unsupported locale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > loadTranslations returns English translations for 'en'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP contains all category icons referenced by shared constants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP contains all tool icons referenced by shared constants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP does not contain undefined or null values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP every value is a valid React component",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP is a non-empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP keys are PascalCase (Lucide icon naming convention)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP specific commonly used icons exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > fetchDecodedPreview returns null when fetch throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > fetchDecodedPreview returns null when response is not ok",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > fetchDecodedPreview sends POST to /api/v1/preview with the file as FormData",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview handles uppercase extensions (case insensitive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns false for common browser-decodable formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns false for files without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for EXR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HDR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HEIF files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HIF files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for ICO files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for JXL files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for PSD files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for RAW formats (dng, cr2, nef, arw, orf, rw2)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for TGA files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > revokePreviewUrl calls URL.revokeObjectURL for any string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > revokePreviewUrl calls URL.revokeObjectURL with the given URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > triggerDownload creates an anchor element, clicks it, and removes it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > triggerDownload sets the href and download attributes on the anchor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter negative exposure darkens pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter positive exposure brightens pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter zero exposure is no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createGrainFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createGrainFilter modifies pixel values (adds noise)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createMotionBlurFilter blurs pixels in the direction of the angle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createMotionBlurFilter does not throw on edge pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createSharpenFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createSharpenFilter sharpens high-contrast edges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVibranceFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVibranceFilter neutral gray pixels remain neutral",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVibranceFilter positive vibrance increases saturation of dull pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVignetteFilter center pixel is minimally affected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVignetteFilter darkens corner pixels more than center pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createWarmthFilter does not modify green or alpha channels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createWarmthFilter negative warmth increases blue, decreases red",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createWarmthFilter positive warmth increases red, decreases blue",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns false for non-Error values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns false for unrelated errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for dynamically imported module error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for failed to fetch error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for loading CSS chunk error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for loading chunk error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for unable to preload error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > lazyWithRetry returns a React lazy component",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport only retries chunk-related errors, not other errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport rejects after all retries exhausted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport resolves on first success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport retries CSS preload errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport retries on failure and resolves on eventual success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > COLLAGE_TEMPLATES every template has a non-empty label",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > COLLAGE_TEMPLATES every template has cells matching or exceeding imageCount",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > COLLAGE_TEMPLATES has templates for counts 2 through 9",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > SKIP_KEYS contains expected internal keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > SKIP_KEYS does not contain display keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for missing key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for non-string/number values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for null exif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for undefined exif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns string value from exif object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns stringified number from exif object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats ExposureTime >= 1 as plain number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats ExposureTime as fraction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats FNumber with f/ prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats FocalLength with mm suffix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue handles arrays of exactly 6 items",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue joins short arrays with commas",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns 'N/A' for null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns 'N/A' for undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns plain number string for other numeric keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns string values as-is",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue stringifies other types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue summarizes long arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize formats bytes at or above 1 MB as MB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize formats bytes under 1 MB as KB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize formats values just below 1 MB threshold",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize handles zero bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getDefaultTemplate returns a template for count 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getDefaultTemplate returns first exact match for known count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getDefaultTemplate returns nearest template for unknown count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns default fallback for an unknown tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns suggestions for a known tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns suggestions for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns suggestions for remove-background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplateById finds a template by ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplateById returns undefined for unknown ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplatesForCount returns empty array for unsupported count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplatesForCount returns multiple templates for counts with variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplatesForCount returns templates matching a given image count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns false for files with no extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns false for standard browser-supported formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for EXR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for HDR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for HEIF files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for ICO files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for JPEG XL files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for PSD files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for TGA files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for camera RAW formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToEditor clears resultUrl and downloadUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToEditor preserves other state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToEditor sets phase to editor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToGallery clears all selection state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToGallery resets phase to gallery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToGallery revokes customImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants CATEGORIES has expected entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants FONT_FAMILY_MAP maps all font options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants FONT_OPTIONS has expected entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants PRESET_LAYOUTS has all 5 layouts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants PRESET_LAYOUTS have correct box structures",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates on fetch failure: sets error message and loading false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates on non-ok response: sets error with status code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates on success: sets templates from manifest and loading false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates sets loading true and error null on start",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on failure: sets error and generating false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on non-ok response with no body error: uses status code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on non-ok response: extracts error from body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on success: sets resultUrl, downloadUrl, phase result, generating false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme sets generating true on start",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme with custom file: sends FormData POST",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme with template: sends JSON POST (no FormData)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore initial state has correct defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore injectMemeFonts creates style element in document head and is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore reset resets everything to initial defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore reset revokes customImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate clears customFile, customImageUrl, and customLayout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate clears resultUrl, downloadUrl, error, and generating",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate creates textBoxValues from template textBoxes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate does not call revokeObjectURL when customImageUrl is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate revokes old customImageUrl if present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate sets phase to editor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate sets selectedTemplate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage clears selectedTemplate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage creates blob URL via URL.createObjectURL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage revokes old customImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage sets phase to layout-picker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage stores the file as customFile",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout creates textBoxValues from PRESET_LAYOUTS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout creates two text boxes for top-bottom layout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout falls back to top-bottom layout for unknown layout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout sets customLayout value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout sets phase to editor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setActiveCategory updates activeCategory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setAllCaps updates allCaps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setFontFamily updates fontFamily",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setFontSize updates fontSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setPhase updates phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setSearchQuery updates searchQuery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setStrokeColor updates strokeColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setTextAlign updates textAlign",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setTextColor updates textColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore updateTextValue handles non-existent id gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore updateTextValue leaves other text boxes unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore updateTextValue updates the correct text box by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) hides security, people, teams, roles when auth is disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) returns exactly 8 items for anonymous admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) shows audit-log (not authRequired, only needs audit:read)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) shows general, system, api-keys, ai-features, tools, analytics, about",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + admin includes auth-dependent sections",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + admin shows all 12 items for authenticated admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + user role hides permission-gated sections for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + user role returns exactly 6 items for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + user role shows general, security, api-keys, tools, analytics, about for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes email with only body (no subject)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes email with only subject (no body)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes empty text data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes sms with empty message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes vcard with only first name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes wifi with WEP encryption",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes wifi with no password (nopass)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useBase64Store expanded addResult followed by addError does not clear results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useBase64Store expanded setProgress with valid progress then null clears progress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useBase64Store expanded setResults replaces previous results entirely",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useDuplicateStore expanded overrideBest then reset clears all overrides",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useDuplicateStore expanded setScanning to false preserves other state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useDuplicateStore expanded setViewMode to overview preserves selectedGroupIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded loadSteps creates deep copies of settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded loadSteps with empty array clears all steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded removeStep with nonexistent ID is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded reorderSteps with one invalid ID is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded reorderSteps with same ID is effectively a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded updateStepSettings for nonexistent ID does not crash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setBgColor updates background color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerDotColor updates corner dot color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerDotType changes corner dot type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerSquareColor updates corner square color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerSquareType changes corner square type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientColor1 updates first gradient color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientColor2 updates second gradient color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientEnabled toggles gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientRotation updates rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientType changes gradient type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotType changes dot type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setHideBackgroundDots toggles background dots visibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setLogoMargin updates logo margin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setLogoSize updates logo size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setPhoneData updates phone data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setUseCustomCornerColors toggles custom corner colors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded getComputedTileDimensions in grid mode floors division",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded getEffectiveGrid returns columns/rows in tile-size mode without image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded getEffectiveGrid with tile-size computes ceil for non-exact divisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setColumns clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setError updates error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setImageDimensions updates dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setImageDimensions with null clears dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setOutputFormat updates format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setProcessing updates processing flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setQuality updates quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setRows clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setTileHeight clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setTileWidth clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setZipBlobUrl with null does not call revokeObjectURL when previous was null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib api network error → connection store does NOT trigger disconnected on HTTP errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib api network error → connection store triggers disconnected state on TypeError from fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDelete sends DELETE with Bearer token (no body)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDelete throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDownloadBlob handles special characters in filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDownloadBlob returns a Blob from the download URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDownloadBlob throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet omits Authorization header when no token is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet sends GET with Bearer token from localStorage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet throws on non-ok response (e.g., 401)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet throws on non-ok response (e.g., 500)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet throws when fetch itself rejects (network error)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPost sends POST with JSON body and Bearer token",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPost sends POST with undefined body when no body argument",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPost throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPut sends PUT with JSON body and Bearer token",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPut throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload appends multiple files to FormData under the same 'files' key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload does NOT set Content-Type (browser sets multipart boundary)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload sends FormData with files to /api/v1/upload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload sends empty FormData when given empty file array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload throws on non-ok response with status in message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib getDownloadUrl constructs the correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token freshness omits Authorization header after clearToken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token freshness reads the token from localStorage on each request, not cached",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token management clearToken is idempotent (no throw when key missing)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token management clearToken removes 'snapotter-token' from localStorage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token management setToken stores in localStorage under 'snapotter-token'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore addFiles appends new entries without revoking existing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore addFiles triggers async preview for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore all entries completed can be derived from entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore currentEntry returns entry at selectedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore currentEntry returns undefined when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore empty entries means nothing is processed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore entries.length reflects file count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore files getter maps entries to File[]",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigateNext advances selectedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigateNext does not exceed bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigatePrev decrements selectedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigatePrev does not go below 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore originalBlobUrl returns current entry blobUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore originalBlobUrl returns null when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore originalSize returns current entry originalSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore processedSize returns current entry processedSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore processedUrl returns current entry processedUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile adjusts selectedIndex when removing before it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile clamps selectedIndex if it was the last entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile removes entry and revokes its blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile revokes processedUrl if present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore reset clears everything and revokes all blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore reset with no entries does not call revokeObjectURL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileName returns current entry file name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileName returns null when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileSize returns current entry file size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileSize returns null when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setBatchZip stores blob and filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles clears error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles clears on empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles creates entries with blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles resets selectedIndex to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles revokes old blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles triggers async preview for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setJobId is a no-op (does not throw)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setProcessedUrl updates current entry processedUrl and status",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setProcessedUrl with null resets current entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setSizes updates current entry sizes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore undoProcessing keeps original blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore undoProcessing resets all entries to pending and revokes processed blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore updateEntry merges partial data into the entry at index",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > useAuth security — network error does NOT grant admin when API is unreachable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getCategoryName returns fallback for empty category id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getCategoryName returns fallback when category id is not in translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getCategoryName returns translated category name when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolDescription returns fallback when tool entry has no description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolDescription returns fallback when tool id is not in translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolDescription returns translated description when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns fallback for empty tool id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns fallback when tool entry has no name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns fallback when tool id is not in translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns translated name when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift display-mode map has no orphan entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift every TOOLS entry has a display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift every TOOLS entry has a frontend registry entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift every registry entry has a Settings component and a valid display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift registry has no orphan entries (tools removed from TOOLS but not the registry)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) PreviewPanel presence tools with PreviewPanel have the correct display modes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) ResultsPanel requirements all custom-results tools have a ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) ResultsPanel requirements tools with no-comparison mode do not require ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) displayMode distribution has at least one tool per display mode in use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) getToolRegistryEntry for all TOOLS each returned entry has Settings as a function or object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) getToolRegistryEntry for all TOOLS returns defined entry for every shared TOOLS entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) livePreview flag consistency live-preview display mode tools have livePreview flag set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) livePreview flag consistency non-live-preview display mode tools do not have livePreview flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) registry size and completeness every entry in registry has a matching TOOLS entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) registry size and completeness has the same number of entries as TOOLS array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations barcode-read uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations color-palette uses no-comparison display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations compare uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations info uses no-comparison display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations ocr uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations replace-color uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations sharpening uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations strip-metadata uses no-comparison display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations text-overlay uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations vectorize uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations watermark-image uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations watermark-text uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > CropSettingsWrapper renders CropSettings when cropProps is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > CropSettingsWrapper renders null when cropProps is undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > EraseObjectSettingsWrapper renders EraseObjectSettings when eraserProps is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > EraseObjectSettingsWrapper renders null when eraserProps is undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry no duplicate tool IDs in registry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for beautify with live-preview display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for color-blindness",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for content-aware-resize with side-by-side display (regression #131)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for meme-generator with ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry with ResultsPanel for find-duplicates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry with ResultsPanel for qr-generate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns the correct entry for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns the entry for a known tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns undefined for an unknown tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > makeColorSettingsComponent adjust-colors Settings renders without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry adjust-colors has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry beautify has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry border has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry color-blindness uses before-after display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains AI tool IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains all expected essential tool IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains format and conversion tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains layout and composition tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains utility tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry crop uses interactive-crop display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry erase-object uses interactive-eraser display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry every entry has a Settings component",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry every entry has a valid displayMode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry every tool in shared TOOLS[] has a matching registry entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry is a Map with entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry meme-generator has no-dropzone display mode with ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry rotate has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry split uses interactive-split display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry tools with custom-results display mode have a ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry tools with no-dropzone display mode have a ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry transparency-fixer uses before-after display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls deduplicates URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls extracts URLs from HTML img tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls extracts URLs from markdown links",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls extracts plain URLs one per line",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls filters out non-HTTP URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls handles mixed formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls preserves URLs with query parameters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls returns empty array for empty input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls strips bullet prefixes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls strips numbered list prefixes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > copyToClipboard falls back to execCommand when clipboard API fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > copyToClipboard returns false when both approaches fail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > copyToClipboard returns true when clipboard API succeeds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > generateId returns a valid UUID v4 string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > generateId returns unique values on successive calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/visibility-recovery.test.ts > visibility recovery connection monitor calls checkHealth when tab becomes visible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/visibility-recovery.test.ts > visibility recovery connection monitor does not call checkHealth when tab becomes hidden",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes email data as mailto URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes email without subject/body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes phone data as tel URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes sms data as smsto URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes text content type as plain text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes url/text content type as plain text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes vcard data in vCard 3.0 format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes vcard without optional fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes wifi data in WIFI: format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore acceptAnalytics calls API and sets consent to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore acceptAnalytics falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore declineAnalytics calls API and sets consent to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore declineAnalytics falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore fetchConfig loads config from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore fetchConfig sets configLoaded=true on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore fetchConfig skips when already loaded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore remindLater calls API and sets remind-at 7 days in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore remindLater falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore setConsent updates consent and calls setAnalyticsConsent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore toggleAnalytics disables analytics",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore toggleAnalytics enables analytics",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore toggleAnalytics falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store addError appends to errors array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store addResult appends to results array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store reset clears all state to initial values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setExpandedIndex updates expanded index",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setProcessing updates processing flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setProgress updates progress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setResults stores results and errors, resets expandedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages appends to existing images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages creates CollageImage entries and transitions to editing phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages preview callback handles image removed before resolve",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages preview callback handles null URL from fetchDecodedPreview",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages triggers async preview loading for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore clearImages revokes all blob URLs and resets to upload phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore removeImage removes image by index and revokes blob URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore removeImage resets when last image is removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore reset revokes all blob URLs and restores initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore resetCellTransform removes transform for a cell",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setAspectRatio updates aspect ratio",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setBackgroundColor updates backgroundColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setBgPreset updates preset and color for named presets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setBgPreset with custom does not overwrite backgroundColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setCellAssignment updates a single cell",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setCellTransform creates and merges transforms",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setCornerRadius updates corner radius",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setError sets error and returns to editing phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setGap updates gap and clears resultUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setOutputFormat updates output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setPhase updates phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setProgress updates progress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setQuality updates quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setResult sets result fields and transitions to result phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setSelectedCell updates selected cell",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setTemplateId changes template and rebuilds assignments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setTemplateId ignores unknown template IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore swapCells swaps assignments and transforms between two cells",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore overrideBest accumulates overrides per group",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore overrideBest replaces previous override for same group",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore reset clears everything",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setResults stores result and resets view state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setResults with null clears results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setScanning updates scanning flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setSelectedGroup sets index and switches to detail view",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setViewMode changes view mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore EventSource onerror closes and falls back to polling",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore clearError is a no-op for nonexistent bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore clearError removes a specific bundle error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch loads bundles from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch recovers active installs on load",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch recovers active installs with default progress when none given",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch retries when loadError is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch sets loaded=true and loadError=true on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch triggers background refresh when already loaded without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore getBundleForTool returns null for unmapped tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore getBundleForTool returns null when bundle not found in bundles list",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore getBundleForTool returns the bundle for a mapped tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installAll clears stale errors for pending bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installAll processes all not-installed bundles sequentially",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installAll skips bundles that are already installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle clears previous error for that bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle sets error on API failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle sets initial progress and calls API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns false for tools whose bundle is not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns false when bundle exists but is in error state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns false when bundle is installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns true for tools whose bundle is installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns true for tools without a bundle mapping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress handles complete phase from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress handles failed phase from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress handles progress updates from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress uses max of current and new percent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore refresh silently ignores API errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore refresh updates bundles from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore reinstallBundle calls uninstall then install",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore uninstallBundle calls API and refreshes bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore uninstallBundle sets error on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore uninstallBundle sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert handles JSON parse failure on error response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert is a no-op when no file is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sends compact page range for specific selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sends file with settings and stores results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sets error on HTTP failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sets error on network exception",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert uses 'all' when pages is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore deselectAllPages clears selection and sets pages to 'none'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview fetches preview and sets pageCount and thumbnails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets error on HTTP failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets error on fetch failure with fallback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets error on network exception",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore reset restores initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore selectAllPages is a no-op when pageCount is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore selectAllPages selects all pages when pageCount is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setColorMode updates color mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setCustomDpi updates customDpi flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setDpi updates dpi",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setFile with a File resets results and pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setFile with null resets to initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setFormat updates format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with 'all' selects all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with empty string selects all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with invalid range falls back to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with null pageCount yields empty selectedPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with out-of-range page falls back to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with single page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with valid range sets selectedPages from parsed range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setQuality updates quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage adds and removes pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage clearing all pages sets empty pages string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage updates pages string as compact range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage with non-contiguous pages shows individual values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore addStep adds a step with generated ID and expands it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore addStep appends additional steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore loadSteps replaces all steps with new ones and clears expanded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore removeStep clears expandedStepId if removed step was expanded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore removeStep preserves expandedStepId if different step removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore removeStep removes the step by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore reorderSteps no-ops for invalid ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore reorderSteps swaps two steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore reset clears all state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore setExpandedStep updates the expanded step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore setSavedPipelines stores the pipeline list",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore updateStepSettings merges settings into the step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore updateStepSettings replaces settings entirely",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore reset restores all defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setBgTransparent toggles background transparency",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setContentType changes content type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setDotColor updates dot color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setDownloadFormat updates download format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setEmailData merges partial email data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setErrorCorrection updates error correction level",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setLogoFile with a File reads it as a data URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setLogoFile with null clears logo data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setLogoFile(null) after a file clears both fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setSize updates size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setSmsData merges partial sms data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setTextData updates text data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setVcardData merges partial vcard data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setWifiData merges partial wifi data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch applies server default theme when no user preference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch defaults defaultTheme to light for invalid values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch defaults defaultToolView to sidebar for unknown values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch does not override user theme preference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch handles empty disabledTools gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch loads settings from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch retries when loadError is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch sets loaded=true and loadError=true on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch skips when already loaded without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore applyPreset sets mode to grid with given cols/rows",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getComputedTileDimensions computes tile size in grid mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getComputedTileDimensions returns null without image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getComputedTileDimensions returns tile size in tile-size mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getEffectiveGrid computes from tile size in tile-size mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getEffectiveGrid returns columns/rows in grid mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getTileCount returns columns * rows",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore reset revokes zip and tile blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setColumns clamps to 1-100 range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setMode changes mode and clears tiles/zip/error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setRows clamps to 1-100 range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setTileHeight clamps to minimum 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setTileWidth clamps to minimum 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setZipBlobUrl revokes previous URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore applyServerDefault applies theme when no user-set flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore applyServerDefault does not set user-set flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore applyServerDefault skips when user-set flag exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme sets user-set flag in localStorage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme to dark updates theme and resolvedTheme",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme to light updates theme and resolvedTheme",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme to system resolves based on matchMedia",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore system theme resolves to dark when matchMedia prefers dark"
],
"passSet": [
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback does not retry on non-OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback does not retry when already using u2net",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback fires progress callback on fallback retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback propagates error if fallback also fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback retries with fallback when no model is specified (default)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback retries with u2net when OOM is detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback throws when OOM fallback succeeds at bridge level but Python returns success: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback uses 300000ms timeout for the u2net fallback attempt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground OOM fallback uses fallback error message when OOM fallback returns success: false without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases handles missing width and height from metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases passes backgroundColor option in args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling propagates bridge timeout errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling propagates sharp conversion errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling throws fallback error when success: false and no error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground error handling throws when Python returns success: false with custom error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling calls resize when longest edge exceeds 2048px",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling constrains by height when portrait orientation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling does not call resize when image is within limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling does not upscale mask when image was not downscaled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground image downscaling upscales mask back to original dimensions after processing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground onProgress forwarding passes onProgress callback through to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground onProgress forwarding passes undefined onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization calls remove_bg.py with input path, output path, and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization converts input to PNG via sharp before writing to disk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes all post-processing options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes backgroundColor option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes both model and backgroundColor together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes decontaminate option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes edgeRefine option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization serializes model option into the args JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization uses unique UUID in temp file names to prevent collisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground request serialization writes input to system tmpdir, output to outputDir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground response parsing passes stdout through parseStdoutJson",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground response parsing reads the output file and returns its buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup cleans up both input and output temp files on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup cleans up temp files when Python returns failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup cleans up temp files when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground temp file cleanup does not throw if unlink fails (swallows cleanup errors)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation scales timeout with megapixels for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses 300000ms base timeout for non-birefnet models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses 600000ms base timeout for birefnet models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses 600000ms base timeout for birefnet-massive model",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/background-removal.test.ts > removeBackground timeout calculation uses default 300000ms base when model is not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PROCESSING_TIMEOUT_S env for dispatcher path ignores negative PROCESSING_TIMEOUT_S and uses default 600s",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PROCESSING_TIMEOUT_S env for dispatcher path ignores zero PROCESSING_TIMEOUT_S and uses default 600s",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PROCESSING_TIMEOUT_S env for dispatcher path uses PROCESSING_TIMEOUT_S for dispatcher requests when no explicit timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PYTHON_VENV_PATH env handling passes PYTHON_VENV_PATH through to env when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - PYTHON_VENV_PATH env handling uses custom PYTHON_VENV_PATH when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - buildMinimalEnv LANG fallback defaults LANG to C.UTF-8 when LANG is not set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - buildMinimalEnv LANG fallback passes through LANG when set in parent env",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - concurrent dispatcher requests with timeouts one request timing out does not prevent other requests from resolving",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher crash retry annotation appends retry annotation to stderr when dispatcher crashes and per-request succeeds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher crash retry annotation does not retry per-request for non-crash errors (e.g. timeout)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher error event extracts error for pending requests dispatcher error with non-ENOENT code rejects pending requests with extracted error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher malformed stdout responses handles response where exitCode is missing (treated as undefined !== 0)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher malformed stdout responses ignores response with valid JSON but missing id field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher malformed stdout responses ignores truncated JSON on stdout and processes next valid response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr interleaving with stdout responses handles empty lines in stderr between valid progress events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr interleaving with stdout responses handles multiple progress events interleaved between two responses",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr interleaving with stdout responses handles stderr arriving between split stdout response chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr non-progress JSON does not invoke onProgress for JSON with progress as string type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr non-progress JSON does not invoke onProgress for JSON with stage as number type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stderr non-progress JSON handles ready=true signal after dispatcher was already ready (idempotent)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stdin error suppression does not crash when stdin emits an error event",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stdin write failure falls back to per-request after dispatcher stdin write failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher stdin write failure retries per-request when dispatcher stdin.write throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - dispatcher timeout recovery timeout kills the dispatcher so subsequent requests can restart it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars does not include unset vars in subprocess env",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars passes DATA_DIR to subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars passes DISPATCHER_MAX_REQUESTS to subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - env passthrough for sidecar-specific vars passes U2NET_HOME to subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches extracts error from stderr JSON with error field on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches extracts error from stdout JSON when stderr is empty on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches extracts non-traceback stderr as plain text error on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - extractPythonError uncovered branches uses message field when error object has only message property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - graceful shutdown during active requests shutdown during active request triggers SIGTERM and the request retries per-request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - graceful shutdown during active requests shutdown with multiple active requests causes all to retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - initDispatcher additional edge cases handles concurrent initDispatcher calls -- both resolve with same result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - initDispatcher additional edge cases resolves with ready=false when getDispatcher returns null during backoff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with backslash in path values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with boolean false and empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with curly braces inside string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with newline characters in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with tab characters in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases handles JSON with zero/negative number values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases throws on stdout containing brace pair with invalid content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - parseStdoutJson additional boundary cases throws on stdout containing only opening brace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - per-request ENOENT retry with non-ENOENT fallback error venv ENOENT triggers python3 fallback, non-ENOENT on fallback rejects directly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge-extended.test.ts > bridge - per-request stderr buffer flush on error exit includes partial stderr buffer in error when process exits non-zero",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - backoff prevents restart during cooldown second crash has 2x the backoff delay of the first crash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests dispatcher crash rejects all pending concurrent requests with retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests one failing request does not affect other concurrent requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests progress events on stderr are forwarded to all pending requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - concurrent dispatcher requests sends multiple concurrent requests to the same dispatcher process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - crash recovery resets on successful readiness resets consecutiveCrashes to 0 when dispatcher becomes ready",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher error event handling ENOENT error permanently disables the dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher error event handling non-ENOENT dispatcher error increments crash counter and clears dispatcher state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher error event handling non-ENOENT error records a crash but does not permanently disable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress concurrent requests to per-request fallback both resolve",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher close event rejects all pending requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher progress events are forwarded to pending request callbacks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher ready signal sets dispatcherReady and processes requests via dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher ready signal with GPU=false sets gpu to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher stderr collects non-JSON non-bracket lines as error output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress dispatcher stderr routes diagnostic messages with bracket prefix to logger",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress does not count exit code 0 as a crash (normal MAX_REQUESTS restart)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress falls back to per-request spawn when dispatcher ENOENT marks it failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress getDispatcherStatus reflects consecutiveCrashes after dispatcher crashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress graceful shutdown does not throw when dispatcher already exited",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress handles dispatcher crash followed by successful per-request retry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress per-request fallback retries with python3 when venv python fails with ENOENT",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress reports failed status when dispatcher ENOENT occurs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress shutdown is idempotent when called multiple times",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress still counts non-zero exit codes as crashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher lifecycle via runPythonWithProgress timeout rejects the promise without affecting other requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher request timeout kills the dispatcher on timeout so subsequent requests can proceed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher request timeout rejects with timeout when dispatcher does not respond within timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior calls kill(SIGTERM) on the dispatcher process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior calls stdin.end() before killing the process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior does not change GPU status after shutdown (isGpuAvailable returns module-level state)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher shutdown behavior sets status to not running and not ready after shutdown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering buffers partial JSON progress lines across stderr chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering does not fire progress for partial JSON that is not yet complete",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering handles multiple complete lines in a single stderr chunk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stderr partial buffering handles readiness signal split across stderr chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol collects stderr lines and returns them with the response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol generates a unique UUID id for each request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol handles chunked stdout responses split across data events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol ignores stdout lines that are not valid JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol ignores stdout responses with unknown request IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol rejects the correct request when dispatcher returns non-zero exitCode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol rejects with OOM message when dispatcher response has exitCode 137",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol rejects with segfault message when dispatcher response has exitCode 139",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol returns empty stdout when dispatcher response omits stdout field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol routes responses by ID to the correct pending request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol strips .py extension from script name in dispatcher request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdin JSON-RPC protocol writes a JSON-line with id, script (without .py), and args to dispatcher stdin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdout partial line buffering handles dispatcher response split across 3 or more stdout chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - dispatcher stdout partial line buffering handles two complete responses in a single stdout data event",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError coverage via per-request path extracts error from JSON on stdout when non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError coverage via per-request path extracts last meaningful line from traceback when error is only in stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError coverage via per-request path returns generic exit code message when stderr has only the traceback header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError via dispatcher responses extracts error from JSON stdout in dispatcher response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError via dispatcher responses extracts error from traceback in dispatcher stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - extractPythonError via dispatcher responses uses generic exit code message when dispatcher stderr and stdout are both empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - getDispatcherStatus returns initial state with no dispatcher running",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher edge cases resolves with ready=false when dispatcher fails during init timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher edge cases returns ready=false immediately when dispatcher already permanently failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher edge cases returns ready=false when spawn throws synchronously",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher is idempotent -- second call returns same result without respawning",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with gpu=false when dispatcher reports no GPU",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with ready=false after timeout when dispatcher never signals ready",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with ready=false when dispatcher fails with ENOENT",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - initDispatcher resolves with ready=true and gpu status after dispatcher emits readiness",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - isGpuAvailable returns false by default (no dispatcher started)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold after reaching crash threshold, subsequent requests go directly to per-request path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold does not reach threshold when fewer than 5 crashes occur",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold resets crash counter outside the 60s crash window",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold sets dispatcherFailed after 5 consecutive crashes within the crash window",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - max consecutive crash threshold uses exponential backoff delay between crash restarts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON preceded by ANSI escape codes in stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with empty arrays and nested empty objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with escaped quotes in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with negative numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with only whitespace before the object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions handles JSON with very long string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson boundary conditions throws on truncated JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases extracts JSON that follows multiple non-JSON log lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with array values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with boolean and null values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with numeric values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles JSON with unicode characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases handles deeply nested JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson edge cases throws on stdout that is only whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson extracts JSON from stdout with leading progress lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson extracts JSON object from clean stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson extracts JSON with special characters in string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson handles multiline JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson matches greedily from first brace to last brace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws on empty stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws when JSON is malformed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws when multiple JSON objects produce invalid merged JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - parseStdoutJson throws when stdout contains no JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases does not invoke onProgress for JSON stderr that lacks progress field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases does not invoke onProgress for JSON stderr that lacks stage field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases handles empty stdout with successful exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases handles large stdout that arrives in many small chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases handles stderr that mixes progress JSON and regular text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - per-request fallback edge cases per-request stderr JSON with only progress is not collected as error output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) accumulates multiple stderr chunks into a single string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) does not invoke onProgress for JSON without progress field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) does not invoke onProgress for non-JSON stderr lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) extracts error from JSON stderr when Python writes structured errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) extracts last line from Python traceback on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) flushes partial stderr buffer on process close",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) handles chunked stdout data arriving in multiple events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) handles stderr output that is not JSON (regular log lines)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) ignores empty stderr lines during progress parsing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) ignores invalid PROCESSING_TIMEOUT_S values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) includes exit code in error when no signal and no stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) invokes onProgress callback for JSON progress lines on stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) passes script path and args to spawn correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects when spawn emits ENOENT error and fallback also fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with OOM message on exit code 137 (SIGKILL)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with error message on non-zero exit code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with segfault message on exit code 139 (SIGSEGV)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) rejects with timeout error when process exceeds timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) resolves with stdout/stderr on successful exit (code 0)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) treats SIGKILL signal as OOM error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) treats SIGSEGV signal as segfault error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - runPythonWithProgress (per-request fallback) uses PROCESSING_TIMEOUT_S env var when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/bridge.test.ts > bridge - shutdownDispatcher does not throw when no dispatcher is running",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize edge cases handles zero width and height in response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling propagates bridge rejection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling throws fallback error when success: false and no error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize error handling throws when Python returns success: false with custom error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize onProgress forwarding passes onProgress callback to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization calls colorize.py with input path, output path, and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization serializes both intensity and model together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization serializes intensity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize request serialization serializes model option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing defaults method to 'unknown' when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing preserves width and height from Python response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing reads from alternate output_path when provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing reads from default output path when output_path not in response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize response parsing returns ColorizeResult with buffer, width, height, and method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/colorization.test.ts > colorize sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization calls detect_faces.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization serializes blurRadius option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization serializes both blurRadius and sensitivity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces request serialization serializes sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing defaults faces to empty array when field absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing reads the output file for the blurred image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing returns BlurFacesResult with multiple face regions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > blurFaces response parsing returns empty faces array when none detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces edge cases converts input to PNG before writing to tmpdir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces edge cases propagates sharp conversion errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces edge cases propagates writeFile errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces error handling propagates segfault error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces error handling throws fallback error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization calls detect_faces.py with detectOnly: true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization merges user sensitivity with detectOnly flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization passes 'unused' as the output path argument",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces request serialization writes input to tmpdir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces response parsing defaults faces to empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces response parsing returns DetectFacesResult without a buffer property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces temp file cleanup cleans up temp file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces temp file cleanup cleans up temp input file after failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-detection.test.ts > detectFaces temp file cleanup cleans up temp input file after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces edge cases handles response with zero facesDetected and non-empty faces array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces edge cases propagates segfault errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization calls enhance_faces.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes model option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes onlyCenterFace option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces request serialization serializes strength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing defaults faces to empty array when absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing defaults model to 'unknown' when absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing reads the enhanced output file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing returns EnhanceFacesResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces response parsing returns multiple face regions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-enhancement.test.ts > enhanceFaces sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases handles faceDetected true with missing landmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks edge cases uses timestamps in temp file names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling propagates OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks request serialization calls face_landmarks.py with input path, 'unused', and '{}'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks request serialization converts input buffer to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks request serialization writes to system tmpdir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing defaults imageHeight to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing defaults imageWidth to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing defaults landmarks to null when field is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns all landmark points when face is detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns both dimensions as 0 when both absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns imageWidth and imageHeight from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns individual landmark points correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks response parsing returns null landmarks when no face detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup cleans up temp input file after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup cleans up temp input file when Python returns failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup cleans up temp input file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/face-landmarks.test.ts > detectFaceLandmarks temp file cleanup does not throw if unlink fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough always includes PYTHONUNBUFFERED=1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough does not include SNAPOTTER_GPU when not set in parent env",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough does not leak unrelated env vars to Python subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough does not pass MODELS_DIR (removed dead entry)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes CUDA_VISIBLE_DEVICES when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes LD_LIBRARY_PATH when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes MODELS_PATH to Python subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/gpu-detection.test.ts > buildMinimalEnv - env passthrough passes SNAPOTTER_GPU to Python subprocess",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint edge cases propagates writeFile error when writing input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates bridge OOM",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling propagates sharp conversion errors on input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization calls inpaint.py with input, mask, and output paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization converts both input and mask to PNG via sharp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization does not pass any options argument (only 3 args)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint request serialization writes both input and mask files to disk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint response parsing reads from the correct output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint response parsing returns output buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/inpainting.test.ts > inpaint sharp conversion errors propagates sharp error on mask conversion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases handles zero dimensions from metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval parseStdoutJson error propagation propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization calls noise_removal.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes colorNoise option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes detailPreservation option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes strength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval request serialization serializes tier option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing defaults format to 'png' when absent from response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing defaults tier from Python response when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing falls back to 'balanced' when both Python and options omit tier",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing falls back to options tier when Python omits it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing reads from default output path when output_path not in response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval response parsing returns NoiseRemovalResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval sharp conversion converts input to PNG and writes to outputDir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval sharp conversion propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval timeout calculation scales timeout for large images using megapixels * 120000",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval timeout calculation uses metadata from the PNG-converted buffer for timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/noise-removal.test.ts > noiseRemoval timeout calculation uses minimum 300000ms timeout for small images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases handles zero dimensions from metadata for timeout calculation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases passes empty options as empty JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText image downscaling caps input to 2048px using resize with inside fit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText multiline and unicode text handles multiline OCR text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText multiline and unicode text handles unicode text from CJK languages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization calls ocr.py with input path and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization resizes input to max 2048px before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes deprecated engine option for backward compatibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes enhance option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes language option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization serializes quality option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText request serialization writes resized PNG to outputDir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns OcrResult with text and engine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns empty text string when no text detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns engine information",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns text with special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText response parsing returns undefined engine when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText sharp conversion errors propagates sharp conversion errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText timeout calculation scales timeout for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ocr.test.ts > extractText timeout calculation uses minimum 600000ms timeout for small images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint edge cases handles zero extension on all sides",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates bridge OOM",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling propagates sharp conversion error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint module exports accepts a valid OutpaintOptions object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint module exports exports outpaint as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization calls outpaint.py with input, output, and extension args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization converts input to PNG via sharp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization passes 'fast' tier value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization passes custom tier value instead of default 'balanced'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint request serialization writes input file to disk",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint response parsing reads from the correct output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/outpaint.test.ts > outpaint response parsing returns output buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling propagates bridge segfault",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization calls red_eye_removal.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye request serialization serializes strength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing defaults eyesCorrected to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing defaults facesDetected to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing defaults format to 'png' when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing handles multiple faces with multiple corrections",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing reads from default output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing reports zero corrections when no red eyes found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye response parsing returns RedEyeRemovalResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/red-eye-removal.test.ts > removeRedEye sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases handles single-step restoration pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling propagates OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization calls restore.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes colorize option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes colorizeStrength option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes denoise and denoiseStrength options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes faceEnhancement option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes fidelity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto request serialization serializes scratchRemoval option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults colorized to false when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults facesEnhanced to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults isGrayscale to false when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults scratchCoverage to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing defaults steps to empty array when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing preserves multi-step restoration pipeline info",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing reads from default output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto response parsing returns RestorePhotoResult with all fields populated",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/restoration.test.ts > restorePhoto sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve accepts 75% reduction exactly (ratio = 0.25)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve always passes -preview=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve caches the caire binary path after first discovery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve cleans up temp files even when image is too large",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve cleans up temp files on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve cleans up temp files on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve does not pass -blur and -sobel when not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve does not pass -face when protectFaces is false or absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve does not pass width/height args when not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve falls back to default caire when CAIRE_PATH is not set and caire is in PATH",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve handles zero dimensions from metadata gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve includes megapixels in the too-large error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes blurRadius and sobelThreshold options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes only height when width is not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes only width when height is not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes protectFaces option as -face flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve passes width and height args to caire",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve pre-resizes large image for square mode with small target",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve pre-resizes when height reduction exceeds 75%",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve pre-resizes when width reduction exceeds 75%",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates readFile error when reading caire output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates sharp jpeg conversion error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates sharp metadata error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve propagates writeFile error when writing input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve returns SeamCarveResult with output dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve scales timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve square mode uses shortest dimension for both width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve throws when caire binary is not found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve throws when image exceeds 25 MP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve timeout is always an integer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses CAIRE_PATH env var when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses default width and height when no options are specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses square mode with shortest side",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve uses unique UUID in temp file names to prevent collisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/seam-carving.test.ts > seamCarve writes JPEG input and reads PNG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE does NOT match data: CSS url()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches @import with bare URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches @import with double-quoted URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches @import with single-quoted URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches double-slash CSS url()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_CSS_URL_RE matches single-slash CSS url()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE does NOT match data: URIs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE does NOT match relative paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches double-slash http img",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches double-slash https img",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches formaction attribute",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches poster attribute",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches single-slash http img (pandoc rewrite)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches single-slash https img",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/ssrf-prescan-regex.test.ts > SSRF pre-scan regexes (doc_html_pdf.py) _REMOTE_REF_RE matches srcset attribute",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OCR dynamic timeout uses megapixel-based timeout for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through detectFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > OOM propagation through all tools propagates OOM through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python noiseRemoval reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python removeRedEye reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python restorePhoto reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > alternate output_path from Python upscale reads from alternate output_path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces calls runPythonWithProgress with detect_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces passes blur options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces returns BlurFacesResult with face regions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces returns empty faces array when none detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > blurFaces throws when detection fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize calls runPythonWithProgress with colorize.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize passes intensity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize returns ColorizeResult with buffer and metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > colorize throws when colorization fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result blurFaces surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result detectFaceLandmarks surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result noiseRemoval surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result removeBackground surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result removeRedEye surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result restorePhoto surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > custom error messages from Python result upscale surfaces Python error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields blurFaces defaults faces to empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields colorize defaults method to unknown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields detectFaceLandmarks defaults imageWidth and imageHeight to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields enhanceFaces defaults faces to empty array and model to unknown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields noiseRemoval defaults format and tier from options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > default values for optional response fields removeRedEye defaults format to png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks calls runPythonWithProgress with face_landmarks.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks cleans up temp file even on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks cleans up temp file in finally block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks converts input buffer to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks returns FaceLandmarksResult with all landmark points",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaceLandmarks returns null landmarks when no face detected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces calls runPythonWithProgress with detectOnly option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces cleans up temp input file after failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces cleans up temp input file after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > detectFaces returns DetectFacesResult without buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces calls runPythonWithProgress with enhance_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces defaults model to unknown when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces passes enhancement options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces returns EnhanceFacesResult with model info",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > enhanceFaces throws when enhancement fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates OOM errors through tool functions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates bridge rejection through tool functions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates segfault through detectFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through removeBackground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > error propagation from bridge propagates timeout through upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) calls runPythonWithProgress with ocr.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) passes quality and language options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) returns OcrResult with text and engine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) throws when OCR fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > extractText (OCR) uses fallback error message when no error string provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent blurFaces uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent colorize uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent detectFaceLandmarks uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent detectFaces uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent enhanceFaces uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent noiseRemoval uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent removeBackground uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent removeRedEye uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent restorePhoto uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > fallback error messages when error string is absent upscale uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint calls runPythonWithProgress with inpaint.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint returns the output buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint throws when inpainting fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint uses fallback error message when no error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > inpaint writes both input and mask files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval calls runPythonWithProgress with noise_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval defaults tier from options when Python omits it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval passes strength and tier options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval returns NoiseRemovalResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > noiseRemoval throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding blurFaces forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding colorize forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding detectFaceLandmarks forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding detectFaces forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding enhanceFaces forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding inpaint forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding noiseRemoval forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding removeRedEye forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding restorePhoto forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > onProgress forwarding upscale forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization blurFaces passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization detectFaceLandmarks passes fixed unused and empty options args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization detectFaces merges user options with detectOnly flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization noiseRemoval passes all option fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization removeBackground passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization removeRedEye passes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization restorePhoto passes all option fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization upscale passes all option fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > option serialization upscale passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through detectFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through extractText",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through removeBackground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > parseStdoutJson throws in tool pipeline propagates parse error through upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run blurFaces propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run colorize propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run enhanceFaces propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run inpaint propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run noiseRemoval propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run removeRedEye propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run restorePhoto propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > readFile errors after successful Python run upscale propagates readFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground calls runPythonWithProgress with remove_bg.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground cleans up temp files on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground cleans up temp files on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground dynamic timeout uses megapixel-based timeout for large images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground passes onProgress callback to runPythonWithProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground passes options as JSON string argument",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground returns the output buffer on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground throws when Python returns success: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeBackground uses higher timeout for birefnet models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye calls runPythonWithProgress with red_eye_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye defaults facesDetected and eyesCorrected to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye passes sensitivity and strength options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye returns RedEyeRemovalResult with correction counts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > removeRedEye throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto calls runPythonWithProgress with restore.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto defaults optional fields when Python omits them",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto passes restoration options including scratch and colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto returns RestorePhotoResult with all metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > restorePhoto throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through blurFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through colorize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through detectFaceLandmarks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through enhanceFaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through inpaint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through noiseRemoval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through removeBackground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through removeRedEye",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through restorePhoto",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > segfault propagation through all tools propagates segfault through upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > temp file cleanup on bridge rejection detectFaceLandmarks cleans up temp file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > temp file cleanup on bridge rejection detectFaces cleans up temp file when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > temp file cleanup on bridge rejection removeBackground cleans up when bridge rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale calls runPythonWithProgress with upscale.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale defaults method and format when not provided by Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale passes scale and model options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale reads from output_path when Python provides alternate path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale returns UpscaleResult with dimensions and method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > upscale throws when Python returns success: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run blurFaces propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run colorize propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run detectFaceLandmarks propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run detectFaces propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run enhanceFaces propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run inpaint propagates writeFile error on input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run noiseRemoval propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run removeRedEye propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run restorePhoto propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/tools.test.ts > writeFile errors before Python run upscale propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing defaults language to en when missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing defaults text to empty string when missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing returns empty segments when segments field is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing returns empty segments when segments is not an array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio defensive parsing returns empty segments when segments is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling propagates OOM errors from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio error handling throws when Python returns an error field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization always includes task: transcribe",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization calls transcribe.py with input path and options JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization serializes a specific language",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio request serialization uses 30 minute timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio response parsing returns detected language",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio response parsing returns language, text, and segments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping defaults missing start/end to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping defaults missing text to empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping maps python start/end to startS/endS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/transcription.test.ts > transcribeAudio segment key mapping trims segment text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases passes empty options as empty JSON object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases propagates readFile error after successful Python run",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases propagates segfault from bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale edge cases propagates writeFile error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling propagates OOM errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling propagates bridge timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling propagates parseStdoutJson errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling throws fallback error when success: false without error string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale error handling throws with custom error from Python",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale onProgress forwarding omits onProgress when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale onProgress forwarding passes onProgress to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization calls upscale.py with correct file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization converts input to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes all options together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes denoise option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes faceEnhance option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes format and quality options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes model option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale request serialization serializes scale option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing defaults format to 'png' when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing defaults method to 'unknown' when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing reads from alternate output_path when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing reads from default output path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing returns UpscaleResult with all fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale response parsing returns correct dimensions for 4x upscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale sharp conversion errors propagates sharp toBuffer error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation defaults scale to 2 when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation handles zero dimensions from metadata gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation passes a timeout to runPythonWithProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation provides generous timeout for CPU upscale at high scale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation scales timeout with image megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation scales timeout with scale factor squared",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation uses minimum timeout of 600s for small images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/ai/upscaling.test.ts > upscale timeout calculation uses shorter timeout when GPU is available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> accept immediately -> never show again",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> decline immediately -> never show again",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> maybe later -> remind time NOT yet passed -> stay hidden",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > consent lifecycle simulations fresh -> maybe later -> remind time passes -> show again -> accept",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > isConsentEnabled edge cases returns false when analyticsEnabled is false (explicitly declined)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > isConsentEnabled edge cases returns false when analyticsEnabled is null (never decided)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > isConsentEnabled edge cases returns false when server disabled even if user opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns false when remindAt is 1ms in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns false when server is disabled regardless of remindAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns true after 'Maybe later' and 7 days have passed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns true when remindAt is exactly equal to Date.now()",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent-extended.test.ts > shouldShowConsent edge cases returns true when remindAt is set but consentShownAt is null (defensive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > isConsentEnabled returns false when server disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > isConsentEnabled returns false when user has not consented",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > isConsentEnabled returns true when user opted in and server enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when remind-at is in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when server has analytics disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when user already opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns false when user explicitly declined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns true for a fresh user who has never been asked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-consent.test.ts > shouldShowConsent returns true when remind-at has passed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS AI_BUNDLE_ACTION has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS PIPELINE_EXECUTED has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS SEARCH has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS TOOL_USED has the correct snake_case value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS all event values are strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS all values are unique (no duplicate event names)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS all values follow snake_case convention",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS contains the expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS has exactly 4 event keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-events.test.ts > ANALYTICS_EVENTS is frozen (as const prevents mutation)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type accepts a config with analytics disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type accepts a fully populated config object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type accepts fractional sample rates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > AnalyticsConfig type has exactly the expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts all-null state (fresh user)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts declined state (analyticsEnabled = false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts deferred state (maybe later with remindAt set)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts mixed state with analyticsEnabled true and remindAt set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type accepts opted-in state (analyticsEnabled = true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/analytics-types.test.ts > ConsentState type has exactly the expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery ENOENT error permanently disables dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery applies exponential backoff between crash restarts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery increments crash count on non-zero close",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery marks dispatcher as permanently failed after max consecutive crashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery rejects all pending requests on dispatcher error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery rejects pending requests when dispatcher closes unexpectedly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - crash recovery retries with per-request mode after dispatcher crash during request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - getDispatcherStatus reports not running initially",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - getDispatcherStatus reports running after init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher is idempotent when already ready",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher returns ready:false on timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher returns ready:false when dispatcher failed permanently",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - initDispatcher spawns python process with dispatcher.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - isGpuAvailable returns false when dispatcher has not started",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - isGpuAvailable returns false when dispatcher reports no GPU",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - isGpuAvailable returns true when dispatcher reports GPU",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson extracts JSON object from the end of stdout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson handles nested JSON objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson handles stdout that is only JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson throws on empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - parseStdoutJson throws when no JSON object is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing collects non-JSON stderr as error context for failed requests",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing ignores non-JSON stderr lines (logs them, does not crash)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing readiness signal sets GPU status",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - progress event parsing routes JSON progress events from stderr to onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) clears timeout on successful response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) extracts error from JSON stdout on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) handles concurrent requests matched by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) rejects on non-zero exit code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) rejects with timeout error and kills dispatcher",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) resolves with stdout and stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) returns OOM message for exit code 137",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) returns segfault message for exit code 139",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) routes progress events to the onProgress callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) sends JSON-lines request to dispatcher stdin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) strips .py from script name in dispatcher request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (dispatcher path) uses PROCESSING_TIMEOUT_S env var when set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) falls back to per-request mode when dispatcher is not available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request SIGKILL maps to OOM message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request SIGSEGV maps to segfault message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request fallback tries system python3 on ENOENT",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request mode parses progress events on stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request mode rejects on non-zero exit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - runPythonWithProgress (per-request fallback) per-request mode rejects on timeout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - shutdownDispatcher is safe to call when no dispatcher is running",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - shutdownDispatcher kills the dispatcher process",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - shutdownDispatcher marks status as not running after shutdown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-bridge.test.ts > AI Bridge - stdout buffering (partial JSON lines) handles response split across multiple chunks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces calls runPythonWithProgress with detect_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces defaults faces to empty array when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces passes blur options in args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces returns buffer, facesDetected, and faces array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > blurFaces throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize calls runPythonWithProgress with colorize.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize defaults method to 'unknown' when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize forwards onProgress callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize passes options as JSON in args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize returns structured result with buffer, dimensions, and method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > colorize uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools accept default empty options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools call parseStdoutJson on the result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools convert input to PNG via sharp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > cross-cutting tool patterns all Python tools propagate runPythonWithProgress errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks calls face_landmarks.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks cleans up temp file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks converts input buffer to PNG before writing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks defaults dimensions to 0 when absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks passes 'unused' as output path and empty JSON options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks returns landmarks result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks returns null landmarks when no face found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaceLandmarks throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces cleans up temp file even on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces cleans up temp input file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces merges sensitivity option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces passes 'unused' as outputPath arg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces passes detectOnly: true in options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > detectFaces returns facesDetected and faces without a buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces calls enhance_faces.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces defaults model to 'unknown'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces passes all options through",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces returns result with buffer, facesDetected, faces, and model",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > enhanceFaces throws on failure with specific error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) calls ocr.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) resizes image to max 2048px",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) returns text and engine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > extractText (OCR) throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint calls inpaint.py with input, mask, and output paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint converts both input and mask to PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint forwards onProgress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint returns the output buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > inpaint writes both input and mask files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval calls noise_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval defaults format and tier",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval prefers tier from result over options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval returns structured result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > noiseRemoval uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground calls runPythonWithProgress with remove_bg.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground cleans up temp files even on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground cleans up temp files in finally block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground does not retry OOM if already using u2net",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground downscales large images and upscales mask back",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground passes onProgress callback through to bridge",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground passes options as JSON in args",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground provides fallback error message when error field is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground retries with u2net fallback on OOM error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground returns the output file buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground throws when Python reports failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground uses longer base timeout for birefnet model",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeBackground writes input as PNG before processing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye calls red_eye_removal.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye defaults optional fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye returns structured result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > removeRedEye uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto calls restore.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto defaults optional result fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto returns full restoration result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > restorePhoto uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve calculates timeout based on megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve cleans up temp files even on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve cleans up temp files in finally block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -face flag when protectFaces is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -preview=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -square flag with shortest dimension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes -width and -height flags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve passes blur and sobel options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve pre-resizes when reduction exceeds 75% instead of rejecting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve rejects images larger than 25 MP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve returns buffer with dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve uses original dimensions when width/height not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > seamCarve writes input as JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale calculates higher timeout for CPU mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale calculates timeout with GPU rate when GPU available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale calls upscale.py",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale defaults method and format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale defaults scale to 2 for timeout calculation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale passes options as JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale provides fallback error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale returns structured result",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale throws on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ai-tools.test.ts > upscale uses output_path from result when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks auth_anomaly condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks backup_never_run condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks backup_stale condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks disk_space_low condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions checks license_expiring condition",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator conditions only delivers to enabled webhooks of type alerts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator module exports evaluateAlerts is the only named export",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator module exports exports evaluateAlerts as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds auth anomaly alert reports windowMinutes of 5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds auth anomaly threshold is 20 failures",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds auth anomaly window is 5 minutes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds backup staleness alert reports threshold of 48",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds backup staleness threshold is 48 hours",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds disk space alert reports threshold of 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds disk space threshold is 1 GB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/alert-evaluator.test.ts > alert-evaluator thresholds license expiry warning threshold is 30 days",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED defaults to false (no-phone-home)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED rejects non-enum values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED='false' transforms to boolean false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_ENABLED='true' transforms to boolean true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE < 0 fails validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE > 1 fails validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE defaults to 1.0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=0 is valid (no sampling)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=0.5 parses correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=1 is valid (full sampling)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation ANALYTICS_SAMPLE_RATE=2 fails validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_API_KEY can be overridden with a custom value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_API_KEY can be set to empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_API_KEY defaults to empty string (no baked key)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_HOST can be overridden",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation POSTHOG_HOST defaults to the PostHog US endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation SENTRY_DSN can be overridden with a custom value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation SENTRY_DSN can be set to empty string to disable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-env.test.ts > analytics env var validation SENTRY_DSN defaults to empty string (no baked DSN)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN does NOT match non-image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN matches all common image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN matches extensions in the middle of paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_EXT_PATTERN replaces extensions with [REDACTED]",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_PATH_PATTERN does NOT match safe paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_PATH_PATTERN matches workspace and data paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant PII scrubbing regex - FILE_PATH_PATTERN replaces paths with [REDACTED]",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant captureException consent gating (code review) captureException checks isRequestOptedIn before sending to Sentry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant captureException consent gating (code review) error handler passes request to captureException",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant initAnalytics gating (code review) initAnalytics bails when ANALYTICS_ENABLED is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant initAnalytics gating (code review) shutdownAnalytics nulls both clients",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant isUserOptedIn logic (code review) checks ANALYTICS_ENABLED before user DB lookup",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant isUserOptedIn logic (code review) returns false for anonymous user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant shouldSample logic rate 0.0 always rejects (Math.random() < 0.0 is always false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant shouldSample logic rate 1.0 always accepts (checked before Math.random call)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant shouldSample logic rate between 0 and 1 produces a mix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant trackEvent gating (code review) trackEvent checks posthogClient, consent, and sampling",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-no-leak.test.ts > Server-side Analytics No-Leak Invariant trackEvent gating (code review) trackEvent wraps capture in try-catch (never throws)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic enabled=false sets analyticsEnabled to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic enabled=true sets analyticsEnabled to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic missing enabled defaults to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic remindLater branch sets analyticsEnabled to null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent logic remindLater sets remind-at 7 days in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts both enabled and remindLater together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts enabled: false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts enabled: true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema accepts remindLater: true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema rejects enabled as number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema rejects enabled as string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema rejects remindLater as string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics-route.test.ts > analytics consent schema strips unknown properties",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException captures when sentry is initialized and no request provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException captures when sentry is initialized and request user is opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException does nothing when request user is not opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > captureException does nothing when sentryModule is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics does nothing when ANALYTICS_ENABLED is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics does nothing when ANALYTICS_ENABLED is true but POSTHOG_API_KEY is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics initializes posthog when enabled with API key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > initAnalytics initializes sentry when SENTRY_DSN is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > shutdownAnalytics closes sentry when initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > shutdownAnalytics resolves without error when no clients initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > shutdownAnalytics shuts down posthog when initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent allows anonymous users with x-analytics-consent header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent captures event when all conditions are met",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does not throw when capture throws internally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when ANALYTICS_ENABLED is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when ANALYTICS_SAMPLE_RATE is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when posthogClient is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent does nothing when request user is not opted in",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent rejects anonymous users without consent header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/analytics.test.ts > trackEvent uses instance ID from DB when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false anonymous admin can pass requirePermission('settings:write')",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false anonymous admin has all admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false anonymous admin has settings:write permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > anonymous user when AUTH_ENABLED=false assigns admin role to anonymous user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > session endpoint when AUTH_ENABLED=false GET /api/auth/session returns admin role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/anonymous-admin.test.ts > session endpoint when AUTH_ENABLED=false GET /api/auth/session returns null expiresAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic API key format raw key has correct length (si_ + 96 hex chars = 99)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic API key format raw key starts with si_ prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts all fields together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts empty object (all fields optional)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts empty permissions array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts name exactly 100 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts permissions array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts valid expiresAt date string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation accepts valid name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic create API key validation rejects name longer than 100 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic default name behavior uses default name when name is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic default name behavior uses default name when name is whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic default name behavior uses provided name when not empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation accepts date in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation rejects date in the past",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation rejects empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic expiresAt validation rejects invalid date string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic key prefix computation always starts with si_ prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic key prefix computation handles short keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic key prefix computation returns first 10 characters of the key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping fails when requesting permissions user does not have",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping fails when user has no permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping passes when all requested permissions are in user permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping passes with empty requested permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic permission scoping returns all invalid permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic response serialization formats key list entry correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/api-keys-route.test.ts > API keys route logic response serialization handles null permissions and dates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor already matching ratio returns same-ish dims (both even)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor odd-dim source gets even output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor small source into 4:3",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor tall source into wide ratio (portrait into 16:9)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/aspect-tools.test.ts > canvasFor wide source into tall ratio (landscape into 9:16)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audio-output.test.ts > audioOutputFor falls back to mp3 for decode-only formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audio-output.test.ts > audioOutputFor maps .aac input to .m4a output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audio-output.test.ts > audioOutputFor normalises uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine COMPLETE is terminal (no outgoing transition)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine covers all non-terminal states",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine defines exactly 5 states",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine follows the exact sequence PENDING->EXPORTING->EXPORTED->PURGING->COMPLETE",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine has exactly 4 transitions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine has no cycles in the transition graph",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine state transitions are valid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-archival.test.ts > audit archival state machine visits each state exactly once in the transition chain",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType API_KEY_CREATED -> api_key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType API_KEY_DELETED -> api_key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType FILE_DELETED -> file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType FILE_UPLOADED -> file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType LOGIN_FAILED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType LOGIN_SUCCESS -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType LOGOUT -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType PASSWORD_CHANGED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType PASSWORD_RESET -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType ROLE_CREATED -> role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType ROLE_DELETED -> role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType ROLE_UPDATED -> role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType SETTINGS_UPDATED -> setting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType USER_CREATED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType USER_DELETED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers deriveTargetType USER_UPDATED -> user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId falls back to adminId when userId is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId prefers userId over adminId when both are present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId returns null for an empty details object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId returns null when neither userId nor adminId is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorId returns userId when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername falls back to newUsername when username is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername prefers username over newUsername when both are present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername returns \"system\" for an empty details object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername returns \"system\" when neither username nor newUsername is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-helpers.test.ts > audit helpers extractActorUsername returns username when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes deeply nested objects (3+ levels)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes mixed types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes with null values included",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity canonicalizes with sorted keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity computes and verifies HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity computes deterministic HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity detects tampering",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity key order does not matter with 5+ keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity key ordering does not affect HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity produces different HMACs for different keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity serializes undefined values as null in canonicalization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity verifyHmac returns false for completely wrong HMAC",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity verifyHmac returns false for empty HMAC string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-integrity.test.ts > audit integrity verifyHmac returns false for malformed HMAC string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog extracts actorId from userId field first",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog extracts username from details",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog falls back to adminId when userId is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog handles empty details object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog includes all detail fields in the log output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog inserts a record into the database",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog logs different event types correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog logs to the structured logger with audit flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog serializes details as JSON for DB storage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-lib.test.ts > auditLog survives DB insert failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic entry serialization handles null details",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic entry serialization parses JSON details string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic entry serialization serializes a complete entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing adds action filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing adds from date filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing adds to date filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing handles all filters together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing ignores invalid from date",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing ignores invalid to date",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing keeps valid filters even when one is invalid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic filter parsing returns empty conditions for no filters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing calculates correct offset for page 2 with limit 25",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing calculates correct offset for page 5 with limit 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps limit to maximum 100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps limit to minimum 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps negative page to 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing clamps page to minimum 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing defaults to page 1, limit 50",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing handles non-numeric limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing handles non-numeric page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-log-route.test.ts > audit log route logic pagination parsing parses valid page and limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput does not truncate a string at exactly 200 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput preserves safe characters unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput returns (empty) for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput returns (empty) when only special characters remain",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips all dangerous characters in one pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips ampersand",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips angle brackets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips double quotes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput strips single quotes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput truncates a 201-character string to 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/audit-system.test.ts > sanitizeAuditInput truncates long strings after stripping characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix is deterministic (same input gives same output)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix produces different prefixes for different inputs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix returns a 16-character hex string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > computeKeyPrefix works with various key formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword generates different salts on each call",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword produces a 128-character hex hash (64 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword produces a 64-character hex salt (32 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword produces a hash that can be verified back",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > hashPassword returns a string in salt:hash format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword handles unicode passwords",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for a malformed stored string (no colon)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for a truncated hash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for a wrong password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns false for an empty stored string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-functions.test.ts > verifyPassword returns true for the correct password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > computeKeyPrefix (additional coverage) prefix for binary-like input still works",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > computeKeyPrefix (additional coverage) returns consistent 16-char prefix for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > getAuthUser returns null when request has no user property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > getAuthUser returns null when user is undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > getAuthUser returns the user when request has user property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > hashPassword (additional coverage) different passwords produce different hashes even with same salt length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > hashPassword (additional coverage) handles empty string password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > hashPassword (additional coverage) handles very long passwords",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats admin routes as private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats auth routes as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats docs as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats download routes as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats health endpoint as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats job progress as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats meme templates as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats non-API routes as public",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > isPublicRoute treats tool endpoints as private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns null and sends 401 when not authenticated at all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns null and sends 403 when role is not admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns null for editor role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAdmin returns the user when role is admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAuth returns null and sends 401 when not authenticated",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > requireAuth returns the user when authenticated",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength accepts password with special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength accepts valid password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password shorter than 8 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password without lowercase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password without number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validatePasswordStrength rejects password without uppercase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername accepts exactly 3 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername accepts exactly 50 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername accepts valid usernames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username longer than 50 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username shorter than 3 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > validateUsername rejects username with special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > verifyPassword (additional coverage) handles special characters in password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > verifyPassword (additional coverage) returns false for completely empty input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auth-routes.test.ts > verifyPassword (additional coverage) returns false when stored has colon but empty salt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient handles orientation 2 (horizontal flip)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer for corrupted/invalid input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer unchanged when no EXIF orientation is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient returns original buffer unchanged when orientation is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient rotates image when orientation is 3 (180)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient rotates image when orientation is 6 (90 CW)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient rotates image when orientation is 8 (270 CW)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/auto-orient.test.ts > autoOrient strips orientation tag after rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > blurBackground modifies the background corner relative to pure blue",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > blurBackground preserves the subject center pixel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > blurBackground produces an image of the same dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > compositeOnColor fills transparent corners with the background color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > compositeOnColor preserves the subject pixel in the center",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/background-composite.test.ts > compositeOnColor produces a fully opaque image (no alpha)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix adds tool suffix when filename unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix handles filenames with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix handles filenames without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch output filename suffix preserves filename when tool changed it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch progress status determination status is 'completed' when no files fail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch progress status determination status is 'completed' when some files succeed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch progress status determination status is 'failed' when all files fail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement allows any count when limit is 0 (unlimited)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement allows files within the limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement allows when count equals limit exactly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement rejects files exceeding the limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > batch size enforcement rejects when count equals limit + 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) builds correct map for unique filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) deduplicates conflicting filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) returns empty map when all files failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > file results map (X-File-Results header) skips null entries (failed files)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools does not skip preprocess for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools does not skip preprocess for resize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools skips preprocess for edit-metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/batch.test.ts > skip-preprocess logic for metadata tools skips preprocess for strip-metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow higher opacity produces more shadow alpha than lower opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow opacity 0 produces no visible shadow (alpha bytes near zero in shadow area)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow opacity 100 produces visible shadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow output dimensions match input dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow returns a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > addDropShadow throws when buffer has no readable dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects blurEnabled with blur bgType blurs the original background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects blurEnabled with transparent bgType blurs the original background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects color backgroundType composites on solid color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects combined shadow + color background works",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects defaults backgroundType to transparent when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects defaults blurIntensity to 50 when not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects gradient backgroundType composites on gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects image backgroundType composites on provided image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects image backgroundType with blurEnabled blurs the background image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects shadowEnabled with opacity adds shadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects shadowOpacity 0 does not add shadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > applyEffects transparent backgroundType with no effects returns subject approximately unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground clamps intensity above 100 to 100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground clamps intensity below 0 to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground different intensity values produce different output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground intensity 0 produces minimal blur (sigma ~1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground intensity 100 produces heavy blur (sigma 50)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground output dimensions match subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > blurBackground returns a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor accepts hex color without hash prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor composites subject onto solid color background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor output dimensions match subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor output is a valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnColor throws on invalid buffer with no dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage background is resized to cover subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage composites subject onto background image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage output dimensions match subject dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage output is a valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > compositeOnImage throws on invalid subject buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground creates correct size output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground default angle is 180 (top to bottom)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground different angles produce different pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground different colors produce different output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bg-effects.test.ts > createGradientBackground output is a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context extraction creates root span when _otel is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context extraction extracts parent context from _otel carrier",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context injection injects _otel with traceparent when a span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/bullmq-context-propagation.test.ts > BullMQ trace context injection injects nothing when no SDK is registered",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) computes deleteAfter as retentionHours converted to milliseconds from now",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) falls back to FILE_MAX_AGE_HOURS when team has no retentionHours",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) function is defined as async",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) gates on team_retention_overrides enterprise feature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) is called fire-and-forget from enqueueToolJob",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) looks up the user's team from the users table",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) reads retentionHours from the teams table",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) returns early when feature is not enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) returns early when user has no team",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > computeDeleteAfter logic (source verification) updates the job row with the computed deleteAfter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports does not export computeDeleteAfter (private function)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports closeFlowProducer as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports closeQueueEvents as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports enqueueToolJob as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports getFlowProducer as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/compute-delete-after.test.ts > enqueue module exports exports waitForJob as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp allows OpenStreetMap tiles in img-src for app pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog assets (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog assets (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog ingest (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes PostHog ingest (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes Sentry ingest (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains includes Sentry ingest (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains keeps self (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows analytics domains keeps self (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows data: URIs for client-side blob operations (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp connect-src allows data: URIs for client-side blob operations (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp font-src allows Scalar docs fonts app pages do not include Scalar fonts origin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp font-src allows Scalar docs fonts docs pages include Scalar fonts origin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp includes frame-ancestors none for app pages but not docs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader app pages do not allow unsafe-inline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader docs pages allow unsafe-inline for Scalar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader includes PostHog assets origin (isDocs=false)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/csp.test.ts > buildCsp script-src allows PostHog config loader includes PostHog assets origin (isDocs=true)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt groups endpoints by tag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt handles spec with no description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes parameters section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes request body section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes responses section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes the description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt includes title with version",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt marks auth-required endpoints",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt marks public endpoints",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsFullTxt puts untagged endpoints under 'Other'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt handles spec with empty paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt handles spec with no tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt includes authentication section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt includes the Docs section",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt lists API sections with endpoint counts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic generateLlmsTxt starts with the API title",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns false for non-empty security array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns false for null-like security",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns false for undefined security",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/docs-route.test.ts > docs route logic isPublic returns true for empty security array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions exact counts for built-in roles admin has exactly 17 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions exact counts for built-in roles editor has exactly 7 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions exact counts for built-in roles user has exactly 5 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names case-sensitive: ADMIN (uppercase) returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names case-sensitive: Admin (capitalized) returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names case-sensitive: User (capitalized) returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names empty string returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names null coerced to string returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names undefined coerced to string returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions invalid and edge-case role names whitespace-padded role name returns empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions role permission subsets editor permissions are a subset of admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions role permission subsets user permissions are a subset of admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > getPermissions role permission subsets user permissions are a subset of editor permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key cannot grant permissions the role lacks editor with apiKeyPermissions including settings:write still denied",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key cannot grant permissions the role lacks unknown role gains nothing even with full apiKeyPermissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key cannot grant permissions the role lacks user with apiKeyPermissions including users:manage still denied",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key scoping restricts permissions admin scoped to tools:use can only use tools:use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key scoping restricts permissions editor scoped to files:own and tools:use only has those",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission API key scoping restricts permissions user scoped to settings:read only has that",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission empty apiKeyPermissions blocks everything admin with empty array has no effective permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission empty apiKeyPermissions blocks everything user with empty array has no effective permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission undefined apiKeyPermissions inherits all role permissions admin without apiKeyPermissions gets full admin access",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission undefined apiKeyPermissions inherits all role permissions user without apiKeyPermissions gets full user access",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) admin can use any permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) editor can use all editor permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) editor cannot use admin-only permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) unknown role has no effective permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) user can use all user permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasEffectivePermission without API key scoping (apiKeyPermissions undefined) user cannot use editor or admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for a non-existent permission string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for an empty string permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for both unknown role and unknown permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/effective-permissions.test.ts > hasPermission edge cases returns false for unknown role even with valid permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt passes through non-encrypted values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt returns null for $ENC$ with corrupted ciphertext",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt returns null for $ENC$ with truncated data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt returns null for wrong key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption decrypt tries previous key on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption deriveAuditHmacKey is deterministic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption deriveAuditHmacKey produces a 32-byte buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption deriveAuditHmacKey produces different keys for different master keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts a value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts a very long input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts an empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts special characters (newlines, tabs, null bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption encrypts and decrypts unicode and emoji characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption isEncrypted returns false for plaintext",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption isEncrypted returns true for $ENC$ prefix with invalid base64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption produces different ciphertext for same plaintext (random IV)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/encryption.test.ts > encryption two encryptions of the same plaintext decrypt to the same value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags enterprise plan includes everything",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags has exactly 19 features total",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags includes all Phase 1 flags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags includes all Phase 2-4 flags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags includes distributed_tracing in enterprise plan only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags team plan does NOT include compliance features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-flags.test.ts > enterprise feature flags team plan includes operational features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock mocks feature enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock mocks no enterprise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock returns license payload with correct shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/enterprise-mock.test.ts > enterprise mock returns null license when no enterprise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors formats single issue with path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors formats single issue without path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors joins multiple issues with semicolons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors joins nested paths with dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > formatZodErrors returns empty string for empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths handles pipeline step error wrapping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths leaves safe messages untouched",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths leaves timeout messages untouched",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /app container paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /data/ai/venv Python traceback paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /home paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /opt paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /tmp scratch paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips /workspace paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/errors.test.ts > stripInternalPaths strips multiple paths in one message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs adds keywords in add mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs allows field names with colons and hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs allows field names with underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs applies dateShift without explicit sign as positive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs applies negative dateShift",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs applies positive dateShift",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs artist takes precedence over author",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs clearGps takes priority over GPS coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs clears GPS data with clearGps flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs clears existing keywords before setting in set mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does not add keywords args when keywords array is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does not set GPS when only latitude is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does not set GPS when only longitude is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs does nothing for empty fieldsToRemove array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs filters out blank and whitespace-only keywords",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles complex settings with multiple fields combined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles negative GPS altitude (below sea level)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles zero GPS altitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs handles zero GPS coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs imageDescription takes precedence over title for ImageDescription tag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs includes GPS altitude when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs rejects unsafe field names from removal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs removes safe field names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs returns empty array for empty settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC city",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC country",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC headline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets IPTC title (ObjectName)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets all dates to a specific value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets copyright field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets dateTime as ModifyDate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets dateTimeOriginal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets negative GPS latitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets positive GPS coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs sets software field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs trims keyword whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses artist field when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses author as fallback when artist is not provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses imageDescription when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > buildTagArgs uses title as fallback for imageDescription",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns correct filename and fileSize for JPEG with EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns keywords array (may be empty)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns non-null exif object for JPEG with EXIF data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata returns null for GPS when no GPS data present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > inspectMetadata works with PNG which has no EXIF -- returns null for exif, iptc, xmp, gps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata empty tags array returns buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata returns a valid image buffer that Sharp can read",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata writing -Artist=TestArtist then inspecting shows the artist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/exiftool.test.ts > writeMetadata writing multiple tags works",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > external auth resolver module exports findUniqueUsername",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > external auth resolver module exports resolveExternalUser",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > external auth resolver module exports sanitizeUsername",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername appends _2 when the base username is taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername appends _3 when both base and _2 are taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername resolves collisions through the loop until a free slot is found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > findUniqueUsername returns the base username when it is not taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername allows input that starts with numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername collapses multiple underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername does not truncate input that is exactly 46 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles email addresses as input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles empty-after-strip edge case",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles numeric-only input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles pure whitespace input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername handles single character input by padding to 3",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername lowercases input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername pads short usernames to 3 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername passes through admin as a valid username",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername preserves consecutive dots and hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername preserves dots and hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername replaces non-alphanumeric characters with underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername replaces unicode characters with underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername strips leading @ from input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername strips leading and trailing separators",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername truncates input that is exactly 47 characters to 46",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/external-auth-resolver.test.ts > sanitizeUsername truncates to 46 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize handles deeply nested directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize recurses into subdirectories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize returns 0 for empty directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize returns 0 for non-existent directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize returns correct size for a single file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > getDirSize sums sizes of multiple files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest handles manifest with empty bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest handles manifest with models without paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest handles manifest with multiple bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest parses valid manifest JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest returns null for invalid JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > readManifest returns null for non-existent file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > shared model path deduplication handles bundle with no models property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/features-route.test.ts > shared model path deduplication identifies models shared between bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl decodes percent-encoded characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl extracts filename from URL with query string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl extracts filename from simple URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl handles deeply nested path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl handles filename at exactly 255 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl handles filename with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for URL without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for empty path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for filename over 255 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for invalid URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > filenameFromUrl returns fallback for root URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType handles uppercase extensions via toLowerCase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .jpg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .ttf to font/ttf",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType maps .webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType returns undefined for filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType returns undefined for unknown extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getContentType uses the last dot for extension detection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName adds each unique name to the used set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName appends _1 for first collision",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName appends _2 when _1 is also taken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName handles filename with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName handles filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName handles multiple collisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > getUniqueName returns name unchanged if not in used set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns false for filename with dots that are not traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns false for safe filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for ..",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for backslash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for embedded ..",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for forward slash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/fetch-urls-helpers.test.ts > hasPathTraversal returns true for null byte",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > deleteStoredFile deletes existing file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > deleteStoredFile does not throw for non-existent file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > ensureStorageDir creates directory if not exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > ensureStorageDir is idempotent (second call does not throw)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > getStoredFilePath returns correct joined path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile accepts known image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile creates storage directory on first call",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile lowercases extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile returns different filenames for same input (UUID-based)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile sanitizes dangerous extensions to .bin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile saves buffer and returns UUID-based filename with correct extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > saveFile uses .bin for files with no extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions deleteThumbnail does not throw for non-existent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions deleteThumbnail removes the file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions getCachedThumbnail reads back saved thumbnail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions getCachedThumbnail returns null for non-existent thumbnail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions saveThumbnail creates .thumbs subdirectory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/file-storage.test.ts > thumbnail functions saveThumbnail writes to correct path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for double dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for four dots (.. removal leaves empty)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for single dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename falls back to upload for triple dots (.. removal leaves .)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles emoji filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles filename with only unknown extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles filenames with dashes and underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles filenames with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles no extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles only null bytes falling back to upload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles trailing slash in path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles unicode filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename handles unknown extensions without truncation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename passes through a simple filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename preserves dotfiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename recognizes all safe image extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename recognizes safe extensions across all modalities",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename removes .. sequences",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename removes embedded .. sequences in filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename removes null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename strips directory path and returns basename only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename strips relative directory path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates after first safe image extension (photo.png.php)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates after first safe image extension (report.jpg.exe)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates after first safe image extension with multiple unsafe parts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates long filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates long unicode filenames correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/filename.test.ts > sanitizeFilename truncates very long filenames over 200 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic extension extraction from filename extracts extension from simple filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic extension extraction from filename handles filename with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic extension extraction from filename handles filename without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic filename encoding for Content-Disposition encodes special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic filename encoding for Content-Disposition encodes unicode characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic filename encoding for Content-Disposition preserves simple filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps HEIC/HEIF formats correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps RAW formats correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps avif to image/avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps bmp to image/bmp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps gif to image/gif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps ico to image/x-icon",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps jpg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps json to application/json",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps jxl to image/jxl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps pdf to application/pdf",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps specialty formats correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps svg to image/svg+xml",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps tif to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps tiff to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType maps zip to application/zip",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType returns application/octet-stream for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic getContentType returns application/octet-stream for unknown extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows alphanumeric-only segment",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows clean UUID-like segment",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows clean filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows hyphens and underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal allows single dot in filename (extension)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects Windows-style path traversal (..\\)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects backslash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects double dot traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects double dot with prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects forward slash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects null byte",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/files-route.test.ts > files route logic isPathTraversal detects relative path traversal (../)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - EPS size limit rejects EPS files over 50MB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - QOI decoder decoded QOI produces a buffer sharp can process further",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - QOI decoder decodes QOI fixture to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - QOI decoder round-trips PNG -> QOI -> PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification bmp: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification dds: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification dpx: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification exr: output has non-zero dimensions (requires delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification fits: output has non-zero dimensions (requires delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification hdr: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification ico: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification jp2: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification jxl: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification psd: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat - individual decoder verification tga: output has non-zero dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes BMP to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes CUR using ICO decoder to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes DDS to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes DPX to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes EXR to valid PNG (requires EXR delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes FITS to valid PNG (requires FITS delegate)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes HDR to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes ICO to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes JP2 to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes JXL to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PBM to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PGM to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PPM to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes PSD to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat decodes TGA to valid PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for avif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for empty format string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for gif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for png format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for tiff format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for unknown/native formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > decodeToSharpCompat returns buffer unchanged for webp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for avif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for gif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for jpeg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for png format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for svg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns false for webp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for bmp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for cur format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for dds format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for dpx format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for eps format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for exr format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for fits format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for hdr format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for ico format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for jp2 format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for jxl format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for pbm format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for pgm format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for ppm format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for psd format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for qoi format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for raw format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-decoders.test.ts > needsCliDecode returns true for tga format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeBmp encodes JPEG input to BMP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeBmp encodes a PNG buffer to BMP format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeBmp produces a BMP with correct dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeIco encodes a PNG buffer to ICO format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeIco preserves small images without enlargement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeIco resizes large images to fit within 256x256",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeJp2 accepts optional quality parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeJp2 encodes a PNG buffer to JP2 format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeJp2 produces valid output at different quality levels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeQoi encodes JPEG input to QOI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeQoi encodes a PNG buffer to QOI format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/format-encoders.test.ts > encodeQoi encodes fixture image to QOI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic cleans up temp files after success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic decodes sample.heic to a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic decodes sample.heif to a valid PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic preserves image dimensions after decoding",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic rejects an empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > decodeHeic rejects invalid/corrupt data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat decodes a HEIC buffer to PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat detects heic brand in ftyp box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat detects mif1 brand in ftyp box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat does not treat a short buffer as HEIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat passes through a JPEG buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat passes through a PNG buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/heic-converter.test.ts > ensureSharpCompat passes through a WebP buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist EXEMPT_PATHS includes IdP callback paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist EXEMPT_PATHS includes all expected infrastructure paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList builds a list from IPv4 CIDRs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList builds a list from IPv6 CIDRs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList builds a list from bare IPv4 addresses",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList returns null for an empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist buildBlockList skips invalid entries without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath does NOT exempt regular API paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath does NOT exempt the root path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts OIDC callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts SAML callback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts SCIM paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts health endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts metrics endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isExemptPath exempts readyz endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows /0 to match everything",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows /32 single-host CIDR",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows 127.0.0.1 when loopback is listed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows an IP inside a CIDR range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows an IPv6 address inside a subnet",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed allows an exact single-address match",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed denies an IP outside all ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed handles IPv4-mapped IPv6 addresses (::ffff:x.x.x.x)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isIpAllowed handles multiple CIDR ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid IPv4 CIDR",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid IPv6 CIDR",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid bare IPv4 address",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr accepts valid bare IPv6 address",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects IPv4 prefix > 32",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects IPv6 prefix > 128",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects invalid strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ip-allowlist.test.ts > IP allowlist isValidCidr rejects negative prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES contains all expected feature strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES contains exactly 19 features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES every entry is a non-empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > ENTERPRISE_FEATURES has no duplicate entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES enterprise plan has all 19 features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES enterprise plan is a superset of team plan",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES enterprise plan references the same array as ENTERPRISE_FEATURES",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES team plan contains the expected features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES team plan does not include compliance-only features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > PLAN_FEATURES team plan has exactly 8 features",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false and license:null when called with an invalid key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false and license:null when called with empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false and license:null when called with undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise returns valid:false for a key with wrong signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > initEnterprise sets activeLicense to null for invalid keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (direct, no mock) returns false for all features after initEnterprise with invalid key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (direct, no mock) returns false for all features after initEnterprise with undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (direct, no mock) returns false for all features when initEnterprise was not called",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns correct results when switching from active to no license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns false for features NOT in the active license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns false when no license is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > isFeatureEnabled (via mock) returns true for features in the active license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for input without a dot separator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for invalid base64url payload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for payload with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for undefined input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for valid JSON payload with wrong signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null for valid base64url that is not JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/license-validation.test.ts > validateLicense returns null when dot is at position 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/log-trace-mixin.test.ts > traceMixin returns empty object when no span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/log-trace-mixin.test.ts > traceMixin returns traceId, spanId, traceFlags when span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit respects maxFontSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit returns min size for tiny box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit returns size within bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > autoSizeFontToFit returns smaller size for longer text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > loadFont caches across calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > loadFont falls back to anton for unknown fonts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > loadFont loads anton font",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > measureText returns 0 for empty text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > measureText returns positive width for non-empty text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > measureText scales with font size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg applies allCaps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg has correct fill/stroke attributes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg has paint-order=\"stroke fill\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg renders differently with different fonts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg returns valid SVG with <path> elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg skips empty text boxes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > renderMemeTextSvg uses custom fontSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText handles multiple spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText handles single word exceeding width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText returns [\"\"] for empty text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText returns single line when text fits",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/meme-text-renderer.test.ts > wrapText wraps into multiple lines",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp generates a TOTP with a valid secret",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp generates a valid TOTP URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp generates unique secrets across calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA createTotp uses a provided secret when given",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA hashRecoveryCodes handles a single code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA hashRecoveryCodes hashes recovery codes into comma-separated SHA-256 hashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA hashRecoveryCodes produces deterministic hashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns false for admins_only policy when role is not admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns false for optional policy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns true for admins_only policy when role is admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA isMfaRequiredForUser returns true for required policy regardless of role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode consumes a recovery code on use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode preserves other codes when one is consumed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode rejects an invalid recovery code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode returns empty remaining when last code is used",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyRecoveryCode verifies a valid recovery code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode accepts codes within the 1-step window",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode rejects a code from a different secret",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode rejects an empty code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode rejects an incorrect TOTP code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/mfa.test.ts > MFA verifyTotpCode verifies a correct TOTP code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/object-storage.test.ts > object-storage (local backend) rejects path traversal in keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/object-storage.test.ts > object-storage (local backend) round-trips buffers and streams with size and listing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat accepts quality override for PNG without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat detects JPEG input and returns jpeg config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat detects PNG input and returns png config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat detects WebP input and returns webp config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat falls back to PNG for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/output-format.test.ts > resolveOutputFormat respects quality override for lossy formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange deduplicates overlapping ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange deduplicates repeated pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles a range of one page (start equals end)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles range ending at totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles ranges with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange handles single page equal to totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses a simple range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses a single page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses mixed single pages and ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses multiple ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange parses multiple single pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for ' all ' (trimmed)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for 'ALL' (case-insensitive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for 'all'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange returns all pages for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange sorts pages in ascending order",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for empty segment (leading comma)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for empty segment (trailing comma)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for negative page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for non-integer page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for non-numeric input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for page 0 (pages start at 1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for page exceeding totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for range exceeding totalPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-range.test.ts > parsePageRange throws for reversed range (start > end)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns collapses a full consecutive run: [2..80] -> '2-80'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns handles a single page: [3] -> '3'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns leaves non-consecutive pages as singles: [1,3,5,7] -> '1,3,5,7'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns mixes runs and singles: [1,2,4,5,6,9] -> '1-2,4-6,9'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns pathological alternation (odd pages 1..399) produces ~800 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > compressPageRuns returns empty string for empty input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec '1,1' deduplicates to {1}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec '1-r1' of 5 resolves to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec 'r2-r1' of 5 resolves to {4,5}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec 'z-1' of 3 resolves to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec handles 1-z as all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec handles comma-separated values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: '1-2' of 3 yields keep '3'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: '1-z' of 3 leaves nothing to keep",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: '2' of 3 yields keep '1,3'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec remove-pages: 'z' of 3 yields keep '1,2'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves a range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves a single page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves r1 as the last page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves r2 as second-to-last",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves r3 as the first page of 3",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec resolves z as the last page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec reversed range '3-1' normalizes to {1,2,3}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec throws on out-of-range page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec throws on page 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/page-spec.test.ts > parsePageSpec throws on r-index that resolves below 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended admin without apiKeyPermissions has all permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended apiKeyPermissions that do NOT include the permission returns false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended apiKeyPermissions that include the permission returns true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended role lacking the permission returns false even if apiKeyPermissions include it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasEffectivePermission extended user with apiKeyPermissions only gets intersecting permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended admin has all 14 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended editor does NOT have admin-only permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended editor has the expected permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended unknown role returns false for any permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended user does NOT have elevated permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > hasPermission extended user has the expected permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns null and sends 401 when no user",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns null when not owner and lacks allPermission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns user when resourceUserId matches user.id (own resource)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requireOwnershipOrPermission returns user when user has the allPermission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns null and sends 401 when getAuthUser returns null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns null and sends 403 when user lacks permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns user when editor has an editor-level permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions-extended.test.ts > requirePermission returns user when user has the permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions does NOT contain admin-only permissions for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions returns all 17 permissions for admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions returns empty array for unknown role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions getPermissions returns only basic permissions for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns false for user with settings:write",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns false for user with users:manage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns true for admin with users:manage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/permissions.test.ts > permissions hasPermission returns true for user with tools:use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > content-aware resize routing keeps non-resize tools unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > content-aware resize routing keeps resize as-is without contentAware",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > content-aware resize routing resolves resize with contentAware to content-aware-resize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) adds _1 suffix on first conflict",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) handles filenames without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) handles multiple dots in filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) increments counter on repeated conflicts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) returns the original name when no conflicts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > filename deduplication (getUniqueName logic) tracks all used names across multiple calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step error message formatting falls back to generic message for non-Error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step error message formatting wraps step errors with step number and tool ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step schema validation defaults settings to empty object when omitted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step schema validation requires at least one step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline step schema validation validates step has toolId field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup getToolConfig returns undefined for unregistered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup registered tool appears in getRegisteredToolIds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup registered tool is found via getToolConfig",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/pipeline.test.ts > pipeline tool registry lookup registered tool process function executes correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > CONTENT_TYPE_TO_EXT maps common image MIME types to extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName appends toolId suffix when filename is unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName applies both suffix and extension fixup when needed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName does not add suffix when tool renames the file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName fixes extension mismatch between content-type and filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName handles filenames without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/postprocess.test.ts > buildOutputName preserves extension when content-type matches",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > JobProgress type shape supports all required fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > JobProgress type shape supports optional currentFile and type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress handles completed status",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress handles failed status with errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress handles progress with currentFile",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateJobProgress stores progress that can be sent to SSE listeners",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles complete phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles failed phase with error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles processing phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/progress.test.ts > updateSingleFileProgress handles progress with result data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions admin has all 17 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions editor has collaborative but not admin permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions hasPermission checks correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions unknown role returns empty permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/rbac-enforcement.test.ts > role permissions user has basic permissions only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic ALL_PERMISSIONS constant contains all expected permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic ALL_PERMISSIONS constant contains exactly 14 permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic builtin role protection allows modification of custom roles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic builtin role protection blocks deletion of builtin roles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic builtin role protection blocks modification of builtin roles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation accepts valid create payload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation description is optional",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation rejects description longer than 500 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation rejects missing permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic create role validation requires at least one permission",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation handles empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation returns all permissions if all are invalid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation returns empty array for valid permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic permission validation returns invalid permission strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name rename cascading updates all users when role name changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation accepts name exactly 2 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation accepts name exactly 30 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation accepts valid lowercase name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation allows hyphens",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation allows numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation allows underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation converts to lowercase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects dots in name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects names longer than 30 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects single character",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects spaces in name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation rejects special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic role name validation trims whitespace and lowercases",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts all fields together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts empty update body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts partial update with just description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts partial update with just name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic update role validation accepts partial update with just permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/roles-route.test.ts > roles route logic user reassignment on role deletion reassigns users to 'user' role when custom role is deleted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber defaults defaultValue to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber returns defaultValue when setting does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber returns defaultValue when setting value is NaN",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingNumber returns the number when setting exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingString defaults defaultValue to empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingString returns defaultValue when setting does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > getSettingString returns the string when setting exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > upsertSetting handles empty string value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > upsertSetting inserts a new setting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-helpers.test.ts > upsertSetting updates an existing setting",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation accepts clean keys and values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation accepts values with angle brackets that are not HTML tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation allows multiple settings entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation rejects HTML tag in the middle of a value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation rejects HTML tags in keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation rejects HTML tags in values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation stringifies boolean values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation stringifies non-string values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML tag validation stringifies object values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex does not match empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex does not match numeric comparisons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex does not match plain text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <!-- comments -->",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches </div> closing tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <?xml?> processing instructions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <img> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic HTML_TAG_PATTERN regex matches <script> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation accepts empty object body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation accepts object body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation rejects array body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/settings-route.test.ts > settings route logic body validation rejects null body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/sidecar-context-propagation.test.ts > sidecar trace context injection omits _otel when no SDK is registered",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/sidecar-context-propagation.test.ts > sidecar trace context injection produces _otel field when span is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward circuit breaker behavior increments failure counter on failed delivery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward circuit breaker behavior opens circuit when failures reach threshold",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward circuit breaker behavior resets failure counter on successful delivery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants batch limit is 500",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants circuit breaker threshold is 5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants cursor key is siem_last_forwarded_at",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward constants failures key is siem_consecutive_failures",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward cursor behavior applies cursor filter using gte on createdAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward cursor behavior queries audit log ordered by createdAt ascending",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward cursor behavior updates cursor to the last forwarded row timestamp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward module exports exports runSiemForward as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/siem-forward.test.ts > siem-forward module exports runSiemForward is the only named export",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch follows a redirect chain within MAX_REDIRECTS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch rejects a redirect to a private IP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch returns response for a direct (non-redirect) fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch throws when redirect chain exceeds MAX_REDIRECTS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > safeFetch throws when redirect has no Location header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl allows a public IP address directly in URL and returns resolved IP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl allows valid public HTTP URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl allows valid public HTTP URL without TLS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects CG-NAT range (100.64.0.0/10)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects IETF protocol assignments (192.0.0.0/24)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects IPv6 documentation range (2001:db8::/32)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects IPv6 unspecified address",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects benchmarking range (198.18.0.0/15)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects dotted IPv4-mapped IPv6 that URL parser canonicalizes to hex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 RFC1918 10.x (::ffff:a00:5)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 RFC1918 172.16.x (::ffff:ac10:1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 RFC1918 192.168.x (::ffff:c0a8:1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 loopback (::ffff:7f00:1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects hex IPv4-mapped IPv6 metadata (::ffff:a9fe:a9fe)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects invalid URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects link-local addresses",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects localhost and loopback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects non-HTTP schemes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects private network ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl rejects reserved/class E range (240.0.0.0/4)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking handles DNS lookup returning a single result object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking rejects hostname resolving to IPv4-mapped IPv6 with 10.x private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking rejects hostname that resolves to IPv4-mapped IPv6 with private IPv4",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/ssrf.test.ts > validateFetchUrl with DNS mocking rejects when DNS returns multiple addresses with one private",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic logs warning and skips registration when dist path does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic registers static plugin when dist path exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic sets SPA not-found handler that returns 404 for API routes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerStatic sets SPA not-found handler that serves index.html for non-API routes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload passes undefined for both limits when both are 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload passes undefined for fileSize when MAX_UPLOAD_SIZE_MB is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload passes undefined for files when MAX_BATCH_SIZE is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/static-upload.test.ts > registerUpload registers multipart with correct file size limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation module exports exports storageReconciliationJob as a function",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation module exports storageReconciliationJob is the only named export",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure corrects only users whose storageUsed differs from actual",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure groups file sizes by userId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure handles case where no users have files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure sums file sizes per user from userFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure updates storageUsed on the users table",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/storage-reconciliation.test.ts > storage-reconciliation structure zeros out users with no files but nonzero storageUsed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toSrt formats two segments with comma millisecond separator and 1-based counters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toSrt returns empty string for empty segments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toVtt formats two segments with WEBVTT header and dot millisecond separator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/subtitle-format.test.ts > toVtt returns WEBVTT header with trailing newlines for empty segments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz decompresses valid SVGZ content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz returns buffer unchanged when first bytes do not match gzip magic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz returns non-gzipped buffer unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz returns short buffer unchanged (less than 2 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > decompressSvgz throws on decompressed content that is not SVG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns false for PNG buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns false for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns false for plain text buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for <?xml with leading whitespace before <svg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for SVG with leading whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for buffer starting with <?xml followed by <svg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > isSvgBuffer returns true for buffer starting with <svg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks data:text/html URIs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks external url() references",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks file: URIs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks file: url() references",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks http/https URLs in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks http/https URLs in xlink:href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg blocks javascript: URIs in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg does NOT remove xml processing instruction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg preserves valid SVG content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes DOCTYPE declarations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes DOCTYPE with internal subset (XXE prevention)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes XInclude elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes event handlers (onload, onclick, onerror)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes foreignObject elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg removes script tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/svg-sanitize.test.ts > sanitizeSvg throws on oversized SVG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic Default team protection identifies the Default team by name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic Default team protection non-Default teams can be deleted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection allows unique names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection detects duplicate when renaming to another team name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection detects duplicates case-insensitively",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic case-insensitive duplicate detection excludes current team when renaming",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic member count check allows deletion when team has no members",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic member count check blocks deletion when team has members",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic member count check handles null member count as zero",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation accepts name exactly 50 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation accepts single character name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation accepts valid team name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects empty string after trimming",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects missing name field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects name longer than 50 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation rejects non-string name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/teams-route.test.ts > teams route logic team name validation trims whitespace from team name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout enforces minimum for small megapixel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout enforces minimum timeout of 60_000ms",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout returns correct timeout for external category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout scales with megapixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeExternalToolTimeout uses override when PROCESSING_TIMEOUT_S > 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout defaults to fileCount of 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout enforces minimum timeout for small megapixel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout enforces minimum timeout of 60_000ms",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout minimum applies per-file before multiplying by count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout multiplies timeout by file count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout override ignores megapixels and fileCount",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for ai_cpu category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for ai_gpu category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for external category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for python category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout returns correct timeout for sharp category",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout scales correctly for large megapixel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/timeout.test.ts > computeTimeout uses override when PROCESSING_TIMEOUT_S > 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery does not overwrite settings already collected from the iterator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery handles array-form fields from part.fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery recovers fileId and clientJobId from part.fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart field recovery recovers settings from part.fields when the iterator drops trailing fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute multipart parsing error returns 400 when parts iterator throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling omits resultPayload fields when processV2 returns no resultPayload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 200 success envelope when waitForJob resolves",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 202 when waitForJob returns null (sync window expired)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when image validation fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when multiple files are provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when no file is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when settings JSON is invalid",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 400 when settings fail Zod validation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 422 when waitForJob rejects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling returns 501 when AI feature bundle is not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling spreads resultPayload fields at top level in sync 200 envelope",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute request handling uses empty settings when none are provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute route registration adds the tool config to the registry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory-route.test.ts > createToolRoute route registration registers a POST route at /api/v1/tools/:toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getRegisteredToolIds includes a registered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getRegisteredToolIds includes multiple registered tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getRegisteredToolIds returns an array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getToolConfig returns the config for a registered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions getToolConfig returns undefined for an unregistered tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions overwrite behavior later registration overwrites earlier for the same toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions overwrite behavior overwriting does not change the count for that toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions process function execution stored process function returns expected output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions process function execution stored process function with custom schema validates correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions registerToolProcessFn adds a tool to the registry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tool-factory.test.ts > tool-factory registry functions registerToolProcessFn stores the correct config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tracing-bootstrap.test.ts > tracing bootstrap initializes with valid config and enterprise license",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tracing-bootstrap.test.ts > tracing bootstrap is inactive when OTEL_EXPORTER_OTLP_ENDPOINT is unset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/tracing-bootstrap.test.ts > tracing bootstrap is inactive when enterprise package is unavailable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation accepts single id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation accepts valid ids array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation rejects empty ids array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation rejects missing ids field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic delete schema validation rejects non-array ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime handles extension without leading dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime handles uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .avif to image/avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .gif to image/gif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .jpg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .tif to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .tiff to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime maps .webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic extToMime returns application/octet-stream for unknown extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic filename preservation for results handles parent name with multiple dots",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic filename preservation for results handles parent name without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic filename preservation for results preserves parent base name with new extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps avif to image/avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps bmp to image/bmp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps gif to image/gif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps jpeg to image/jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps png to image/png",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps tiff to image/tiff",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime maps webp to image/webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime returns application/octet-stream for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic formatToMime returns application/octet-stream for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic pagination parsing defaults to limit 50 and offset 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic pagination parsing falls back to defaults for non-numeric values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic pagination parsing parses custom limit and offset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic search escaping does not modify strings without special characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic search escaping escapes SQL LIKE wildcards",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic search escaping trims search string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile parses toolChain JSON when present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile preserves null width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile returns empty array for null toolChain",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic serializeFile serializes a complete file row",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic builds tool chain by appending toolId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic computes next version from parent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic preserves chain when no toolId provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/user-files-route.test.ts > user files route logic version chain logic starts with empty chain for first tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects '<script>' (angle brackets)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'has space' (space)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user\nname' (newline)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user name' (tab character)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user!name' (exclamation mark)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user#name' (# symbol)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user/name' (forward slash)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername invalid characters rejects 'user@name' (@ symbol)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too long rejects a 51-character username",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too short rejects (empty string)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too short rejects a (1 character)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername too short rejects ab (2 characters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects 'élève' (accented Latin letters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects 'üser' (umlaut)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects 'пользователь' (Cyrillic characters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername unicode characters rejects '用户名' (CJK characters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts 123 (digits only)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts A.B-C_D (mixed separators and uppercase)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (maximum length (50))",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts abc (minimum length (3))",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts alice (lowercase letters)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts bob123 (letters and digits)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts user-name (hyphens)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts user.name (dots)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/username-validation.test.ts > validateUsername valid usernames accepts user_name (underscores)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > assertLocalCapacity / isBelowCapacity isBelowCapacity boundary: just below 0.5 GB is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > assertLocalCapacity / isBelowCapacity isBelowCapacity returns false when free space is above 0.5 GB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > assertLocalCapacity / isBelowCapacity isBelowCapacity returns true when free space is below 0.5 GB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword different passwords produce different hashes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles empty string password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles password with colons (does not break salt:hash parsing)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles unicode password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword handles very long password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword hash (derived key) is 64 bytes (128 hex chars)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword produces a string in salt:hash format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword salt is 32 bytes (64 hex chars)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword same password produces different derived keys due to different salts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > hashPassword same password produces different salts (non-deterministic)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns false for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns false for non-RAW extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for ARW extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for CR2 extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for DNG extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for NEF extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for ORF extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for RW2 extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true for uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > isRawExtension returns true with leading dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts 0 for numeric fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts DEFAULT_TOOL_VIEW=fullscreen",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts DEFAULT_TOOL_VIEW=sidebar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts all custom values at once",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv accepts string values for string fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces floating point string for FILE_MAX_AGE_HOURS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces negative numbers for numeric fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces numeric strings for MAX_MEGAPIXELS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces string 'false' for AUTH_ENABLED to boolean false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv coerces string 'true' for AUTH_ENABLED to boolean true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv defaults DEFAULT_TOOL_VIEW to sidebar when not set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv parses custom PORT as a number via coercion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv parses env vars and applies Zod schema correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects AUTH_ENABLED with a non-enum value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects DEFAULT_THEME with an invalid enum value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects DEFAULT_TOOL_VIEW with an invalid value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects STORAGE_MODE with an invalid enum value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > loadEnv rejects non-numeric strings for number fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename extracts basename from a full path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename falls back when filename is only null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles directory path with trailing slash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles filename consisting only of spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles filename with only extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename handles very long filenames by truncating to filesystem-safe length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves Arabic script",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves CJK characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a dotfile (starts with single dot)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a filename with dashes and underscores",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a filename with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves a normal filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves accented Latin characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves emoji in filenames",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename preserves filename with multiple extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename removes multiple null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename removes null bytes from filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for double dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for four dots (.. removal leaves empty)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for single dot",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for slash only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename returns fallback for triple dots (.. removal leaves .)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips Windows-style backslash traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips directory traversal ../../etc/passwd",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips double dots embedded in a filename but keeps the rest",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips more deeply nested traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename strips traversal with URL encoding (literal %2e%2e)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > sanitizeFilename truncates very long filenames to filesystem-safe length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts BMP magic (decoded via CLI, not Sharp)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a BMP buffer with correct magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a GIF buffer with correct magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a HEIC file with correct magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a TIFF buffer (big-endian byte order)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a TIFF buffer (little-endian byte order)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a tiny 1x1 PNG file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a valid JPEG file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a valid PNG file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts a valid WebP file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts an HDR buffer with #?RADIANCE header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts an HDR buffer with #?RGBE header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer accepts an SVG buffer with valid XML",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects EXR format and bypasses sharp dimension check",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects ICO format via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects JXL ISOBMFF container format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects JXL raw codestream format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects PSD format and bypasses sharp dimension check",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects RAW format when TIFF magic bytes + RAW extension (DNG)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects RAW format with CR2 extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects RAW format with NEF extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer detects TGA format by extension (no magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer does not detect HDR for a buffer shorter than 10 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a JSON file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a PDF file (%PDF-)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a RIFF container that is AVI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a RIFF container that is not WebP (e.g. WAVE)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a RIFF container too short to contain WEBP signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a ZIP file (PK magic 0x50 0x4B)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer of random bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer that is entirely null bytes (small)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer with JPEG magic bytes but truncated body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer with PNG magic bytes but no real image data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a buffer with only the first byte of a PNG header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a large buffer that is entirely null bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a single-byte buffer (0xFF -- JPEG first byte only)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a text file disguised with no image magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects a truncated PNG header (3 of 4 magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an EXE file (MZ header)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an HTML file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects an image that exceeds MAX_MEGAPIXELS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects ftyp box with unrecognized brand (not avif/heic)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects null passed as buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects two JPEG magic bytes without the third",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer rejects undefined passed as buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts APNG file (detected as png)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts CUR file with CUR magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts DDS file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts DNG file (detected as raw)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts DPX file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts EPS file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts FITS file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts HEIF file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts JP2 file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts PBM file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts PGM file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts PPM file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts QOI file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats accepts SVGZ file (detected as svg)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > validateImageBuffer validates exotic formats rejects a PDF file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword handles unicode passwords in verification",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword is case-sensitive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for a corrupted (truncated) hash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for a stored hash with no colon separator",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for a valid salt with wrong hash bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for an empty stored hash string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for empty password when hash was non-empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for stored hash that is just a colon",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false for the wrong password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false when hash part is present but salt is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns false when salt is present but hash part is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns true for empty password when hash was from empty password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/utilities.test.ts > verifyPassword returns true for the correct password",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/video-speed.test.ts > buildAtempoChain chains correctly for very small factors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/video-speed.test.ts > buildAtempoChain chains factors of 0.5 for values below 0.5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/video-speed.test.ts > buildAtempoChain returns a single atempo for factor >= 0.5",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery applies custom initialDelayMs to backoff schedule",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery delivers a batch of events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery delivers empty events array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery does not retry on 4xx client errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery fails after exhausting retries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery follows exponential backoff delay pattern",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery handles very large events array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery limits retries when maxRetries is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery makes no retries when maxRetries is 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery omits Authorization header when auth is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery passes through Authorization header with Bearer prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery retries on network errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery retries on server error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery returns error when request times out",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery sends Content-Type application/json header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery sends payload with source, version, and events fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/api/webhook-delivery.test.ts > webhook delivery sends to URL with path and query components",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage detects low contrast on a flat image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage detects overexposure on a bright image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage detects underexposure on a dark image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage handles grayscale images without white balance issues",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage produces contrast score near 50 for a typical well-exposed image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage produces near-zero corrections for well-exposed images (dead zone)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage returns scores, corrections, issues, and suggestedMode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > analyzeImage suggests low-light mode for very dark images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) applies CLAHE at intensity 0 with no visible effect",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) brightens a dark image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) does not darken a bright-but-normal image (exposure score ~55-65)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) does not darken a well-exposed image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) each enhancement mode produces output without crashing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections pipeline (CLAHE + normalise + gamma) intensity 100 produces a visibly different output from intensity 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections produces a valid output buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > applyCorrections respects toggle overrides",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases applies denoise with kernel 3 when denoise adjustment is >= 2 but < 4",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases applies denoise with kernel 5 when denoise adjustment is >= 4",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases produces negative saturation correction for over-saturated image (saturation > 60)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases scaleCorrections with landscape mode applies correct multipliers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > auto-enhance edge cases suggests document mode for high-contrast low-saturation image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > scaleCorrections applies preset multipliers for portrait mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > scaleCorrections scales corrections by intensity 50 (1x) without change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/auto-enhance.test.ts > scaleCorrections scales corrections to zero at intensity 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a linear gradient background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a radial gradient background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a solid color background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates a transparent background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates an image background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > generateBackground generates multi-stop linear gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > getDominantBackground returns last gradient stop for gradient type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > getDominantBackground returns solid color for solid type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-backgrounds.test.ts > getDominantBackground returns transparent for transparent type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame handles narrow images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame handles wide images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders MacBook frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders Windows dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders Windows light frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders browser dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders browser light frame with URL bar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders iPad frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders iPhone dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders iPhone frame with image composited into screen area",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders macOS dark frame",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame renders macOS light frame with title bar above image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-frames.test.ts > renderFrame returns original image for frame 'none'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow handles negative offsets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow handles zero-blur shadow gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow produces RGBA output with alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow returns image position within shadow canvas",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/beautify-shadow.test.ts > applyShadow returns larger buffer with shadow applied",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/binaries.test.ts > doc-engine binary resolution availability checks return booleans without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget handles filter names with colons after the first",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget handles single-character extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget returns a bare extension unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/libreoffice.test.ts > parseConvertTarget splits on the first colon for qualified filter targets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/doc-engine/pandoc.test.ts > pandocAvailable returns a boolean without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention _FILE takes precedence when both are set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention errors when _FILE points to nonexistent file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention errors when _FILE points to unreadable file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention leaves var empty when neither is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention leaves var unchanged when _FILE is not set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention preserves internal whitespace in secret",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention reads secret from file into env var",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention strips trailing newline from secret file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/docker-file-secrets.test.ts > Docker _FILE secret convention works for all supported vars simultaneously",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses multi-line dumps (>3 lines)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses python tracebacks",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses raw ffmpeg stderr dumps to a safe sentence",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses raw ffprobe stderr dumps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError collapses very long (>280 char) messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError does NOT collapse clean messages that merely contain tool-ish words (false-positive guard)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError is idempotent (safe to apply at every error surface)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError preserves intentional, user-facing validation messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/errors-friendly.test.ts > friendlyError scrubs internal filesystem paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases TOOL_BUNDLE_MAP has no undefined values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle has a non-empty estimated size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle has a non-empty name and description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle has at least one tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases every bundle id matches its key in FEATURE_BUNDLES",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases getBundleForTool returns null for unknown tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases getToolsForBundle returns empty array for unknown bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundle edge cases no duplicate tools across bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles TOOL_BUNDLE_MAP covers all sidecar tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles all 7 bundles are defined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles every PYTHON_SIDECAR_TOOL maps to exactly one bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles getBundleForTool returns null for non-AI tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features.test.ts > Feature bundles getToolsForBundle returns correct tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure all 7 bundles are defined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure every bundle has at least one enabled tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure every bundle has required fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest structure manifest has valid version fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: architecture parity every bundle with amd64 packages has arm64 packages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: architecture parity mediapipe is present on both architectures when present on either",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness background-removal bundle includes rembg (needed by remove-background)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness face-detection bundle includes mediapipe (needed by blur-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness face-detection bundle includes mediapipe (needed by red-eye-removal)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness object-eraser-colorize bundle includes huggingface-hub (needed by colorize)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness object-eraser-colorize bundle includes huggingface-hub (needed by erase-object)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness ocr bundle includes paddleocr (needed by ocr)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness photo-restoration bundle includes codeformer-pip (needed by restore-photo)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness photo-restoration bundle includes mediapipe (needed by restore-photo)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness photo-restoration bundle includes realesrgan (needed by restore-photo)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes codeformer-pip (needed by enhance-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes einops (needed by noise-removal)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes mediapipe (needed by enhance-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes realesrgan (needed by enhance-faces)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: bundle dependency completeness upscale-enhance bundle includes realesrgan (needed by upscale)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: enablesTools consistency with shared features manifest enablesTools matches features.ts for each bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe dependency (regression for #129) upscale-enhance bundle includes mediapipe for amd64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe dependency (regression for #129) upscale-enhance bundle includes mediapipe for arm64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe version consistency all bundles use the same mediapipe version for amd64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Feature manifest: mediapipe version consistency all bundles use the same mediapipe version for arm64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields archive file paths include version prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields each archive entry has file, sha256, compressedSize, extractedSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields every bundle has archives with both arch variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields has bundleRepo field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-manifest.test.ts > Manifest v2 archive fields manifest version is 2",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior invalidateCache forces re-read",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior invalidateCache is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior isFeatureInstalled reads from cache on second call",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior markInstalled invalidates cache",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Cache behavior markUninstalled invalidates cache",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates all bundles not_installed when installed.json is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates each result has correct shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates installed bundle + missing model returns error with model error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates installed bundle with valid models returns installed with version",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates lock held + progress set returns installing with progress data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates lock held + progress with error returns error with message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates lock held for bundle returns installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Composite state - getFeatureStates not installed + stale error progress returns error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes .downloading files in models dir",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes multiple staging directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes nested .downloading files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes orphaned .tar.gz in staging when bundle not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes staging-{bundleId}/ directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes stale download files in staging/",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes stale installed.json.tmp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls deletes venv.bootstrapping/ directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls does NOT delete non-.downloading files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls does NOT delete non-staging directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls handles missing directories gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls invalidates cache after recovery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls preserves valid installed.json through recovery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Crash recovery - recoverInterruptedInstalls removes stale install lock",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isFeatureInstalled returns false for not-installed bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isFeatureInstalled returns false for random string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isFeatureInstalled returns true for installed bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled consistent after install then uninstall",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled returns false when bundle not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled returns true for non-AI tools like resize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Feature status queries isToolInstalled returns true when bundle is installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock acquireInstallLock creates lock file with bundleId and startedAt",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock acquireInstallLock returns false when lock already exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock acquireInstallLock returns true on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock getInstallingBundle deletes corrupt lock and returns null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock getInstallingBundle returns null when no lock",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock getInstallingBundle returns {bundleId, startedAt} from lock file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock lock file contains valid JSON with bundleId and startedAt fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock releaseInstallLock deletes lock file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Install lock releaseInstallLock is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates checks minSize only when minSize > 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates error message identifies which model failed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates ignores models without path field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns error when model file is undersized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns error with message when model file missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns installed when all models exist and meet minSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns installed when bundle not in manifest",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > Model verification via getFeatureStates returns installed when manifest is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > auto-repair state transition (install endpoint logic) does not clear entry when models are healthy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > auto-repair state transition (install endpoint logic) markUninstalled clears stale entry when models are broken, allowing reinstall",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > ensureAiDirs creates AI directories when the manifest exists and DATA_DIR is writable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > ensureAiDirs is a no-op outside managed environments (no manifest, no /.dockerenv)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > ensureAiDirs warns instead of throwing when DATA_DIR is uncreatable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management markInstalled records bundleId, version, installedAt, and models",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management markInstalled with same bundleId overwrites (version update)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management markUninstalled removes bundle entry, preserves others",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management multiple bundles can coexist in installed.json",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management reads corrupt JSON as empty (graceful degradation)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management reads missing file as empty {bundles: {}}",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management reads valid JSON correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management round-trip: install 3 bundles, uninstall all, verify empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > installed.json management writes atomically (.tmp does not persist after write)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns error string when model file is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns error string when model file is undersized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns null when all models exist and meet minSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns null when bundle not in manifest",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/feature-status.test.ts > verifyBundleModels returns null when manifest is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/install-feature-prebuilt.test.ts > install_feature.py prebuilt mode exits non-zero when checksum mismatches",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/install-feature-prebuilt.test.ts > install_feature.py prebuilt mode extracts models and site-packages from a local tar",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/features/install-feature-prebuilt.test.ts > install_feature.py prebuilt mode writes progress JSON to stderr",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > Color blindness matrices all 8 types have a valid 3x3 matrix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > Color blindness matrices matrix row sums are in a reasonable range (0 to 1.5)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation achromatopsia produces grayscale output (R === G === B)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation different types produce different outputs on a red image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/color-blindness.test.ts > colorBlindness operation returns a Sharp instance for each type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches EPS ASCII magic needs 10 bytes, 9-byte buffer is too short",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches FITS magic needs 6 bytes, 5-byte buffer is too short",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches RIFF header in 8-byte buffer is handled (Sharp may detect or magic bytes skip)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches buffer with ICO-like bytes but too short",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches buffer with only magic byte prefix but too short for full match returns unknown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects AVIF ftyp with exactly 12-byte buffer (minimum for brand check)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects CR3 magic bytes (ftyp at offset 4 with crx brand)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Cineon magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects DPX reverse byte order magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Fujifilm RAF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Minolta MRW magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches detects Sigma X3F magic bytes (FOVb)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches rejects CR3 ftyp when buffer is too short for brand (< 12 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches rejects ftyp box with non-CR3 brand when CR3 entry is checked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect-expanded.test.ts > detectFormat expanded magic byte branches two-byte buffer matching only first two bytes of a 4-byte signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.avif as \"heif\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.bmp as \"bmp\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.exr as \"exr\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.gif as \"gif\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.heic via Sharp or magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.heif via Sharp or magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.ico as \"ico\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.jpg as \"jpeg\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.jxl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.png as \"png\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.psd as \"psd\" via magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.svg as \"svg\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.tiff as \"tiff\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat detects sample.webp as \"webp\" via Sharp metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures cannot detect sample.hdr (Radiance text header not in magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures cannot detect sample.pbm (no P4 magic bytes registered)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures cannot detect sample.pgm (no P5 magic bytes registered)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.dng as tiff (DNG shares TIFF magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.jp2 as jp2 (JPEG 2000 box signature)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.ppm as ppm (P6 magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures detects sample.svgz as svg (Sharp reads gzip-compressed SVG)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat exotic format detection from fixtures does not reliably detect sample.tga (no TGA-specific magic bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects AVIF magic bytes (ftyp at offset 4 with avif brand)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects AVIF magic bytes with avis brand",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects BMP magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects CUR magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects DDS magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects DPX forward magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects EPS ASCII magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects EPS DOS binary magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects FITS magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects GIF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects ICO magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects J2K raw codestream magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JP2 box signature magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JPEG magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JXL ISOBMFF container magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects JXL raw codestream magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects OpenEXR magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PNG magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PPM P3 (ASCII) magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PPM P6 (binary) magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects PSD magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects QOI magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects WEBP magic bytes (RIFF + WEBP)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects big-endian TIFF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers detects little-endian TIFF magic bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers rejects RIFF without WEBP signature",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers rejects ftyp box when buffer too short to read brand (< 12 bytes)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers rejects ftyp box with non-AVIF brand",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers returns 'unknown' for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers returns 'unknown' for unrecognized bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat magic byte detection with synthetic buffers returns 'unknown' for very short buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.apng",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.cur",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.dds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.dpx",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.eps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.fits",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/detect.test.ts > detectFormat real fixture format detection detects sample.qoi",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata clearGps removes GPS data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata does not remove a field that is also being written",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata filters out unsafe round-trip keys from fieldsToRemove",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata handles both edits and removals together",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata handles removal on image without existing EXIF gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata ignores empty string values for fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata removes a Photo (IFD2) field via fieldsToRemove",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata removes specified fields from EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata returns image unchanged when no edits or removals are specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata returns image unchanged with empty options object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata survives corrupt EXIF during removal (catch branch)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata uses merge path when only writing fields (no removals)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes EXIF to image that had no EXIF before",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes artist field to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes copyright field to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes dateTime field to IFD0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes dateTimeOriginal to IFD2",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes imageDescription to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes multiple fields at once",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/edit-metadata.test.ts > editMetadata writes software field to EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage FORMAT_MAP coverage jxl is a valid FORMAT_MAP entry (may fail if libvips lacks JXL support)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage brightness operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage color-channels operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage compress operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage contrast operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage convert operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage crop operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage flip operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage grayscale operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage invert operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage resize operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage rotate operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage saturation operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage sepia operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage OPERATION_MAP full coverage strip-metadata operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios all OPERATION_MAP entries in one pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios empty operations with format conversion only",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios multiple chained operations preserve correct order",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage combined scenarios result info.size equals buffer.length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage unsupported output formats throws for ico output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage unsupported output formats throws for jp2 output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine-expanded.test.ts > processImage unsupported output formats throws for qoi output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage color-blindness operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage edit-metadata operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage heif output format maps to avif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage sharpen operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage OPERATION_MAP coverage sharpen-advanced operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling error in later operation aborts entire pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling propagates validation errors from operations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling throws on empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling throws on invalid image buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage error handling throws on unknown operation type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage operations + format conversion chain resize + rotate + grayscale + format conversion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage operations + format conversion resize then convert to JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage operations + format conversion rotate then convert to WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts JPEG input to PNG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to AVIF output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to GIF output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to JPEG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to TIFF output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts PNG input to WebP output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format converts WebP input to PNG output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format preserves JPEG format when no outputFormat specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format preserves input format when no outputFormat specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage output format throws on unsupported output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage result info.metadata contains expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage result returns buffer and info with correct shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes AVIF input from fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes GIF input from fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes JPEG input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes TIFF input from fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/engine.test.ts > processImage with different input formats processes WebP input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles NaN altitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles altitude ref = 0 (above sea level)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles altitude ref = 1 (below sea level)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles lat without ref (defaults to positive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles lon without ref (defaults to positive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles maximum coordinate values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles non-numeric altitude (string)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles undefined altitude ref (positive altitude)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases handles zero coordinates (prime meridian / equator)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases ignores latitude with wrong length (1 element)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseGps edge cases ignores latitude with wrong length (4 elements)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles XML with multiple rdf:Description elements",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles attributes with special characters in values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles empty attributes as empty strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles large XMP buffer without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases handles multiple attributes on same element",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > parseXmp edge cases ignores attributes without namespace prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles NaN and Infinity numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles array with mixed types including Buffers and Dates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles deeply nested structure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles nested array of objects with dates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles object with Buffer value at 257 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles object with Buffer value at exactly 256 bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles string values without transformation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata-expanded.test.ts > sanitizeValue edge cases handles zero-length buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo detects EXIF presence in JPEG with EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo reports no EXIF for plain PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns channel count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct dimensions for JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct dimensions for PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct dimensions for WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct format for JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct format for PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct format for WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns correct size matching buffer length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns hasAlpha boolean",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns info for a dynamically created image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo returns metadata sub-object with expected keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > getImageInfo throws for invalid buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif parses EXIF from test fixture with metadata fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif parses GPSInfo section when GPS data is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif populates Iop section when exif-reader returns Iop data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif returns empty sections for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseExif returns empty sections for null-like buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps handles missing latitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps handles missing longitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps ignores invalid (NaN) GPS values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps ignores wrong-length GPS arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps parses north-east coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps parses southern hemisphere with altitude",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps returns negative altitude for below sea level",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseGps returns nulls for empty GPS data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp extracts key-value pairs from XMP XML",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp extracts multiple namespaced attributes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp filters out rdf: prefixed attributes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp filters out xmlns: namespace declarations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp returns empty object for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > parseXmp returns empty object for non-XML content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue converts Date to ISO string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue converts large Buffer (>256 bytes) to placeholder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue converts small Buffer to number array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue handles Buffer at 257 bytes (just over boundary)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue handles Buffer at exactly 256 bytes boundary",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through booleans",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through numbers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue passes through undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue recursively sanitizes arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/metadata.test.ts > sanitizeValue recursively sanitizes nested objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings handles mixed case for exotic extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"3fr\" to \"image/x-hasselblad-3fr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"apng\" to \"image/apng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"cin\" to \"image/x-cineon\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"cr3\" to \"image/x-canon-cr3\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"cur\" to \"image/x-icon\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"dcr\" to \"image/x-kodak-dcr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"dds\" to \"image/vnd.ms-dds\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"dpx\" to \"image/x-dpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"eps\" to \"application/postscript\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"epsf\" to \"application/postscript\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"erf\" to \"image/x-epson-erf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fff\" to \"image/x-hasselblad-fff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fit\" to \"image/fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fits\" to \"image/fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"fts\" to \"image/fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"gpr\" to \"image/x-gopro-gpr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"iiq\" to \"image/x-phaseone-iiq\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"j2c\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"j2k\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jp2\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jpc\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jpf\" to \"image/jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"jpx\" to \"image/jpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"kdc\" to \"image/x-kodak-kdc\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"mef\" to \"image/x-mamiya-mef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"mrw\" to \"image/x-minolta-mrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"nrw\" to \"image/x-nikon-nrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pam\" to \"image/x-portable-anymap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pbm\" to \"image/x-portable-bitmap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pef\" to \"image/x-pentax-pef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pfm\" to \"image/x-portable-floatmap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pgm\" to \"image/x-portable-graymap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"pnm\" to \"image/x-portable-anymap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"ppm\" to \"image/x-portable-pixmap\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"ptx\" to \"image/x-pentax-ptx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"qoi\" to \"image/qoi\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"raf\" to \"image/x-fuji-raf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"rwl\" to \"image/x-leica-rwl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"srw\" to \"image/x-samsung-srw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"svgz\" to \"image/svg+xml\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings maps \"x3f\" to \"image/x-sigma-x3f\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > extToMime expanded mappings strips leading dot for exotic extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToExt expanded handles mixed case consistently",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToExt expanded maps non-jpeg formats to lowercase identity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToExt expanded passes through truly unknown format strings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded handles mixed case for jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded handles mixed case for non-jpeg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'bmp' to 'image/bmp'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'heif' to 'image/heif'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'ico' to 'image/x-icon'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > formatToMime expanded maps 'jxl' to 'image/jxl'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings handles uppercase MIME for exotic types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"application/postscript\" to \"eps\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/apng\" to \"apng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/fits\" to \"fits\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/jp2\" to \"jp2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/jpx\" to \"jpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/qoi\" to \"qoi\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/vnd.ms-dds\" to \"dds\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-canon-cr3\" to \"cr3\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-cineon\" to \"cin\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-dpx\" to \"dpx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-epson-erf\" to \"erf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-fuji-raf\" to \"raf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-gopro-gpr\" to \"gpr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-hasselblad-3fr\" to \"3fr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-hasselblad-fff\" to \"fff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-kodak-dcr\" to \"dcr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-kodak-kdc\" to \"kdc\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-leica-rwl\" to \"rwl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-mamiya-mef\" to \"mef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-minolta-mrw\" to \"mrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-nikon-nrw\" to \"nrw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-pentax-pef\" to \"pef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-pentax-ptx\" to \"ptx\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-phaseone-iiq\" to \"iiq\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-anymap\" to \"pnm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-bitmap\" to \"pbm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-floatmap\" to \"pfm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-graymap\" to \"pgm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-portable-pixmap\" to \"ppm\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-samsung-srw\" to \"srw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime-expanded.test.ts > mimeToExt expanded mappings maps \"image/x-sigma-x3f\" to \"x3f\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"arw\" to \"image/x-sony-arw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"avif\" to \"image/avif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"bmp\" to \"image/bmp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"cr2\" to \"image/x-canon-cr2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"dng\" to \"image/x-adobe-dng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"exr\" to \"image/x-exr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"gif\" to \"image/gif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"hdr\" to \"image/vnd.radiance\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"heic\" to \"image/heic\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"heif\" to \"image/heif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"ico\" to \"image/x-icon\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"jpeg\" to \"image/jpeg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"jpg\" to \"image/jpeg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"jxl\" to \"image/jxl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"nef\" to \"image/x-nikon-nef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"orf\" to \"image/x-olympus-orf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"png\" to \"image/png\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"psd\" to \"image/vnd.adobe.photoshop\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"rw2\" to \"image/x-panasonic-rw2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"svg\" to \"image/svg+xml\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"tga\" to \"image/x-tga\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"tif\" to \"image/tiff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"tiff\" to \"image/tiff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime maps \"webp\" to \"image/webp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime normalizes uppercase extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime returns application/octet-stream for unknown extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > extToMime strips leading dot from extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'gif' to 'gif' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'jpeg' to 'jpg'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'png' to 'png' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'tiff' to 'tiff' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt maps 'webp' to 'webp' (identity)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt normalizes case",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToExt returns the format itself for unknown formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'avif' to 'image/avif'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'gif' to 'image/gif'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'jpeg' (Sharp format) to 'image/jpeg'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'png' to 'image/png'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'svg' to 'image/svg+xml'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'tiff' to 'image/tiff'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime maps 'webp' to 'image/webp'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > formatToMime returns application/octet-stream for unknown format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/avif\" to \"avif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/bmp\" to \"bmp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/gif\" to \"gif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/heic\" to \"heic\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/heif\" to \"heif\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/jpeg\" to \"jpg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/jxl\" to \"jxl\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/png\" to \"png\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/svg+xml\" to \"svg\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/tiff\" to \"tiff\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/vnd.adobe.photoshop\" to \"psd\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/vnd.radiance\" to \"hdr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/webp\" to \"webp\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-adobe-dng\" to \"dng\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-canon-cr2\" to \"cr2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-exr\" to \"exr\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-icon\" to \"ico\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-nikon-nef\" to \"nef\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-olympus-orf\" to \"orf\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-panasonic-rw2\" to \"rw2\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-sony-arw\" to \"arw\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt maps \"image/x-tga\" to \"tga\"",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt normalizes uppercase MIME types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/mime.test.ts > mimeToExt returns 'bin' for unknown MIME type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness boundary value = -100 does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness boundary value = 100 does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness negative value darkens the image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness positive value brightens the image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness throws on extreme values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness throws on value = -101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness throws on value = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness value = -100 produces black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > brightness value = 0 makes no visible change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels 100/100/100 is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels boundary values 0/0/0 makes everything black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels doubling green channel doubles green value (clamped)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when blue < 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when blue > 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when green < 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when green > 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when red < 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels throws when red > 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > colorChannels zeroing red channel removes red",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress compresses with explicit quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress compresses with format=avif adds effort option",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress compresses with target size (binary search)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress defaults to quality 80 when no quality or target specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress falls back to PNG for SVG input (NO_ENCODER format)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress lower quality produces smaller output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target size binary search gets reasonably close",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target size early break when within tolerance",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target size falls back to dimension reduction when quality alone fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy 500KB-to-50KB scenario produces output at or below target",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy aggressive target on large image triggers dimension reduction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy does not reduce dimensions when quality alone suffices",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy output never exceeds target size for JPEG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy output never exceeds target size for PNG",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy output never exceeds target size for WebP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress target-size accuracy preserves requested format during dimension reduction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on negative quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on negative targetSizeBytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on quality = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on quality = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress throws on targetSizeBytes = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > compress uses input format when no format specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast negative contrast pushes values toward mid-gray",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast positive value increases contrast",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast throws on value = -101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast throws on value = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > contrast value = 0 makes no visible change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert applies quality parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to avif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to gif format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to jpg format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to png format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to tiff format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert converts to webp format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert quality = 1 (minimum) does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert quality = 100 (maximum) does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on invalid format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on negative quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on quality = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on quality = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > convert throws on quality = 999",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops 100% of image using percent unit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops a 1x1 region from top-left corner",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops a valid region",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops from the last pixel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops the full image (0,0 to full dimensions)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop crops using percent unit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on height = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on negative left",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on negative top",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on negative width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws on width = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when crop is 1px past the boundary",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when crop region exceeds image height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when crop region exceeds image width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > crop throws when left alone puts region out of bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata clears GPS while preserving other EXIF",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata edit wins over remove for same field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata preserves metadata with no options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata removes specific fields via fieldsToRemove",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata writes common fields readable via exif-reader",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > editMetadata writes fresh EXIF to image without existing metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip flips both horizontal and vertical",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip flips horizontally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip flips vertically",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip horizontal flip actually mirrors pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip throws when both are explicitly false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip throws when neither horizontal nor vertical specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > flip vertical flip actually mirrors pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > grayscale already grayscale image does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > grayscale converts a color image to grayscale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > grayscale preserves dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert double invert returns to original",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert inverts black to white",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert inverts white to black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > invert preserves dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb combines maxWidth + stripMetadata=false + progressive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to avif with quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to jpeg with quality and progressive",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to png with palette optimization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb converts to webp with quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb does not enlarge image when maxWidth > actual width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb handles 1x1 pixel image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb handles jpg input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb handles webp input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb lower quality produces smaller file for jpeg",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb lower quality produces smaller file for webp",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb preserves metadata when stripMetadata=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb progressive defaults to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb progressive=false for jpeg does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb resizes to both maxWidth and maxHeight (fit inside)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb resizes to maxHeight without enlargement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb resizes to maxWidth without enlargement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb stripMetadata=true (explicit) does not include metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb strips metadata by default",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb throws on unsupported format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > optimizeForWeb without maxWidth/maxHeight preserves original dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseExif parses EXIF buffer from test fixture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseExif returns empty sections for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseGps handles southern hemisphere",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseGps parses DMS coordinates to decimal degrees",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseGps returns nulls for empty GPS data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseXmp extracts key-value pairs from XMP XML",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseXmp returns empty object for empty buffer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > parseXmp skips xmlns and rdf namespace prefixes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage all 14 operation types run without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage applies a single resize operation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage applies brightness then contrast then saturation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage applies crop then flip",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage chains multiple operations in sequence",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage color-channels operation through processImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage convert + strip-metadata pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage converts output format via outputFormat parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage empty buffer throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage error in second operation aborts pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage invalid buffer input throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage invert then sepia pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage processes with no operations (passthrough)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage propagates operation-level errors through pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage resize then compress pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage result contains accurate ImageInfo metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage throws on unknown operation type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > processImage throws on unknown output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize fit=contain preserves aspect ratio within box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize fit=fill stretches to exact dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage = 200 doubles size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage on a 1x1 image rounds to at least 1px (percentage >= 50)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage rounds correctly for non-integer results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize percentage=1 on 1x1 clamps to 1px minimum",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes by percentage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes to explicit width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes with height only (width derived)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize resizes with width only (height derived)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on height = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on negative height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on negative percentage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on negative width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on percentage = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws on width = 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize throws when neither width, height, nor percentage given",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize withoutEnlargement clamps height only (no width given)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize withoutEnlargement does not clamp when target is smaller",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > resize withoutEnlargement prevents upscaling",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate arbitrary angle defaults background to black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate arbitrary angle produces a larger bounding box",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate arbitrary angle uses custom background color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate negative angle rotates counter-clockwise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 0 degrees (no-op)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 180 degrees (dimensions stay same)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 270 degrees (dimensions swap)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 360 degrees (no-op equivalent)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > rotate rotates 90 degrees (dimensions swap)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue converts Date to ISO string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue converts large Buffer to placeholder string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue converts small Buffer to number array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue passes through primitives unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sanitizeValue recursively sanitizes objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation boundary value 100 does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation throws on value = -101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation throws on value = 101",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation value = -100 desaturates to grayscale-like",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > saturation value = 0 makes no change",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia applies sepia tone to a colored image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia applies sepia tone to a white image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia black stays black",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sepia preserves dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen negative value returns image unchanged (no-op)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen sharpening actually modifies pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen throws on value = 200",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen throws on value > 100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 0 returns image unchanged (no-op)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 1 applies minimal sharpening",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 100 applies maximum sharpening",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen value = 50 applies moderate sharpening",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen works on a 1x1 pixel image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpen works on different image formats (webp)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced adaptive method with custom params",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced adaptive method with defaults does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise changes pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=light applies median(3) pre-pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=medium applies median(5) pre-pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=off applies no median filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced denoise=strong applies median(7) pre-pass",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced high-pass method with 3x3 kernel (default)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced high-pass method with 5x5 kernel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced high-pass method with custom strength",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced preserves dimensions for all methods",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced sharpen through processImage pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced sharpen-advanced through processImage pipeline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced throws on unknown method",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced unsharp-mask method with custom params",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > sharpenAdvanced unsharp-mask method with defaults does not throw",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata empty options defaults to strip all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata returns an image (default strips all)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata selective strip (stripExif only) returns image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripAll=true returns image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripGps=true enters selective stripping path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripIcc=true enters selective stripping path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/operations.test.ts > stripMetadata stripXmp=true enters selective stripping path",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths 3-channel encoding uses 255 for alpha in output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises DIFF encoding for small color changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises INDEX encoding for repeated colors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises LUMA encoding for medium color changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises RGB encoding for large color changes with same alpha",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises RGBA encoding for alpha changes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths exercises maximum RUN length of 62",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths handles all-zero pixels (black with full alpha)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths handles checkerboard pattern (many INDEX lookups)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths round-trips large image (100x100) with varied data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi-expanded.test.ts > QOI expanded codec paths run ending at last pixel produces correct output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec compresses solid color efficiently",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec decodes real fixture with correct header",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec encodes 3-channel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec ends with correct end marker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec re-encodes real fixture with matching pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips 1x1 image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips RGBA pixel data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips random-ish data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips solid color image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec round-trips varying alpha",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on invalid channels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on invalid magic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on zero height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec throws on zero width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec writes correct header dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/qoi.test.ts > QOI codec writes correct header magic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation accepts boundary value +100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation accepts boundary value -100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation decreases saturation at value -50",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation doubles saturation at value +100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation fully desaturates at value -100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation increases saturation at value +50",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation preserves image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation returns a Sharp instance at value 0 (no change)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation throws for value above +100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation throws for value below -100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/image-engine/saturation.test.ts > saturation works with JPEG input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/encoders.test.ts > resolveEncoder defaults to software encoders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/encoders.test.ts > resolveEncoder falls back to software for unknown accel values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/encoders.test.ts > resolveEncoder maps nvenc when SNAPOTTER_HW_ACCEL=nvenc",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/fonts.test.ts > resolveFontFile falls back to a real candidate on this machine",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/fonts.test.ts > resolveFontFile honors SNAPOTTER_FONT_FILE + SNAPOTTER_FONT_FAMILY",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/progress.test.ts > parseProgressBlock flags progress=end",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/progress.test.ts > parseProgressBlock parses an ffmpeg -progress key=value block",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/media-engine/progress.test.ts > parseProgressBlock tolerates missing fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation every template has a corresponding full-size image in full/ directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation every template has a corresponding thumbnail in thumbs/ directory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation every template has required fields with correct types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation has no duplicate template IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation manifest file exists and is valid JSON with version 1 and non-empty templates array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation no duplicate text box IDs within a template",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/meme-templates.test.ts > meme template manifest validation text box coordinates are in valid percentage range (0-100)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator covers every pair of values across all axis pairs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator handles degenerate inputs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator is deterministic",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pairwise.test.ts > pairwise covering-array generator produces far fewer cases than the full cartesian product",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange deduplicates overlapping ranges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange handles whitespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange parses a range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange parses a single page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange parses mixed ranges and singles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange returns all pages for 'all'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange returns all pages for empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange sorts output",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on empty range segment",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on negative page",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on non-numeric input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on page 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on page exceeding total",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on range exceeding total",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pdf-to-image.test.ts > parsePageRange throws on reversed range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns angle for rotate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns dimensions for crop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns dimensions for resize with width and height",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns empty string for tool with no relevant settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns empty string for unknown tool with empty settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns format for convert",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns percentage for resize with scale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns quality for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns target size for compress targetSize mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns text preview for watermark-text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary returns width only for resize with just width",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-step-summary.test.ts > getSettingsSummary truncates long watermark text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore addStep appends a step with generated id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore addStep auto-expands the new step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore loadSteps replaces all steps and generates new ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore removeStep clears expandedStepId if removing expanded step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore removeStep removes by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore reorderSteps swaps two step positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore reset clears all state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore starts with empty steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/pipeline-store.test.ts > usePipelineStore updateStepSettings merges settings for the target step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: all schemas accept valid input all schemas pass with normal-length fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: changePasswordSchema max lengths rejects oversized currentPassword",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: changePasswordSchema max lengths rejects oversized newPassword",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults LOGIN_ATTEMPT_LIMIT defaults to 30",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults MAX_STORAGE_PER_USER_MB defaults to 5000",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults MAX_WORKSPACE_SIZE_GB defaults to 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: env defaults RATE_LIMIT_PER_MIN is parsed correctly (test env overrides to 10000)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths accepts password at exactly 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths accepts username at exactly 255 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths rejects password longer than 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: loginSchema max lengths rejects username longer than 255 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: registerSchema max lengths rejects password longer than 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: registerSchema max lengths rejects username longer than 255 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-auth-hardening.test.ts > Security: resetPasswordSchema max lengths rejects newPassword longer than 1024 chars",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > Settings payload size limit allows normal-sized settings payload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > Settings payload size limit allows settings payload at exactly 64KB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > Settings payload size limit rejects settings payload exceeding 64KB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths handles empty string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths handles multiple paths in a single message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths preserves messages with no filesystem paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths preserves non-path content unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /app/ paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /data/ paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /home/ and /opt/ paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /tmp paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-error-handling.test.ts > stripInternalPaths removes /workspace/ paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-file-processing.test.ts > Temp file exclusive creation (O_EXCL) cleans up in finally blocks even after write failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-file-processing.test.ts > Temp file exclusive creation (O_EXCL) creates a new temp file successfully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-file-processing.test.ts > Temp file exclusive creation (O_EXCL) fails if the file already exists (prevents overwrite)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > Drizzle ORM: parameterized query audit confirms no sql.raw() or sql.identifier() usage in API source",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping does not strip non-sensitive paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping leaves safe messages untouched",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /app paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /data paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /home paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /opt paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /tmp paths from error messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips /tmp paths including trailing colons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: internal path stripping strips multiple paths in one message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation accepts valid tag names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation buildTagArgs validates fieldsToRemove tag names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects empty tag names",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects tag names with path traversal",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects tag names with shell metacharacters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag name validation rejects tag names with spaces",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation accepts tag values at exactly 10,000 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation buildTagArgs rejects tag values over the limit",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation buildTagArgs strips null bytes from all string fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation rejects tag values exceeding 10,000 characters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation rejects when cleaned value (after null removal) is still too long",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation strips null bytes from tag values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-input-validation.test.ts > ExifTool security: tag value validation strips null bytes then checks length",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: expected directives present includes connect-src with analytics origins",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: expected directives present includes default-src, script-src, style-src, and object-src in non-docs CSP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: expected directives present includes img-src with blob: and data: in non-docs CSP",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: script-src does NOT include unsafe-inline for non-docs docs CSP script-src includes unsafe-inline (required by Scalar)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > CSP: script-src does NOT include unsafe-inline for non-docs non-docs CSP script-src omits unsafe-inline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: allows public IPs allows 1.1.1.1 (Cloudflare DNS)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: allows public IPs allows 8.8.8.8 (Google DNS)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: allows public IPs allows 93.184.216.34 (example.com)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks 6to4 addresses (2002::) blocks 2002::1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks 6to4 addresses (2002::) blocks 2002:c0a8::1 (encapsulated 192.168.x.x)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks IPv6 loopback blocks :: (IPv6 unspecified)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks IPv6 loopback blocks ::1 (IPv6 loopback)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks NAT64 addresses (64:ff9b::) blocks 64:ff9b::1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks NAT64 addresses (64:ff9b::) blocks 64:ff9b::c0a8:0101 (NAT64 mapping of 192.168.1.1)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 10.x.x.x (class A private)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 127.0.0.1 (loopback)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 169.254.x.x (link-local / cloud metadata)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 172.16.x.x - 172.31.x.x (class B private)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-network.test.ts > SSRF: blocks private IPv4 addresses blocks 192.168.x.x (class C private)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic allows upload within quota",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic calculates quota correctly for MB to bytes conversion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic formats the error message correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic identifies exceeded quota",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Per-user storage quota logic skips quota check when limit is 0 (unlimited)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Upload route rate limit configuration rate limit config has reasonable bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Upload route rate limit configuration rate limit config object matches expected shape",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker allows processing at >= 0.5GB free after cleanup",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker correctly calculates GB from statfs values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker rejects processing at < 0.5GB free",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker skips check when workspace directory does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker statfs returns valid disk space info for existing directories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-rate-limiting.test.ts > Workspace capacity circuit breaker triggers cleanup threshold at < 1GB free",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- CDATA bypass strips CDATA sections that hide script content",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XInclude strips xi:include elements and namespace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XSS script injection strips case-varied <SCRIPT> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XSS script injection strips nested SVG with script",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XSS script injection strips standard <script> tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XXE attacks removes DOCTYPE with SSRF XXE entity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XXE attacks removes DOCTYPE with file-read XXE entity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- XXE attacks removes XML entity bypass with entity-encoded javascript URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- animation injection strips <animate> elements with javascript: values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- animation injection strips <set> elements that inject event handlers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- clean SVGs pass through preserves a minimal clean SVG unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- clean SVGs pass through preserves internal CSS styles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- clean SVGs pass through preserves internal fragment href in <use>",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks data: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks embedded image with data:text/html href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks entity-encoded javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks newline-obfuscated javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks null-byte-obfuscated javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- dangerous URI schemes blocks tab-obfuscated javascript: URI in href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- event handler injection removes onload event handler",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- external <use> href preserves <use> with internal fragment reference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- external <use> href removes <use> with external href (no xlink)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- external <use> href removes <use> with external xlink:href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF preserves <feImage> with internal fragment reference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with HTTPS external href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with data: href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with external HTTP href (cloud metadata SSRF)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with file: href",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- feImage SSRF strips <feImage> with xlink:href external URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- foreignObject strips foreignObject with embedded HTML body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- foreignObject strips mixed-case <ForeignObject> variant",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/security-svg-sanitize.test.ts > SVG sanitizer -- url() scheme blocking blocks data: scheme inside url() property values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata AI (sidecar) tools are hinted long (except pure-CV ones)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata defines five modalities with UI metadata",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata detects modality from mime",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata every tool declares a valid modality, acceptedInputs and executionHint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata maps every modality to a worker pool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/shared/modality.test.ts > modality metadata pdf-to-image is a document-modality tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/use-focus-trap.test.ts > useFocusTrap should be importable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp bootstraps on first run when no venv exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp cleans up interrupted bootstrap from previous start",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp does not reset installed.json when no bundles were installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp does nothing when /opt/venv does not exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp does nothing when /opt/venv has no stamp (old image)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp refreshes when stamps differ (upgrade)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp refreshes when venv has no stamp (pre-stamp image upgrade)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp resets installed.json when refreshing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/venv-upgrade-stamp.test.ts > venv upgrade stamp skips when stamps match",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry blocks fetch breadcrumbs to file URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry blocks ui.click breadcrumbs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry redacts file paths from exception values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant PII never leaks even with consent Sentry strips user.email and user.username from events",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant consent revoked during async SDK import PostHog is not active if consent revoked while import resolves",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant rapid consent toggles ending on false means nothing is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) identify() never calls posthog.identify",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) initAnalytics with enabled config but no consent skips PostHog",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) no PostHog or Sentry SDK is loaded at all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) startErrorReplay() never calls posthog.startSessionRecording",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is never granted (fresh user) track() never calls posthog.capture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted Sentry beforeBreadcrumb returns null after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted Sentry beforeSend returns null after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted identify() is silent after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted shutdownAnalytics opts out and resets PostHog",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted startErrorReplay() is silent after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when consent is revoked after being granted track() is silent after revocation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false identify() is a silent no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false initAnalytics never calls Sentry.init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false initAnalytics never calls posthog.init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false startErrorReplay() is a silent no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when server config.enabled is false track() is a silent no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when user is in remind-later state (consent = null) no SDK activity after remind-later even with enabled config",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics-no-leak.test.ts > Analytics No-Leak Invariant when user is in remind-later state (consent = null) remind-later calls setAnalyticsConsent(false), not true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback passes through breadcrumbs without message field",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback passes through fetch breadcrumbs without file extension URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback returns null for fetch breadcrumbs with file extension URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback returns null for ui.click breadcrumbs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback returns null when consent is not granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeBreadcrumb callback scrubs messages containing file paths",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback handles event without user or exception fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback handles exception values without stacktrace",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback returns null when consent is not granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib Sentry beforeSend callback scrubs file extensions from exception values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib full consent lifecycle accept -> use -> revoke -> silent -> re-accept -> use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib full consent lifecycle rapid consent toggles do not corrupt state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib full consent lifecycle server disabled overrides user consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify calls posthog.identify with consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify does not call posthog.identify without consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify does not throw before initialization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib identify swallows exceptions from posthog.identify",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics bails out if consent is revoked during async import",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics calls posthog.init when config.enabled and consent are both true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics does not double-initialize on repeated calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics initializes Sentry when sentryDsn is provided and consent is granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics retries initialization if first attempt throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics skips Sentry when sentryDsn is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics skips initialization when config.enabled is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics skips posthog.init when consent is not granted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib initAnalytics swallows Sentry init errors and logs a warning",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent can be toggled multiple times",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent does not throw when setting consent to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent does not throw when setting consent to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent does not trigger shutdown when set to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib setAnalyticsConsent triggers shutdown when set to false after init",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics allows re-initialization after shutdown",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics calls opt_out_capturing and reset on the posthog instance",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics is safe to call multiple times",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics is safe to call when not initialized",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics swallows exceptions from posthog.opt_out_capturing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib shutdownAnalytics swallows exceptions from posthog.reset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay calls startSessionRecording with consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay does not call startSessionRecording without consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay does not throw before initialization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib startErrorReplay swallows exceptions from posthog.startSessionRecording",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track calls capture with consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track does not call capture without consent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track does not throw before initialization",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track swallows exceptions from posthog.capture",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/analytics.test.ts > analytics lib track works without properties",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path does NOT grant admin when authEnabled is true and session fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path does not call session endpoint when auth is disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path includes all admin permissions in anonymous mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path includes settings:write in anonymous permissions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth anonymous happy path sets role to admin when authEnabled is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/anonymous-auth.test.ts > useAuth hasPermission returns false for permissions not in the list",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError returns empty string if API message is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError returns original message for unmapped API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError returns original message when mapped key is missing from translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Authentication required'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Connection error'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Current password is incorrect'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'File too large'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Invalid credentials'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Invalid username or password' to same key as invalid credentials",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'No valid files uploaded'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Not found'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Permission denied'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Processing failed'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Rate limit exceeded'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-errors.test.ts > translateApiError translates 'Request timed out'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > URL helpers getDownloadUrl builds correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > URL helpers getFileDownloadUrl builds correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > URL helpers getFileThumbnailUrl builds correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDeleteUserFiles sends DELETE with JSON body of ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDeleteUserFiles throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDeleteUserFiles triggers disconnected on TypeError",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDownloadBlob network errors does NOT trigger disconnected on non-TypeError",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiDownloadBlob network errors triggers disconnected on TypeError from fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiGetFileDetails returns merged file and versions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles calls correct URL without params",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes all params when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes limit param when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes offset param when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiListFiles includes search param when provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiUploadUserFiles sends files as FormData to upload endpoint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiUploadUserFiles throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > apiUploadUserFiles triggers disconnected on network error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders does not include analytics consent header when consent is not true/false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders does not include analytics consent header when token exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders includes Authorization header when token is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders includes analytics consent header when consent is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders includes analytics consent header when no token and consent is set to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders merges provided HeadersInit with auth headers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > formatHeaders omits Authorization header when no token",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns FeatureNotInstalledError for FEATURE_NOT_INSTALLED code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns JSON-stringified details for object arrays without message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns JSON-stringified object details",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns array details joined with semicolons",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns array of objects details with message property",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns details only when error is not a string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns error string when error field is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns fallback message when no error or message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns message field when error field is missing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > parseApiError returns string details appended to error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > throwWithMessage error extraction extracts error field from response JSON",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > throwWithMessage error extraction extracts message field when error is absent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/api-extended.test.ts > throwWithMessage error extraction falls back to status code when JSON parsing fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle borderRadius is 0px when a frame is present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle borderRadius is normal when frame is none",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle custom shadow computes CSS from parameters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle image background sets backgroundImage with blob URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle image background without URL does not set backgroundImage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle linear gradient builds CSS gradient string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle named shadow presets return correct CSS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle none shadow returns no boxShadow",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle padding and borderRadius are set from settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle radial gradient builds CSS gradient string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle solid background returns the color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > buildPreviewStyle transparent background sets no background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > hexToRgba converts arbitrary color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > hexToRgba converts black with full opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/beautify-preview.test.ts > hexToRgba converts white with half opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders amber banner when disconnected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders green banner when reconnected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders nothing when connected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-banner.test.ts > ConnectionBanner renders offline banner when offline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth is a no-op when already connected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth stays disconnected on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions connected → disconnected on fetch failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions connected → disconnected on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions disconnected → reconnected on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store checkHealth transitions offline → reconnected on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store does not overwrite failedSince on repeated setDisconnected calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store refreshStaleData calls settings fetch and features refresh",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store setOnline is no-op when not offline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store startPolling is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store starts in connected state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store stopPolling clears the interval",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store transitions from offline to disconnected on setOnline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store transitions to disconnected on setDisconnected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/connection-store.test.ts > connection-store transitions to offline on setOffline",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload calls onFiles when files are selected via file picker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload calls onFiles with multiple files from file picker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload disables multiple when multiple=false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload does not call onFiles when no files are selected (dialog cancelled)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload opens file picker when the Upload button is clicked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload opens file picker when the section is clicked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload sets accept attribute when accept prop is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone click to upload sets multiple attribute on the file input by default",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste accepts pasted HEIC image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste calls onFiles when an image is pasted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste does not call onFiles when pasted content has no image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste does not prevent default on paste when no image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste filters out non-image files from paste",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste handles multiple pasted images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste handles paste where getAsFile returns null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste ignores paste with no clipboardData at all",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste ignores paste with no clipboardData items and no files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste ignores text-only paste (no file items)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste prevents default on paste when image files are found",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste removes paste listener on unmount",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) accepts RAW and HEIC files from Finder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) falls back to items when files is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) filters non-image files from Finder paste",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) handles a single file from Finder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) handles multiple files copied from Finder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) ignores Finder paste with only non-image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) prefers clipboardData.files over items when both are present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone clipboard paste via files (Finder) prevents default when files are found via clipboardData.files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone compact mode renders without min-height in compact mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone compact mode uses standard min-height in default mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop accepts HEIC files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop accepts PSD files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop accepts RAW files identified by extension on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop calls onFiles with image files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop does not call onFiles when all dropped files are non-image",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop filters out non-image files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop handles multiple image files on drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop removes drag styling after drop",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop shows drag-active styling on dragenter and removes on dragleave",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone drag and drop shows drag-active styling on dragover",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering does not show file list for a single file",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering does not show file list when no files provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering renders the drop zone section with aria label",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering renders upload button and helper text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering shows file count and list when multiple files are provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone rendering shows supported formats hint",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone without onFiles callback does not throw on click without onFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone without onFiles callback does not throw on drop without onFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > Dropzone without onFiles callback does not throw on paste without onFiles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts HEIC/HEIF variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts JPEG 2000 variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts RAW camera formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts common image extensions even without MIME type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts files with image/* MIME type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts netpbm/scientific formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile accepts professional/specialized formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile is case-insensitive for extensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile rejects files with no extension and no image MIME",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/dropzone.test.tsx > isImageFile rejects non-image files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments defaults all to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments resetAdjustments restores all to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment clamps brightness to -100..100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment clamps contrast to -100..100",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment clamps hue to 0..359",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment does not affect other values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Adjustments setAdjustment updates a specific value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings default brushHardness is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings default brushOpacity is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings default brushSize is 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushHardness clamps to 0..1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushOpacity clamps to max 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushOpacity clamps to min 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushOpacity updates value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize clamps negative to 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize clamps to max 500",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize clamps to min 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Brush Settings setBrushSize updates value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State default canvas size is 1920x1080",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage resets zoom and panOffset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage sets sourceImageSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage sets sourceImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State loadImage updates canvasSize to image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State resizeCanvas marks dirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State resizeCanvas updates canvasSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State resizeImage updates both canvasSize and sourceImageSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setPanOffset updates offset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom clamps negative values to minimum",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom clamps to maximum 64",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom clamps to minimum 0.01",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas State setZoom updates zoom",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms flipCanvasHorizontal flips object x positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms flipCanvasVertical flips object y positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 180 keeps dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 270 swaps dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 90 swaps dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms rotateCanvas 90 transforms object positions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms trimCanvas no-ops when no objects exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Canvas Transforms trimCanvas trims to object bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard clipboard starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard copyObjects does not modify original objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard copyObjects stores selected objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard cutObjects stores and removes selected objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteInPlace adds at exact position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteInPlace assigns new IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteInPlace is a no-op when clipboard is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects adds with new IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects is a no-op when clipboard is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects is a no-op when clipboard is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects offsets by 10px",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Clipboard pasteObjects selects pasted objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System defaults to black foreground",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System defaults to white background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System recentColors has no duplicates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System recentColors max 12 entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System recentColors puts newest first",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System resetColors restores defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System setBackgroundColor updates color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System setForegroundColor adds to recentColors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System setForegroundColor updates color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Color System swapColors exchanges foreground and background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop clears cropState and isCropping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop is a no-op without cropState",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop marks dirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop offsets objects by crop origin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop applyCrop updates canvasSize to crop dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop cropState starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop setCropState null clears crop and isCropping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Crop setCropState stores state and sets isCropping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Cursor Position setCursorPosition updates position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State addLayer sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State addObject sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State applyCrop sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State isDirty starts false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State markClean sets isDirty to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State markDirty sets isDirty to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State removeObjects sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State reorderLayers sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State resizeCanvas sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State setLoadingState null clears it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State setLoadingState stores loading state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Document State updateLayer sets isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters all filters disabled initially",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters setFilterParam does not affect other filters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters setFilterParam updates a filter parameter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters toggleFilter disables an enabled filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Filters toggleFilter enables a filter",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides addGuide assigns unique ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides addGuide creates a guide",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides guides starts empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides removeGuide deletes by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleGrid flips gridVisible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleGuides flips guidesVisible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleRulers flips rulersVisible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides toggleSnapping flips snappingEnabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Guides updateGuide changes position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer auto-increments name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer creates a new layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer inserts above active layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer marks isDirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management addLayer sets new layer as active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management default layer is active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer copies objects to new layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer creates copy with (copy) suffix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer preserves layer properties",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management duplicateLayer sets new layer as active",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management flattenAll moves all objects to bottom layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management flattenAll reduces to single layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management mergeDown combines layer into the one below",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management mergeDown does nothing for the bottom layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management mergeDown sets active layer to the one below",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer also removes objects belonging to that layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer deletes the layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer keeps activeLayerId when non-active is removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer prevents deleting the last layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management removeLayer selects adjacent layer when active is removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management reorderLayers moves layer from one index to another",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management setActiveLayer changes activeLayerId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management starts with one layer named Layer 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes blendMode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes locked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes opacity",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Layer Management updateLayer changes visibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject appends to objects array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject assigns active layerId when not specified",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject marks dirty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management addObject preserves specified layerId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringForward does nothing for last object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringForward swaps with next object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringToFront moves object to end of its layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management bringToFront with non-existent id is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management removeObjects clears selection for removed ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management removeObjects deletes by ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management removeObjects keeps selection for non-removed ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management sendBackward does nothing for first object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management sendBackward swaps with previous object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management sendToBack moves object to start of its layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management setSelectedObjects stores ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management updateObject does not affect other objects",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Object Management updateObject modifies attrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Right Panel default tab is layers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Right Panel setRightPanelTab changes tab",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Right Panel toggleRightPanel flips visibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection invertSelection does nothing with no selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection invertSelection does nothing without a mask",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection invertSelection flips mask bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection selection starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection setSelection null clears selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Selection setSelection stores state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management default tool is move",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management previousTool starts as null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool changes activeTool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool stores previousTool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool to crop sets isCropping true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > Tool Management setTool to non-crop sets isCropping false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > applyCrop with line objects shifts line points by crop offset",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > batchNudge creates history entry with Nudge action",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > batchNudge moves line objects (points array) by dx, dy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > batchNudge moves multiple objects by dx, dy",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute flipCanvasHorizontal negates rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute flipCanvasVertical negates rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute rotateCanvas 90 adds 90 to existing rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > canvas transforms update rotation attribute rotateCanvas 90 compounds with existing rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > commitHistory increments _historyVersion",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > commitHistory sets lastAction to provided string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > cutObjects atomic creates history entry with Cut action",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > cutObjects atomic does nothing when no objects selected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > cutObjects atomic removes selected objects and stores in clipboard atomically",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > flipCanvas with line objects flipCanvasHorizontal flips line points x-coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > flipCanvas with line objects flipCanvasVertical flips line points y-coordinates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > invertSelection for bounds-based selections area inside bounds is 0 after inversion, outside is 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > invertSelection for bounds-based selections creates mask from bounds and inverts it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > invertSelection for bounds-based selections mask has correct dimensions (canvasSize width * height)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling handles non-uniform scaling (different scaleX/scaleY)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales ellipse radii proportionally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales line/arrow points arrays proportionally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales rect positions and dimensions proportionally",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales strokeWidth",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > resizeImage object scaling scales text fontSize and position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > rotateCanvas with line objects rotates line points 180 degrees",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > rotateCanvas with line objects rotates line points 270 degrees clockwise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > rotateCanvas with line objects rotates line points 90 degrees clockwise",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > sendToBack with multiple layers handles case when no other objects on same layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > sendToBack with multiple layers places object at start of its layer's section, not at index 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > transform with center-based objects flipCanvasHorizontal correctly flips ellipse center position (no width subtraction)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > transform with center-based objects rotateCanvas 90 correctly rotates ellipse center position",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > trimCanvas with line objects computes correct bounds from line points",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > trimCanvas with line objects offsets line points after trim",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > updateLayerThumbnail does not affect other layers",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-store.test.ts > updateLayerThumbnail sets thumbnail on the specified layer",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to ellipse type with EllipseAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to line type with LineAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to rect type with RectAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > CanvasObject discriminated union narrows to text type with TextAttrs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > ToolType each variant is a string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/editor-types.test.ts > ToolType includes expected tool variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) clearError does not affect other errors when clearing one",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) fetch edge cases recovers multiple active installs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) fetch edge cases sets loadError false on success after previous error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) fetch edge cases uses fallback progress for recovering installs without progress data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) getBundleForTool edge cases returns null when bundles array is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) installBundle queuing edge cases does not duplicate already-queued bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) installBundle skips already-installed bundles from queue skips bundle that got installed while queued",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) isToolInstalled edge cases handles error status as not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) isToolInstalled edge cases handles installing status as not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) isToolInstalled edge cases returns true for unknown tools (no bundle requirement)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) refresh updates bundles even when already loaded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) startTimes tracking records startTime when install begins",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store-expanded.test.ts > useFeaturesStore (expanded) uninstallBundle edge cases refreshes bundles after successful uninstall",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling falls back to polling on EventSource error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling handles failed phase from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling handles failed phase with no error message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling progress percent never decreases",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore EventSource progress handling updates progress on message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore clearError() does nothing if error does not exist for bundleId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore clearError() removes error for specified bundleId",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() does a background refresh if already loaded without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() recovers active installs after successful fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() retries fetch if previously loaded with error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() sets bundles from response and loaded = true on success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore fetch() sets loadError = true on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore getBundleForTool() returns matching bundle state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore getBundleForTool() returns null when bundle id has no matching state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore getBundleForTool() returns null when no bundle for tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state bundles is empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state errors is empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state installAllActive is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state installing is empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state loadError is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state loaded is false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore initial state queued is empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installAll() clears stale errors for pending bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installAll() sets installAllActive = true and processes all uninstalled bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() clears previous error for the bundle before installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() on API failure with non-Error: uses fallback message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() on API failure: sets error and clears installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore installBundle() sets installing state and calls API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore isToolInstalled() returns false when bundle exists but not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore isToolInstalled() returns true when tool bundle is installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore isToolInstalled() returns true when tool has no bundle requirement",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore refresh() refreshes bundles from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore refresh() silently handles refresh failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore reinstallBundle() calls uninstall then install in sequence",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore uninstallBundle() calls API and refreshes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore uninstallBundle() sets error on failure with Error instance",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/features-store.test.ts > useFeaturesStore uninstallBundle() sets fallback error on failure with non-Error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked calls API with checked IDs and refreshes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked is a no-op when no IDs are checked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked sets error on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore deleteChecked sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles loads files from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles passes searchQuery to API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles passes undefined search when searchQuery is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles sets error on API failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore fetchFiles sets loading true during request",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore selectFile sets selected file ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore selectFile with null clears selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore setActiveTab switches to recent tab",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore setActiveTab switches to upload tab",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore setSearchQuery updates search query",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleCheckAll deselects all when all are already selected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleCheckAll selects all files when none are selected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleCheckAll selects all when only some are checked",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleChecked adds an ID to the checked set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleChecked handles multiple IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore toggleChecked removes an already-checked ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore uploadFiles calls API then refreshes files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore uploadFiles sets error on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/files-page-store.test.ts > useFilesPageStore uploadFiles sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate formats a Date object with en-US locale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate formats an ISO date string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate formats end-of-year date correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDate handles different locales",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDateTime formats an ISO string with time",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDateTime handles midnight correctly",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/format-extended.test.ts > formatDateTime includes both date and time components",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format handles empty template",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format handles template with no placeholders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format preserves unmatched placeholders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format replaces multiple placeholders",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format replaces numeric values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > format replaces single placeholder",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats gigabytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats kilobytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize formats megabytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > formatFileSize handles zero",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns one form for count 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns other form for count 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns other form for count > 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-format.test.ts > plural returns other form for negative count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES all locales have required fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES has 21 locales including English",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES has Arabic as RTL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > SUPPORTED_LOCALES includes English as first entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has 24 categories",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has 25 rotating phrases",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has 30 progress messages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > en translation completeness has all required top-level sections",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > loadTranslations returns English fallback for unsupported locale",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/i18n-locale.test.ts > loadTranslations returns English translations for 'en'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP contains all category icons referenced by shared constants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP contains all tool icons referenced by shared constants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP does not contain undefined or null values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP every value is a valid React component",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP is a non-empty object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP keys are PascalCase (Lucide icon naming convention)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/icon-map.test.ts > ICON_MAP specific commonly used icons exist",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > fetchDecodedPreview returns null when fetch throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > fetchDecodedPreview returns null when response is not ok",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > fetchDecodedPreview sends POST to /api/v1/preview with the file as FormData",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview handles uppercase extensions (case insensitive)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns false for common browser-decodable formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns false for files without extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for EXR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HDR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HEIF files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for HIF files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for ICO files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for JXL files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for PSD files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for RAW formats (dng, cr2, nef, arw, orf, rw2)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > needsServerPreview returns true for TGA files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > revokePreviewUrl calls URL.revokeObjectURL for any string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > revokePreviewUrl calls URL.revokeObjectURL with the given URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > triggerDownload creates an anchor element, clicks it, and removes it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/image-preview-download.test.ts > triggerDownload sets the href and download attributes on the anchor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter negative exposure darkens pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter positive exposure brightens pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createExposureFilter zero exposure is no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createGrainFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createGrainFilter modifies pixel values (adds noise)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createMotionBlurFilter blurs pixels in the direction of the angle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createMotionBlurFilter does not throw on edge pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createSharpenFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createSharpenFilter sharpens high-contrast edges",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVibranceFilter does not modify alpha channel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVibranceFilter neutral gray pixels remain neutral",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVibranceFilter positive vibrance increases saturation of dull pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVignetteFilter center pixel is minimally affected",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createVignetteFilter darkens corner pixels more than center pixels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createWarmthFilter does not modify green or alpha channels",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createWarmthFilter negative warmth increases blue, decreases red",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/konva-filters.test.ts > createWarmthFilter positive warmth increases red, decreases blue",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns false for non-Error values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns false for unrelated errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for dynamically imported module error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for failed to fetch error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for loading CSS chunk error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for loading chunk error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > isChunkError returns true for unable to preload error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > lazyWithRetry returns a React lazy component",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport only retries chunk-related errors, not other errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport rejects after all retries exhausted",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport resolves on first success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport retries CSS preload errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lazy-with-retry.test.ts > retryDynamicImport retries on failure and resolves on eventual success",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > COLLAGE_TEMPLATES every template has a non-empty label",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > COLLAGE_TEMPLATES every template has cells matching or exceeding imageCount",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > COLLAGE_TEMPLATES has templates for counts 2 through 9",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > SKIP_KEYS contains expected internal keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > SKIP_KEYS does not contain display keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for missing key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for non-string/number values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for null exif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns empty string for undefined exif",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns string value from exif object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > exifStr returns stringified number from exif object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats ExposureTime >= 1 as plain number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats ExposureTime as fraction",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats FNumber with f/ prefix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue formats FocalLength with mm suffix",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue handles arrays of exactly 6 items",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue joins short arrays with commas",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns 'N/A' for null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns 'N/A' for undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns plain number string for other numeric keys",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue returns string values as-is",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue stringifies other types",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatExifValue summarizes long arrays",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize formats bytes at or above 1 MB as MB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize formats bytes under 1 MB as KB",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize formats values just below 1 MB threshold",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > formatFileSize handles zero bytes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getDefaultTemplate returns a template for count 1",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getDefaultTemplate returns first exact match for known count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getDefaultTemplate returns nearest template for unknown count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns default fallback for an unknown tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns suggestions for a known tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns suggestions for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getSuggestedTools returns suggestions for remove-background",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplateById finds a template by ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplateById returns undefined for unknown ID",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplatesForCount returns empty array for unsupported count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplatesForCount returns multiple templates for counts with variants",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > getTemplatesForCount returns templates matching a given image count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns false for files with no extension",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns false for standard browser-supported formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for EXR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for HDR files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for HEIF files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for ICO files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for JPEG XL files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for PSD files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for TGA files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/lib-helpers.test.ts > needsServerPreview returns true for camera RAW formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToEditor clears resultUrl and downloadUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToEditor preserves other state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToEditor sets phase to editor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToGallery clears all selection state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToGallery resets phase to gallery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore backToGallery revokes customImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants CATEGORIES has expected entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants FONT_FAMILY_MAP maps all font options",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants FONT_OPTIONS has expected entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants PRESET_LAYOUTS has all 5 layouts",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore constants PRESET_LAYOUTS have correct box structures",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates on fetch failure: sets error message and loading false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates on non-ok response: sets error with status code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates on success: sets templates from manifest and loading false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore fetchTemplates sets loading true and error null on start",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on failure: sets error and generating false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on non-ok response with no body error: uses status code",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on non-ok response: extracts error from body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme on success: sets resultUrl, downloadUrl, phase result, generating false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme sets generating true on start",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme with custom file: sends FormData POST",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore generateMeme with template: sends JSON POST (no FormData)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore initial state has correct defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore injectMemeFonts creates style element in document head and is idempotent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore reset resets everything to initial defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore reset revokes customImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate clears customFile, customImageUrl, and customLayout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate clears resultUrl, downloadUrl, error, and generating",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate creates textBoxValues from template textBoxes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate does not call revokeObjectURL when customImageUrl is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate revokes old customImageUrl if present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate sets phase to editor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore selectTemplate sets selectedTemplate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage clears selectedTemplate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage creates blob URL via URL.createObjectURL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage revokes old customImageUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage sets phase to layout-picker",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomImage stores the file as customFile",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout creates textBoxValues from PRESET_LAYOUTS",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout creates two text boxes for top-bottom layout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout falls back to top-bottom layout for unknown layout",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout sets customLayout value",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore setCustomLayout sets phase to editor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setActiveCategory updates activeCategory",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setAllCaps updates allCaps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setFontFamily updates fontFamily",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setFontSize updates fontSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setPhase updates phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setSearchQuery updates searchQuery",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setStrokeColor updates strokeColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setTextAlign updates textAlign",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore simple setters setTextColor updates textColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore updateTextValue handles non-existent id gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore updateTextValue leaves other text boxes unchanged",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/meme-store.test.ts > useMemeStore updateTextValue updates the correct text box by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) hides security, people, teams, roles when auth is disabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) returns exactly 8 items for anonymous admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) shows audit-log (not authRequired, only needs audit:read)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth disabled (anonymous admin) shows general, system, api-keys, ai-features, tools, analytics, about",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + admin includes auth-dependent sections",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + admin shows all 12 items for authenticated admin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + user role hides permission-gated sections for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + user role returns exactly 6 items for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/settings-nav-filtering.test.ts > settings nav filtering auth enabled + user role shows general, security, api-keys, tools, analytics, about for user role",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes email with only body (no subject)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes email with only subject (no body)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes empty text data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes sms with empty message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes vcard with only first name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes wifi with WEP encryption",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > encodeQrData expanded encodes wifi with no password (nopass)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useBase64Store expanded addResult followed by addError does not clear results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useBase64Store expanded setProgress with valid progress then null clears progress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useBase64Store expanded setResults replaces previous results entirely",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useDuplicateStore expanded overrideBest then reset clears all overrides",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useDuplicateStore expanded setScanning to false preserves other state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useDuplicateStore expanded setViewMode to overview preserves selectedGroupIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded loadSteps creates deep copies of settings",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded loadSteps with empty array clears all steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded removeStep with nonexistent ID is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded reorderSteps with one invalid ID is a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded reorderSteps with same ID is effectively a no-op",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > usePipelineStore expanded updateStepSettings for nonexistent ID does not crash",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setBgColor updates background color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerDotColor updates corner dot color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerDotType changes corner dot type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerSquareColor updates corner square color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setCornerSquareType changes corner square type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientColor1 updates first gradient color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientColor2 updates second gradient color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientEnabled toggles gradient",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientRotation updates rotation",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotGradientType changes gradient type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setDotType changes dot type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setHideBackgroundDots toggles background dots visibility",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setLogoMargin updates logo margin",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setLogoSize updates logo size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setPhoneData updates phone data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useQrStore expanded setUseCustomCornerColors toggles custom corner colors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded getComputedTileDimensions in grid mode floors division",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded getEffectiveGrid returns columns/rows in tile-size mode without image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded getEffectiveGrid with tile-size computes ceil for non-exact divisions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setColumns clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setError updates error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setImageDimensions updates dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setImageDimensions with null clears dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setOutputFormat updates format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setProcessing updates processing flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setQuality updates quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setRows clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setTileHeight clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setTileWidth clears tiles on update",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores-expanded.test.ts > useSplitStore expanded setZipBlobUrl with null does not call revokeObjectURL when previous was null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib api network error → connection store does NOT trigger disconnected on HTTP errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib api network error → connection store triggers disconnected state on TypeError from fetch",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDelete sends DELETE with Bearer token (no body)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDelete throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDownloadBlob handles special characters in filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDownloadBlob returns a Blob from the download URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiDownloadBlob throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet omits Authorization header when no token is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet sends GET with Bearer token from localStorage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet throws on non-ok response (e.g., 401)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet throws on non-ok response (e.g., 500)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiGet throws when fetch itself rejects (network error)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPost sends POST with JSON body and Bearer token",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPost sends POST with undefined body when no body argument",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPost throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPut sends PUT with JSON body and Bearer token",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiPut throws on non-ok response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload appends multiple files to FormData under the same 'files' key",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload does NOT set Content-Type (browser sets multipart boundary)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload sends FormData with files to /api/v1/upload",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload sends empty FormData when given empty file array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib apiUpload throws on non-ok response with status in message",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib getDownloadUrl constructs the correct URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token freshness omits Authorization header after clearToken",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token freshness reads the token from localStorage on each request, not cached",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token management clearToken is idempotent (no throw when key missing)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token management clearToken removes 'snapotter-token' from localStorage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > API lib token management setToken stores in localStorage under 'snapotter-token'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore addFiles appends new entries without revoking existing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore addFiles triggers async preview for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore all entries completed can be derived from entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore currentEntry returns entry at selectedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore currentEntry returns undefined when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore empty entries means nothing is processed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore entries.length reflects file count",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore files getter maps entries to File[]",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigateNext advances selectedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigateNext does not exceed bounds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigatePrev decrements selectedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore navigatePrev does not go below 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore originalBlobUrl returns current entry blobUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore originalBlobUrl returns null when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore originalSize returns current entry originalSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore processedSize returns current entry processedSize",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore processedUrl returns current entry processedUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile adjusts selectedIndex when removing before it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile clamps selectedIndex if it was the last entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile removes entry and revokes its blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore removeFile revokes processedUrl if present",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore reset clears everything and revokes all blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore reset with no entries does not call revokeObjectURL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileName returns current entry file name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileName returns null when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileSize returns current entry file size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore selectedFileSize returns null when no entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setBatchZip stores blob and filename",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles clears error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles clears on empty array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles creates entries with blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles resets selectedIndex to 0",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles revokes old blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setFiles triggers async preview for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setJobId is a no-op (does not throw)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setProcessedUrl updates current entry processedUrl and status",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setProcessedUrl with null resets current entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore setSizes updates current entry sizes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore undoProcessing keeps original blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore undoProcessing resets all entries to pending and revokes processed blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > FileStore updateEntry merges partial data into the entry at index",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/stores.test.ts > useAuth security — network error does NOT grant admin when API is unreachable",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getCategoryName returns fallback for empty category id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getCategoryName returns fallback when category id is not in translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getCategoryName returns translated category name when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolDescription returns fallback when tool entry has no description",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolDescription returns fallback when tool id is not in translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolDescription returns translated description when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns fallback for empty tool id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns fallback when tool entry has no name",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns fallback when tool id is not in translations",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-i18n.test.ts > getToolName returns translated name when available",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift display-mode map has no orphan entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift every TOOLS entry has a display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift every TOOLS entry has a frontend registry entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift every registry entry has a Settings component and a valid display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-drift.test.ts > tool registry drift registry has no orphan entries (tools removed from TOOLS but not the registry)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) PreviewPanel presence tools with PreviewPanel have the correct display modes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) ResultsPanel requirements all custom-results tools have a ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) ResultsPanel requirements tools with no-comparison mode do not require ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) displayMode distribution has at least one tool per display mode in use",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) getToolRegistryEntry for all TOOLS each returned entry has Settings as a function or object",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) getToolRegistryEntry for all TOOLS returns defined entry for every shared TOOLS entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) livePreview flag consistency live-preview display mode tools have livePreview flag set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) livePreview flag consistency non-live-preview display mode tools do not have livePreview flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) registry size and completeness every entry in registry has a matching TOOLS entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) registry size and completeness has the same number of entries as TOOLS array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations barcode-read uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations color-palette uses no-comparison display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations compare uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations info uses no-comparison display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations ocr uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations replace-color uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations sharpening uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations strip-metadata uses no-comparison display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations text-overlay uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations vectorize uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations watermark-image uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry-expanded.test.ts > toolRegistry (expanded) specific tool configurations watermark-text uses before-after display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > CropSettingsWrapper renders CropSettings when cropProps is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > CropSettingsWrapper renders null when cropProps is undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > EraseObjectSettingsWrapper renders EraseObjectSettings when eraserProps is provided",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > EraseObjectSettingsWrapper renders null when eraserProps is undefined",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry no duplicate tool IDs in registry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for beautify with live-preview display",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for color-blindness",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for content-aware-resize with side-by-side display (regression #131)",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry for meme-generator with ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry with ResultsPanel for find-duplicates",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns entry with ResultsPanel for qr-generate",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns the correct entry for compress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns the entry for a known tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > getToolRegistryEntry returns undefined for an unknown tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > makeColorSettingsComponent adjust-colors Settings renders without throwing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry adjust-colors has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry beautify has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry border has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry color-blindness uses before-after display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains AI tool IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains all expected essential tool IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains format and conversion tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains layout and composition tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry contains utility tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry crop uses interactive-crop display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry erase-object uses interactive-eraser display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry every entry has a Settings component",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry every entry has a valid displayMode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry every tool in shared TOOLS[] has a matching registry entry",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry is a Map with entries",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry meme-generator has no-dropzone display mode with ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry rotate has livePreview enabled",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry split uses interactive-split display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry tools with custom-results display mode have a ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry tools with no-dropzone display mode have a ResultsPanel",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/tool-registry.test.ts > toolRegistry transparency-fixer uses before-after display mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls deduplicates URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls extracts URLs from HTML img tags",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls extracts URLs from markdown links",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls extracts plain URLs one per line",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls filters out non-HTTP URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls handles mixed formats",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls preserves URLs with query parameters",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls returns empty array for empty input",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls strips bullet prefixes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/url-parser.test.ts > extractUrls strips numbered list prefixes",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > copyToClipboard falls back to execCommand when clipboard API fails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > copyToClipboard returns false when both approaches fail",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > copyToClipboard returns true when clipboard API succeeds",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > generateId returns a valid UUID v4 string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/utils.test.ts > generateId returns unique values on successive calls",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/visibility-recovery.test.ts > visibility recovery connection monitor calls checkHealth when tab becomes visible",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/visibility-recovery.test.ts > visibility recovery connection monitor does not call checkHealth when tab becomes hidden",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes email data as mailto URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes email without subject/body",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes phone data as tel URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes sms data as smsto URI",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes text content type as plain text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes url/text content type as plain text",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes vcard data in vCard 3.0 format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes vcard without optional fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > encodeQrData encodes wifi data in WIFI: format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore acceptAnalytics calls API and sets consent to true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore acceptAnalytics falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore declineAnalytics calls API and sets consent to false",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore declineAnalytics falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore fetchConfig loads config from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore fetchConfig sets configLoaded=true on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore fetchConfig skips when already loaded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore remindLater calls API and sets remind-at 7 days in the future",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore remindLater falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore setConsent updates consent and calls setAnalyticsConsent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore toggleAnalytics disables analytics",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore toggleAnalytics enables analytics",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useAnalyticsStore toggleAnalytics falls back to localStorage on API error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store addError appends to errors array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store addResult appends to results array",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store reset clears all state to initial values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setExpandedIndex updates expanded index",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setProcessing updates processing flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setProgress updates progress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useBase64Store setResults stores results and errors, resets expandedIndex",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages appends to existing images",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages creates CollageImage entries and transitions to editing phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages preview callback handles image removed before resolve",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages preview callback handles null URL from fetchDecodedPreview",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore addImages triggers async preview loading for HEIC files",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore clearImages revokes all blob URLs and resets to upload phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore removeImage removes image by index and revokes blob URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore removeImage resets when last image is removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore reset revokes all blob URLs and restores initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore resetCellTransform removes transform for a cell",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setAspectRatio updates aspect ratio",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setBackgroundColor updates backgroundColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setBgPreset updates preset and color for named presets",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setBgPreset with custom does not overwrite backgroundColor",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setCellAssignment updates a single cell",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setCellTransform creates and merges transforms",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setCornerRadius updates corner radius",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setError sets error and returns to editing phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setGap updates gap and clears resultUrl",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setOutputFormat updates output format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setPhase updates phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setProgress updates progress",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setQuality updates quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setResult sets result fields and transitions to result phase",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setSelectedCell updates selected cell",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setTemplateId changes template and rebuilds assignments",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore setTemplateId ignores unknown template IDs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useCollageStore swapCells swaps assignments and transforms between two cells",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore overrideBest accumulates overrides per group",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore overrideBest replaces previous override for same group",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore reset clears everything",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setResults stores result and resets view state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setResults with null clears results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setScanning updates scanning flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setSelectedGroup sets index and switches to detail view",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useDuplicateStore setViewMode changes view mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore EventSource onerror closes and falls back to polling",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore clearError is a no-op for nonexistent bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore clearError removes a specific bundle error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch loads bundles from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch recovers active installs on load",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch recovers active installs with default progress when none given",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch retries when loadError is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch sets loaded=true and loadError=true on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore fetch triggers background refresh when already loaded without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore getBundleForTool returns null for unmapped tools",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore getBundleForTool returns null when bundle not found in bundles list",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore getBundleForTool returns the bundle for a mapped tool",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installAll clears stale errors for pending bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installAll processes all not-installed bundles sequentially",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installAll skips bundles that are already installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle clears previous error for that bundle",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle sets error on API failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore installBundle sets initial progress and calls API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns false for tools whose bundle is not installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns false when bundle exists but is in error state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns false when bundle is installing",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns true for tools whose bundle is installed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore isToolInstalled returns true for tools without a bundle mapping",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress handles complete phase from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress handles failed phase from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress handles progress updates from EventSource",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore listenToProgress uses max of current and new percent",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore refresh silently ignores API errors",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore refresh updates bundles from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore reinstallBundle calls uninstall then install",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore uninstallBundle calls API and refreshes bundles",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore uninstallBundle sets error on failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useFeaturesStore uninstallBundle sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert handles JSON parse failure on error response",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert is a no-op when no file is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sends compact page range for specific selection",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sends file with settings and stores results",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sets error on HTTP failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sets error on network exception",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore convert uses 'all' when pages is empty",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore deselectAllPages clears selection and sets pages to 'none'",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview fetches preview and sets pageCount and thumbnails",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets error on HTTP failure",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets error on fetch failure with fallback",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets error on network exception",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore loadPreview sets generic error for non-Error throws",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore reset restores initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore selectAllPages is a no-op when pageCount is null",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore selectAllPages selects all pages when pageCount is set",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setColorMode updates color mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setCustomDpi updates customDpi flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setDpi updates dpi",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setFile with a File resets results and pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setFile with null resets to initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setFormat updates format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with 'all' selects all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with empty string selects all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with invalid range falls back to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with null pageCount yields empty selectedPages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with out-of-range page falls back to all pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with single page number",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setPages with valid range sets selectedPages from parsed range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore setQuality updates quality",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage adds and removes pages",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage clearing all pages sets empty pages string",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage updates pages string as compact range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePdfToImageStore togglePage with non-contiguous pages shows individual values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore addStep adds a step with generated ID and expands it",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore addStep appends additional steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore loadSteps replaces all steps with new ones and clears expanded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore removeStep clears expandedStepId if removed step was expanded",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore removeStep preserves expandedStepId if different step removed",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore removeStep removes the step by id",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore reorderSteps no-ops for invalid ids",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore reorderSteps swaps two steps",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore reset clears all state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore setExpandedStep updates the expanded step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore setSavedPipelines stores the pipeline list",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore updateStepSettings merges settings into the step",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > usePipelineStore updateStepSettings replaces settings entirely",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore reset restores all defaults",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setBgTransparent toggles background transparency",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setContentType changes content type",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setDotColor updates dot color",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setDownloadFormat updates download format",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setEmailData merges partial email data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setErrorCorrection updates error correction level",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setLogoFile with a File reads it as a data URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setLogoFile with null clears logo data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setLogoFile(null) after a file clears both fields",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setSize updates size",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setSmsData merges partial sms data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setTextData updates text data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setVcardData merges partial vcard data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useQrStore setWifiData merges partial wifi data",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch applies server default theme when no user preference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch defaults defaultTheme to light for invalid values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch defaults defaultToolView to sidebar for unknown values",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch does not override user theme preference",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch handles empty disabledTools gracefully",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch loads settings from API",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch retries when loadError is true",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch sets loaded=true and loadError=true on error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore fetch skips when already loaded without error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSettingsStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore applyPreset sets mode to grid with given cols/rows",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getComputedTileDimensions computes tile size in grid mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getComputedTileDimensions returns null without image dimensions",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getComputedTileDimensions returns tile size in tile-size mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getEffectiveGrid computes from tile size in tile-size mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getEffectiveGrid returns columns/rows in grid mode",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore getTileCount returns columns * rows",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore reset revokes zip and tile blob URLs",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setColumns clamps to 1-100 range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setMode changes mode and clears tiles/zip/error",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setRows clamps to 1-100 range",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setTileHeight clamps to minimum 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setTileWidth clamps to minimum 10",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useSplitStore setZipBlobUrl revokes previous URL",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore applyServerDefault applies theme when no user-set flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore applyServerDefault does not set user-set flag",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore applyServerDefault skips when user-set flag exists",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore has correct initial state",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme sets user-set flag in localStorage",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme to dark updates theme and resolvedTheme",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme to light updates theme and resolvedTheme",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore setTheme to system resolves based on matchMedia",
"/Users/sidd/Desktop/Personal/Projects/SnapOtter/.claude/worktrees/test+suite-overhaul-and-real-fixtures/tests/unit/web/zustand-stores.test.ts > useThemeStore system theme resolves to dark when matchMedia prefers dark"
],
"counts": {
"total": 4547,
"passed": 4546
}
}