Skip to content

Enforce ownership across the OpenAI Conversations lifecycle #1163

Description

@leseb

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions