Context
The multimodal image pipeline has been implemented and has automated test coverage for serialization round-trips, ChatMessageConverter media handling, modality gating, and the attach_file tool. However, several integration paths require manual testing against real infrastructure before we can consider this feature complete.
Branch: claude-wt-multi-modal-models
Manual Test Plan
1. Slack Inbound — File Download + Content Scanning
2. Slack Outbound — File Upload
3. Modality Gate — Real Model Behavior
4. TUI Rendering
5. SignalR Wire Format
Automated Coverage (already passing)
For reference, these areas are covered by the 20 new automated tests:
- Protobuf round-trip:
SerializableChatMessage and SendUserMessage with MediaReferences (3 tests)
ChatMessageConverter: DataContent write/read, full round-trip, missing file handling, empty content, MIME mapping (7 tests)
- Modality gate: text-only strips images, image-only skips LLM, vision model passes through (3 tests)
AttachFileTool: valid path, path traversal, dotdot traversal, missing file, empty path, no session dir, display name (7 tests)
Context
The multimodal image pipeline has been implemented and has automated test coverage for serialization round-trips, ChatMessageConverter media handling, modality gating, and the
attach_filetool. However, several integration paths require manual testing against real infrastructure before we can consider this feature complete.Branch:
claude-wt-multi-modal-modelsManual Test Plan
1. Slack Inbound — File Download + Content Scanning
/tmp/netclaw-sessions/)IContentScanner.ScanAsync()is invoked on the downloaded bytesDataContentin the chat history2. Slack Outbound — File Upload
FileOutput(e.g., via theattach_filetool or an LLM that produces file output)files.uploadV23. Modality Gate — Real Model Behavior
qwen3:30b) and send a message with an image attachment[Images removed — the current model does not support vision input]4. TUI Rendering
FileOutputand verifyChatPagerenders the file path in cyanHeadlessChannelprints the file path to console/log5. SignalR Wire Format
SessionOutputMapper.ToDtocorrectly mapsFileOutputto type"file"withFilePath,FileName,MimeTypeDaemonClient.FromDtocorrectly reconstructsFileOutputfrom the DTOAutomated Coverage (already passing)
For reference, these areas are covered by the 20 new automated tests:
SerializableChatMessageandSendUserMessagewithMediaReferences(3 tests)ChatMessageConverter: DataContent write/read, full round-trip, missing file handling, empty content, MIME mapping (7 tests)AttachFileTool: valid path, path traversal, dotdot traversal, missing file, empty path, no session dir, display name (7 tests)