Do not repair the imageThe guard fails before bytes are read. File conversion and model changes cannot add a missing Cordis service declaration.
Route by the exact message.
Keep attachments as the lifetime gate and pass the declared outer context into the executor.
Select or declare a vision-capable model. This path is separate from service injection.
The one-line ownership repair.
attachments
→gateouter ctx
→tools + fsread bytes
→boundedattachment
durableTest execution, not visibility.
The tool appears and a real composition-registered call succeeds.
The image tool withdraws while text filesystem tools remain.
The tool returns and produces a digest-valid durable image block.
Six proof gates.
- 01The old call site fails with the reported injection error.
- 02The repaired call passes the declared outer context.
- 03Attachment availability still owns registration lifetime.
- 04The test invokes the registered tool, not the helper directly.
- 05Success survives durable attachment read and Session replay.
- 06Route, format, size, and missing-file errors stay distinct.
Primary evidence.
Make one image prove the whole lifecycle.
The canonical guide separates seven failure families, explains the scope mismatch, provides the source repair, adds the missing execution regression, and defines sixteen release gates.
Read the complete guide