Skip to content

Add thread attachment operations with coordinated deletion - #44350

Merged
copyberry[bot] merged 1 commit into
mainfrom
copyberry/codex-internal-to-codex-oss/f0157538c7c5c2ee1362ce40eac157101c5d4505
Sep 10, 2026
Merged

copyberry[bot] merged 1 commit into
mainfrom
copyberry/codex-internal-to-codex-oss/f0157538c7c5c2ee1362ce40eac157101c5d4505

Conversation

@copyberry

@copyberry copyberry Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

Add thread attachment operations with coordinated deletion

Why

Attachment mutations must coordinate with thread deletion so queued requests cannot use metadata belonging to a deleted thread.

What changed

  • Add typed ThreadStore operations for idempotent attachment creation, paginated listing, and removal, with capability detection and unsupported defaults.
  • Implement attachment operations for SQLite-backed LocalThreadStore, including unloaded threads, and preserve invalid-request and missing-thread errors.
  • Coordinate attachment mutations with lifecycle locks and move SQLite cleanup into thread-store deletion. Remove state rows only after rollout deletion, preserving retries after cleanup failures.
  • Give the in-memory store ownership of its associated SQLite cleanup and remove duplicate cleanup from the app-server.

Testing

Add coverage for attachment pagination and idempotency, unsupported stores, error categories, lifecycle exclusion, mutations queued behind single and batch deletion, cleanup failure retries, and in-memory state cleanup. Extend the app-server descendant deletion test to verify SQLite rows are removed.

## Why

Attachment mutations must coordinate with thread deletion so queued requests cannot use metadata belonging to a deleted thread.

## What changed

- Add typed `ThreadStore` operations for idempotent attachment creation, paginated listing, and removal, with capability detection and unsupported defaults.
- Implement attachment operations for SQLite-backed `LocalThreadStore`, including unloaded threads, and preserve invalid-request and missing-thread errors.
- Coordinate attachment mutations with lifecycle locks and move SQLite cleanup into thread-store deletion. Remove state rows only after rollout deletion, preserving retries after cleanup failures.
- Give the in-memory store ownership of its associated SQLite cleanup and remove duplicate cleanup from the app-server.

## Testing

Add coverage for attachment pagination and idempotency, unsupported stores, error categories, lifecycle exclusion, mutations queued behind single and batch deletion, cleanup failure retries, and in-memory state cleanup. Extend the app-server descendant deletion test to verify SQLite rows are removed.

GitOrigin-RevId: f0157538c7c5c2ee1362ce40eac157101c5d4505
@copyberry
copyberry Bot force-pushed the copyberry/codex-internal-to-codex-oss/f0157538c7c5c2ee1362ce40eac157101c5d4505 branch from 8f68cd9 to 2df0b74 Compare September 10, 2026 00:30
@copyberry
copyberry Bot merged commit 2df0b74 into main Sep 10, 2026
@copyberry
copyberry Bot deleted the copyberry/codex-internal-to-codex-oss/f0157538c7c5c2ee1362ce40eac157101c5d4505 branch September 10, 2026 00:30
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 10, 2026

This branch was previously deployed

1 inactive deployment
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants