URL source error contract — _resolve_extract_path in main.py returns 422 url_source_unsupported_here when a source.type='url' payload arrives, but that error code isn't documented in spec §5.3 and the message would render raw to a learner if the new chat client ever sends a URL through /api/extract instead of /api/extract-url. Either (a) route URL inline through the dispatcher (call into the same code that powers /api/extract-url), or (b) document the contract in spec §5.3 + translate the message in Plan B's chip footer.
URL source error contract —
_resolve_extract_pathinmain.pyreturns 422url_source_unsupported_herewhen asource.type='url'payload arrives, but that error code isn't documented in spec §5.3 and the message would render raw to a learner if the new chat client ever sends a URL through/api/extractinstead of/api/extract-url. Either (a) route URL inline through the dispatcher (call into the same code that powers/api/extract-url), or (b) document the contract in spec §5.3 + translate the message in Plan B's chip footer.