personal memory agent

feat(providers): classify marked cloud model 404s as missing model master

Stamp model-request provenance only around the OpenHands llm.responses / llm.completion transport invocations and their async equivalents. Those helpers are reached by built-in cloud generate and the validation probe; local and BYO endpoints route through local.py instead, so they never receive this marker. A generic 404 now becomes model_not_found only when the marker is present in the exception chain and some chain item reports status 404. Trusted provider SDK NotFound-shaped classes keep the identity path, constrained to litellm.exceptions, openai, and anthropic namespaces, so lookalike local classes remain unknown. The chain status check uses membership semantics so an SDK or OpenHands wrapper with its own non-404 status cannot erase an inner 404. run_cogitate deliberately remains unmarked because the model call happens inside Conversation / Agent.astep with no seam we own that separates it from tool execution. Cloud tool 404s therefore stay out of model_not_found unless they also carry trusted SDK NotFound identity. Validation note: full make ci on this reviewed tree reported two failures outside this diff: tests/test_observer_client_bundle.py::test_observer_client_bundle_old_fixture_tree_absence_and_residue_do_not_affect_outputs and solstone/apps/speakers/tests/test_routes.py::test_api_owner_bootstrap_full_loop_from_stubbed_labels. Both passed when run individually; attribution is under separate investigation, so this commit does not claim the full gate is green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>