Parent epic: #732
Summary
Apply the trusted ownership context and constrained store boundary to the complete OpenAI Conversations lifecycle.
Covered Paths
- Conversation creation, retrieval, update, and deletion.
- Conversation-item creation, listing, retrieval, and deletion.
- Conversation use from a Responses request.
- Response append-back into a Conversation.
- Denormalized message-cache synchronization.
Requirements
- Bind each Conversation to the immutable owner active at creation.
- Authorize item operations through the parent Conversation boundary.
- Require the same owner for Conversation rehydration and append-back.
- Preserve the original owner during metadata updates and cache synchronization.
- Remove multi-tenant fallback to
DEFAULT_TENANT_ID from covered paths.
- Return equivalent not-found behavior for missing and unauthorized resources.
- Ensure pagination cannot expose items from an unauthorized parent.
- Keep client-controlled Conversation metadata separate from ownership and future policy attributes.
Acceptance Criteria
- Same-owner lifecycle and item operations succeed.
- Same-tenant cross-owner lifecycle, item, rehydration, and append-back operations fail.
- Cross-tenant operations fail even when issuer and subject match.
- Direct item retrieval cannot bypass parent ownership.
- Pagination runs only after the parent Conversation has been authorized.
- Metadata updates, append-back, and cache synchronization cannot change ownership.
- OpenAI SDK integration tests cover owner isolation for Conversations and items.
Non-Goals
- Independent ownership for Conversation items.
- PPE resource-policy decisions.
- Database migration.
Parent epic: #732
Summary
Apply the trusted ownership context and constrained store boundary to the complete OpenAI Conversations lifecycle.
Covered Paths
Requirements
DEFAULT_TENANT_IDfrom covered paths.Acceptance Criteria
Non-Goals