[{"id":"studio-7c16bed8-2026-05-23","type":"studio","visibility":"public","date":"2026-05-23T10:28:21-04:00","title":"docs(mxp-app): add short URL redirect runbook to README","commit":{"sha":"7c16bed8","full_sha":"7c16bed8a34d63320179fdd2397949a6473cd461","message":"docs(mxp-app): add short URL redirect runbook to README","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/7c16bed8a34d63320179fdd2397949a6473cd461"},"tags":[],"docs_url":null,"body":"## docs(mxp-app): add short URL redirect runbook to README\n\nCommit `7c16bed8` by Ethan Steininger.\n\n### Changed Files\n\n- studio/mxp-app/README.md\\n\n> Auto-generated release note. Edit `public/releases.json` to add detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/studio-7c16bed8.mp4\" type=\"video/mp4\"></video>"},{"id":"api-5e44605a-2026-05-23","type":"api","visibility":"public","date":"2026-05-23T10:20:12-04:00","title":"fix(sync): replace wall-clock time limits with heartbeat-based stall detection","commit":{"sha":"5e44605a","full_sha":"5e44605ae887240ea460eea82d546c887fdeffb5","message":"fix(sync): replace wall-clock time limits with heartbeat-based stall detection","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/5e44605ae887240ea460eea82d546c887fdeffb5"},"tags":["bugfix"],"docs_url":null,"body":"## fix(sync): replace wall-clock time limits with heartbeat-based stall detection\n\nCommit `5e44605a` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-5e44605a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-10f2efcc-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T18:31:29-04:00","title":"fix(sync): prevent task queue buildup with dedup guard, expiry, and time limits","commit":{"sha":"10f2efcc","full_sha":"10f2efcc7f5c33115456ed16dddb96f15f440d21","message":"fix(sync): prevent task queue buildup with dedup guard, expiry, and time limits","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/10f2efcc7f5c33115456ed16dddb96f15f440d21"},"tags":["bugfix"],"docs_url":null,"body":"## fix(sync): prevent task queue buildup with dedup guard, expiry, and time limits\n\nCommit `10f2efcc` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/controllers.py\\- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-10f2efcc.mp4\" type=\"video/mp4\"></video>"},{"id":"api-ece8b98b-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T18:16:03-04:00","title":"feat(mvs+studio): standalone namespace mode, regression tests, payload bug fixes","commit":{"sha":"ece8b98b","full_sha":"ece8b98beac738f09144ff0cf2ea6f0f346a445c","message":"feat(mvs+studio): standalone namespace mode, regression tests, payload bug fixes","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/ece8b98beac738f09144ff0cf2ea6f0f346a445c"},"tags":["feature","namespace"],"docs_url":"https://docs.mixpeek.com/namespaces/overview","body":"## feat(mvs+studio): standalone namespace mode, regression tests, payload bug fixes\n\nCommit `ece8b98b` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/namespaces/controllers.py\\- server/mvs/shard/indexes/payload.py\\- server/shared/namespaces/models.py\\- server/tests/e2e/mvs/test_regression_precheck.py\\- studio/e2e/crud/auth.setup.ts\\- studio/src/features/namespaces/components/steps/BasicInfo.tsx\\- studio/src/features/namespaces/components/steps/Preview.tsx\\- studio/src/features/namespaces/components/steps/VectorConfig.tsx\\- studio/src/features/namespaces/components/steps/index.ts\\- studio/src/features/namespaces/hooks/useNamespaceWizardState.ts\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-ece8b98b.mp4\" type=\"video/mp4\"></video>"},{"id":"api-fb445a56-2026-05-22","type":"api","visibility":"internal","date":"2026-05-22T18:07:41-04:00","title":"fix(ci): move ENGINE_BASE ARG before first FROM for Docker multi-stage scope","commit":{"sha":"fb445a56","full_sha":"fb445a56b51a026a19d6f6aa1d32ac085c9b446b","message":"fix(ci): move ENGINE_BASE ARG before first FROM for Docker multi-stage scope","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/fb445a56b51a026a19d6f6aa1d32ac085c9b446b"},"tags":["bugfix","ci","engine","internal"],"docs_url":null,"body":"## fix(ci): move ENGINE_BASE ARG before first FROM for Docker multi-stage scope\n\nCommit `fb445a56` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/Dockerfile\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-fb445a56.mp4\" type=\"video/mp4\"></video>"},{"id":"api-20adc9c3-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T17:56:05-04:00","title":"chore(docs): update OpenAPI spec with dynamic max_samples_per_cluster","commit":{"sha":"20adc9c3","full_sha":"20adc9c38c5ce9af45ddcd00d1deb65036c47a6c","message":"chore(docs): update OpenAPI spec with dynamic max_samples_per_cluster","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/20adc9c38c5ce9af45ddcd00d1deb65036c47a6c"},"tags":["api"],"docs_url":null,"body":"## chore(docs): update OpenAPI spec with dynamic max_samples_per_cluster\n\nCommit `20adc9c3` by Ethan Steininger.\n\n### Changed Files\n\n- docs/api-reference/openapi.json\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-20adc9c3.mp4\" type=\"video/mp4\"></video>"},{"id":"api-04e754d1-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T14:36:07-07:00","title":"fix(sync): set tenant ContextVar in execute_storage_sync Celery task","commit":{"sha":"04e754d1","full_sha":"04e754d1cbe290302c5f93229004ecb19d796c63","message":"fix(sync): set tenant ContextVar in execute_storage_sync Celery task","author":"Sergey Borisov","url":"https://github.com/mixpeek/mixpeek/commit/04e754d1cbe290302c5f93229004ecb19d796c63"},"tags":["bugfix"],"docs_url":"https://docs.mixpeek.com/storage/overview","body":"## fix(sync): set tenant ContextVar in execute_storage_sync Celery task\n\nCommit `04e754d1` by Sergey Borisov.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-04e754d1.mp4\" type=\"video/mp4\"></video>"},{"id":"api-f8166d8a-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T15:39:30-04:00","title":"style: complete ruff auto-fix to match pre-commit (UP, I, TID rules)","commit":{"sha":"f8166d8a","full_sha":"f8166d8a11bb50ad090b32591e5ac350833c98dc","message":"style: complete ruff auto-fix to match pre-commit (UP, I, TID rules)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/f8166d8a11bb50ad090b32591e5ac350833c98dc"},"tags":[],"docs_url":null,"body":"## style: complete ruff auto-fix to match pre-commit (UP, I, TID rules)\n\nCommit `f8166d8a` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/agents/confirmations/models.py\\- server/api/agents/controllers.py\\- server/api/agents/models.py\\- server/api/agents/sandbox/dynamic_tools.py\\- server/api/agents/services.py\\- server/api/agents/sessions/models.py\\- server/api/alerts/controllers.py\\- server/api/alerts/models.py\\- server/api/alerts/services.py\\- server/api/analytics/buckets/controllers.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-f8166d8a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-fa57387d-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T15:32:39-04:00","title":"style: ruff import-sort and format entire server codebase","commit":{"sha":"fa57387d","full_sha":"fa57387d1b8ba8100b4352fe17fe8186e80fb1a7","message":"style: ruff import-sort and format entire server codebase","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/fa57387d1b8ba8100b4352fe17fe8186e80fb1a7"},"tags":[],"docs_url":null,"body":"## style: ruff import-sort and format entire server codebase\n\nCommit `fa57387d` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/agents/confirmations/models.py\\- server/api/agents/controllers.py\\- server/api/agents/models.py\\- server/api/agents/sandbox/dynamic_tools.py\\- server/api/agents/services.py\\- server/api/agents/sessions/models.py\\- server/api/alerts/controllers.py\\- server/api/alerts/models.py\\- server/api/alerts/services.py\\- server/api/analytics/buckets/controllers.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-fa57387d.mp4\" type=\"video/mp4\"></video>"},{"id":"api-b341b04c-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T13:52:59-04:00","title":"style: ruff-format 3 files after extractor refactor","commit":{"sha":"b341b04c","full_sha":"b341b04c8888ae856326a81dae9be779c76fdb73","message":"style: ruff-format 3 files after extractor refactor","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/b341b04c8888ae856326a81dae9be779c76fdb73"},"tags":[],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## style: ruff-format 3 files after extractor refactor\n\nCommit `b341b04c` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/collection/features/extractors/params.py\\- server/tests/e2e/production/test_semantic_drift_full.py\\- server/tests/integration/plugins/test_cross_collection_drift_detection.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-b341b04c.mp4\" type=\"video/mp4\"></video>"},{"id":"api-2ec8b564-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T13:48:53-04:00","title":"refactor(engine): remove 7 non-core extractors and 2 unused inference apps","commit":{"sha":"2ec8b564","full_sha":"2ec8b564e34c360b4e435809d598c9fb9b33027f","message":"refactor(engine): remove 7 non-core extractors and 2 unused inference apps","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/2ec8b564e34c360b4e435809d598c9fb9b33027f"},"tags":["engine"],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## refactor(engine): remove 7 non-core extractors and 2 unused inference apps\n\nCommit `2ec8b564` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/batches/flows.py\\- server/api/compute/monitoring/stalled_jobs.py\\- server/engine/extractors/audio_corpus_loader/__init__.py\\- server/engine/extractors/audio_corpus_loader/v1/__init__.py\\- server/engine/extractors/audio_corpus_loader/v1/definition.py\\- server/engine/extractors/audio_corpus_loader/v1/pipeline.py\\- server/engine/extractors/audio_fingerprint_extractor/v1/definition.py\\- server/engine/extractors/brand_corpus_loader/__init__.py\\- server/engine/extractors/brand_corpus_loader/v1/__init__.py\\- server/engine/extractors/brand_corpus_loader/v1/definition.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-2ec8b564.mp4\" type=\"video/mp4\"></video>"},{"id":"api-b156b26a-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T13:27:49-04:00","title":"style: ruff-format 2 files to unblock CI lint gate","commit":{"sha":"b156b26a","full_sha":"b156b26aa3a2fdeba18df6939aa60cbf09be24fe","message":"style: ruff-format 2 files to unblock CI lint gate","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/b156b26aa3a2fdeba18df6939aa60cbf09be24fe"},"tags":["ci","internal"],"docs_url":null,"body":"## style: ruff-format 2 files to unblock CI lint gate\n\nCommit `b156b26a` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/clusters/parquet_export.py\\- server/engine/jobs/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-b156b26a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-94a01144-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T09:45:09-07:00","title":"fix(iconik): next_url pagination + client/brand injection from collection hierar...","commit":{"sha":"94a01144","full_sha":"94a011449ded070e996b7c94cd5cdd5a751e8b6c","message":"fix(iconik): next_url pagination + client/brand injection from collection hierarchy (#132)","author":"sergeyborisov-tech","url":"https://github.com/mixpeek/mixpeek/commit/94a011449ded070e996b7c94cd5cdd5a751e8b6c"},"tags":["bugfix","collection"],"docs_url":"https://docs.mixpeek.com/processing/overview","body":"## fix(iconik): next_url pagination + client/brand injection from collection hierarchy (#132)\n\nCommit `94a01144` by sergeyborisov-tech.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/api/clusters/parquet_export.py\\- server/clients/providers/iconik/sync_provider.py\\- server/engine/jobs/services.py\\- server/engine/utils/ray_parquet.py\\- server/mvs/providers/qdrant_adapter.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-94a01144.mp4\" type=\"video/mp4\"></video>"},{"id":"api-e30adaf2-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T11:52:26-04:00","title":"fix(lint): resolve ruff E402 and format violations blocking deploy","commit":{"sha":"e30adaf2","full_sha":"e30adaf2d3b4dcb7c1bc0fb7f600f106de496e50","message":"fix(lint): resolve ruff E402 and format violations blocking deploy","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/e30adaf2d3b4dcb7c1bc0fb7f600f106de496e50"},"tags":["bugfix"],"docs_url":null,"body":"## fix(lint): resolve ruff E402 and format violations blocking deploy\n\nCommit `e30adaf2` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/batches/controllers.py\\- server/api/clusters/flows.py\\- server/api/compute/celery/configs.py\\- server/api/marketplace/controllers.py\\- server/api/namespaces/controllers.py\\- server/clients/providers/mongodb/sync_provider.py\\- server/configs/tenant_registry.py\\- server/engine/extractors/pipeline.py\\- server/engine/jobs/services.py\\- server/infra/gke/generate_rayservice.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-e30adaf2.mp4\" type=\"video/mp4\"></video>"},{"id":"api-7af05030-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T01:51:54-04:00","title":"fix(clusters): skip feature_uris validation for composite mode","commit":{"sha":"7af05030","full_sha":"7af05030c13054e8f11e1392ab605682a8ff481b","message":"fix(clusters): skip feature_uris validation for composite mode","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/7af05030c13054e8f11e1392ab605682a8ff481b"},"tags":["bugfix"],"docs_url":null,"body":"## fix(clusters): skip feature_uris validation for composite mode\n\nCommit `7af05030` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/clusters/flows.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-7af05030.mp4\" type=\"video/mp4\"></video>"},{"id":"api-2e04782e-2026-05-22","type":"api","visibility":"public","date":"2026-05-22T01:13:02-04:00","title":"fix(clusters): add id column to composite centroid parquet for member building","commit":{"sha":"2e04782e","full_sha":"2e04782e7e8c23187b1dc0d818501901a75bd3b8","message":"fix(clusters): add id column to composite centroid parquet for member building","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/2e04782e7e8c23187b1dc0d818501901a75bd3b8"},"tags":["bugfix"],"docs_url":null,"body":"## fix(clusters): add id column to composite centroid parquet for member building\n\nCommit `2e04782e` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/clusters/flows.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-2e04782e.mp4\" type=\"video/mp4\"></video>"},{"id":"api-24bf7b58-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T22:40:55-04:00","title":"feat(engine): split core/tenant images with per-customer layers","commit":{"sha":"24bf7b58","full_sha":"24bf7b58897b01037c3d1de5129676a0a8cf61f0","message":"feat(engine): split core/tenant images with per-customer layers","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/24bf7b58897b01037c3d1de5129676a0a8cf61f0"},"tags":["engine","feature"],"docs_url":null,"body":"## feat(engine): split core/tenant images with per-customer layers\n\nCommit `24bf7b58` by Ethan Steininger.\n\n### Changed Files\n\n- .github/workflows/server-deploy-engine.yml\\- .github/workflows/tenant-deploy.yml\\- server/cloudbuild-tenant.yaml\\- server/engine/Dockerfile\\- server/engine/Dockerfile.base-core\\- server/engine/Dockerfile.tenant\\- server/engine/build-base.sh\\- server/engine/extractors/loader.py\\- server/engine/extractors/registry.py\\- server/engine/extractors/tiers.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-24bf7b58.mp4\" type=\"video/mp4\"></video>"},{"id":"api-9f72fff4-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T22:28:13-04:00","title":"fix(cluster): skip member document check in composite mode","commit":{"sha":"9f72fff4","full_sha":"9f72fff4598f512253a5c6b50a86fadcee0e2af3","message":"fix(cluster): skip member document check in composite mode","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/9f72fff4598f512253a5c6b50a86fadcee0e2af3"},"tags":["bugfix"],"docs_url":null,"body":"## fix(cluster): skip member document check in composite mode\n\nCommit `9f72fff4` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/clusters/entrypoint.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-9f72fff4.mp4\" type=\"video/mp4\"></video>"},{"id":"api-e24b2419-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T19:59:01-04:00","title":"fix(cluster): persist centroid_vector to clustering_results for composite mode","commit":{"sha":"e24b2419","full_sha":"e24b241932e0ff71e112161555c96c874ee0eb20","message":"fix(cluster): persist centroid_vector to clustering_results for composite mode","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/e24b241932e0ff71e112161555c96c874ee0eb20"},"tags":["bugfix"],"docs_url":null,"body":"## fix(cluster): persist centroid_vector to clustering_results for composite mode\n\nCommit `e24b2419` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/configs/.platform-current-image\\- server/configs/.platform-previous-image\\- server/engine/clusters/entrypoint.py\\- server/requirements.txt\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-e24b2419.mp4\" type=\"video/mp4\"></video>"},{"id":"api-2a315ad0-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T19:53:45-04:00","title":"Merge branch fix/enterprise-tenant-isolation — dynamic task_routes + MongoDB fal...","commit":{"sha":"2a315ad0","full_sha":"2a315ad09662ef800ba20bdcb5cacb0921fadf52","message":"Merge branch fix/enterprise-tenant-isolation — dynamic task_routes + MongoDB fallback","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/2a315ad09662ef800ba20bdcb5cacb0921fadf52"},"tags":[],"docs_url":null,"body":"## Merge branch fix/enterprise-tenant-isolation — dynamic task_routes + MongoDB fallback\n\nCommit `2a315ad0` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- gtm/videos/36-google-killed-search/claims.csv\\- gtm/videos/36-google-killed-search/scenes.json\\- gtm/videos/36-google-killed-search/script.md\\- research/byo-cloud/billing.md\\- research/byo-cloud/migrate_s3.py\\- research/byo-cloud/migrate_tenant.py\\- research/byo-cloud/test_tenant_routing.py\\- server/LOCAL_DEV_SPEC.md\\- server/api/compute/celery/configs.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-2a315ad0.mp4\" type=\"video/mp4\"></video>"},{"id":"api-58dec4ff-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T19:34:48-04:00","title":"feat(cluster): add composite clustering mode for cross-execution centroid groupi...","commit":{"sha":"58dec4ff","full_sha":"58dec4ff2db152f7ec431b917d014ead26576991","message":"feat(cluster): add composite clustering mode for cross-execution centroid grouping","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/58dec4ff2db152f7ec431b917d014ead26576991"},"tags":["feature"],"docs_url":null,"body":"## feat(cluster): add composite clustering mode for cross-execution centroid grouping\n\nCommit `58dec4ff` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/clusters/controllers.py\\- server/api/clusters/flows.py\\- server/api/clusters/models.py\\- server/engine/clusters/entrypoint.py\\- server/scripts/test_composite_clustering.py\\- server/shared/clusters/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-58dec4ff.mp4\" type=\"video/mp4\"></video>"},{"id":"api-fa920cc2-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T17:22:40-04:00","title":"Merge branch fix/enterprise-tenant-isolation (PR #130)","commit":{"sha":"fa920cc2","full_sha":"fa920cc27b30858faafe84798d6217877d931e9b","message":"Merge branch fix/enterprise-tenant-isolation (PR #130)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/fa920cc27b30858faafe84798d6217877d931e9b"},"tags":[],"docs_url":null,"body":"## Merge branch fix/enterprise-tenant-isolation (PR #130)\n\nCommit `fa920cc2` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/clients/providers/mongodb/sync_provider.py\\- server/engine/inference/laion/clap_htsat_tiny/services.py\\- server/infra/gke/tenants/tubescience/extractor-overrides.yaml\\- server/infra/gke/tenants/tubescience/rayservice.yaml\\- server/shared/batches/celery_dispatch.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-fa920cc2.mp4\" type=\"video/mp4\"></video>"},{"id":"api-39be9def-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T17:15:48-04:00","title":"fix(tenant): Celery queue routing + SyncMongoDB tenant isolation","commit":{"sha":"39be9def","full_sha":"39be9def8b1ae6920048a7ca2918b1572c215baf","message":"fix(tenant): Celery queue routing + SyncMongoDB tenant isolation","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/39be9def8b1ae6920048a7ca2918b1572c215baf"},"tags":["bugfix"],"docs_url":null,"body":"## fix(tenant): Celery queue routing + SyncMongoDB tenant isolation\n\nCommit `39be9def` by Ethan Steininger.\n\n### Changed Files\n\n- server/clients/providers/mongodb/sync_provider.py\\- server/shared/batches/celery_dispatch.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-39be9def.mp4\" type=\"video/mp4\"></video>"},{"id":"api-de5a19f4-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T17:07:58-04:00","title":"feat(api): type batch metadata with BatchMetadata model","commit":{"sha":"de5a19f4","full_sha":"de5a19f4ae2171f5de65947093b7f1904c846f2f","message":"feat(api): type batch metadata with BatchMetadata model","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/de5a19f4ae2171f5de65947093b7f1904c846f2f"},"tags":["api","feature"],"docs_url":null,"body":"## feat(api): type batch metadata with BatchMetadata model\n\nCommit `de5a19f4` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/batches/controllers.py\\- server/api/buckets/batches/services.py\\- server/shared/batches/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-de5a19f4.mp4\" type=\"video/mp4\"></video>"},{"id":"api-890b265c-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T15:13:33-04:00","title":"fix(api): S3 tenant bucket routing + ClickHouse parameter binding","commit":{"sha":"890b265c","full_sha":"890b265cc7df3b57f6ca9e25d7ca23ccf0f08bf5","message":"fix(api): S3 tenant bucket routing + ClickHouse parameter binding","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/890b265cc7df3b57f6ca9e25d7ca23ccf0f08bf5"},"tags":["api","bugfix"],"docs_url":"https://docs.mixpeek.com/storage/overview","body":"## fix(api): S3 tenant bucket routing + ClickHouse parameter binding\n\nCommit `890b265c` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/api/compute/monitoring/retriever_latency.py\\- server/api/namespaces/tasks.py\\- server/clients/providers/s3/sync_provider.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-890b265c.mp4\" type=\"video/mp4\"></video>"},{"id":"api-629fd824-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T14:30:11-04:00","title":"revert: drop Sergey's personal settings.local.json additions","commit":{"sha":"629fd824","full_sha":"629fd824130dd9cd397b99d8bbf675a580f5c009","message":"revert: drop Sergey's personal settings.local.json additions","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/629fd824130dd9cd397b99d8bbf675a580f5c009"},"tags":[],"docs_url":null,"body":"## revert: drop Sergey's personal settings.local.json additions\n\nCommit `629fd824` by Ethan Steininger.\n\n### Changed Files\n\n- .claude/settings.local.json\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-629fd824.mp4\" type=\"video/mp4\"></video>"},{"id":"api-0cb88a56-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T14:16:21-04:00","title":"feat(namespaces): gate system namespaces behind include_system query param","commit":{"sha":"0cb88a56","full_sha":"0cb88a5698ba1a23217c9ab3a599f311dcca4502","message":"feat(namespaces): gate system namespaces behind include_system query param","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/0cb88a5698ba1a23217c9ab3a599f311dcca4502"},"tags":["feature","namespace"],"docs_url":"https://docs.mixpeek.com/namespaces/overview","body":"## feat(namespaces): gate system namespaces behind include_system query param\n\nCommit `0cb88a56` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/namespaces/controllers.py\\- server/api/namespaces/services.py\\- studio/src/features/dashboard/pages/Dashboard.tsx\\- studio/src/features/namespaces/hooks/useListNamespacesPost.ts\\- studio/src/features/namespaces/hooks/useNamespaces.ts\\- studio/src/shared/components/layout/AppSidebar.tsx\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-0cb88a56.mp4\" type=\"video/mp4\"></video>"},{"id":"api-fe3d16fe-2026-05-21","type":"api","visibility":"public","date":"2026-05-21T00:04:58-04:00","title":"feat(tenant): per-tenant Ray cluster + engine routing (Phase 3)","commit":{"sha":"fe3d16fe","full_sha":"fe3d16fefde078ad2a8057087d0b3b5e5290e641","message":"feat(tenant): per-tenant Ray cluster + engine routing (Phase 3)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/fe3d16fefde078ad2a8057087d0b3b5e5290e641"},"tags":["engine","feature"],"docs_url":null,"body":"## feat(tenant): per-tenant Ray cluster + engine routing (Phase 3)\n\nCommit `fe3d16fe` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/batches/controllers.py\\- server/configs/tenant_registry.py\\- server/infra/gke/tenants/tubescience/engine-head-service.yaml\\- server/infra/gke/tenants/tubescience/namespace.yaml\\- server/infra/gke/tenants/tubescience/rayservice.yaml\\- server/shared/retrievers/stages/filter/feature_search/preprocessing.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-fe3d16fe.mp4\" type=\"video/mp4\"></video>"},{"id":"api-9fc0157e-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T19:50:17-04:00","title":"feat(auth): add tenant registry for enterprise data plane routing (#124)","commit":{"sha":"9fc0157e","full_sha":"9fc0157e9274252a1d6b27a4b22d69f3f4de44bf","message":"feat(auth): add tenant registry for enterprise data plane routing (#124)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/9fc0157e9274252a1d6b27a4b22d69f3f4de44bf"},"tags":["feature"],"docs_url":null,"body":"## feat(auth): add tenant registry for enterprise data plane routing (#124)\n\nCommit `9fc0157e` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/authentications/services.py\\- server/clients/providers/mongodb/async_provider.py\\- server/configs/tenant_registry.py\\- server/tests/unit/api/authentications/test_authentications_services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-9fc0157e.mp4\" type=\"video/mp4\"></video>"},{"id":"api-8d69f251-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T15:50:21-04:00","title":"fix(retrievers): include inline filters in cache key","commit":{"sha":"8d69f251","full_sha":"8d69f2512221390b5bc94906337e5a5f01092c7d","message":"fix(retrievers): include inline filters in cache key","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/8d69f2512221390b5bc94906337e5a5f01092c7d"},"tags":["bugfix","retriever"],"docs_url":"https://docs.mixpeek.com/retrieval/overview","body":"## fix(retrievers): include inline filters in cache key\n\nCommit `8d69f251` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/retrievers/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-8d69f251.mp4\" type=\"video/mp4\"></video>"},{"id":"api-0605e444-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T14:21:15-04:00","title":"style(engine): fix ruff import ordering in distributed.py","commit":{"sha":"0605e444","full_sha":"0605e444a898b2ce36febe7d4f78e5bc019867ab","message":"style(engine): fix ruff import ordering in distributed.py","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/0605e444a898b2ce36febe7d4f78e5bc019867ab"},"tags":["engine"],"docs_url":null,"body":"## style(engine): fix ruff import ordering in distributed.py\n\nCommit `0605e444` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/pipelines/helpers/media/distributed.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-0605e444.mp4\" type=\"video/mp4\"></video>"},{"id":"api-3bd185a0-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T14:12:15-04:00","title":"style(sync): fix ruff-format on poll_storage_syncs any() comprehension","commit":{"sha":"3bd185a0","full_sha":"3bd185a051996f3fcc84749abbd349b309d56049","message":"style(sync): fix ruff-format on poll_storage_syncs any() comprehension","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/3bd185a051996f3fcc84749abbd349b309d56049"},"tags":[],"docs_url":"https://docs.mixpeek.com/storage/overview","body":"## style(sync): fix ruff-format on poll_storage_syncs any() comprehension\n\nCommit `3bd185a0` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-3bd185a0.mp4\" type=\"video/mp4\"></video>"},{"id":"api-0d764abf-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T13:47:09-04:00","title":"style(models): fix ruff-format on RetrieverExecutionRequest.filters","commit":{"sha":"0d764abf","full_sha":"0d764abf213efb15335603d1c576886376461edc","message":"style(models): fix ruff-format on RetrieverExecutionRequest.filters","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/0d764abf213efb15335603d1c576886376461edc"},"tags":["retriever"],"docs_url":"https://docs.mixpeek.com/retrieval/overview","body":"## style(models): fix ruff-format on RetrieverExecutionRequest.filters\n\nCommit `0d764abf` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/retrievers/pipelines/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-0d764abf.mp4\" type=\"video/mp4\"></video>"},{"id":"api-0022297a-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T13:33:13-04:00","title":"style(optimizer): fix ruff-format on _SAFE_PRE_FILTER_OPS","commit":{"sha":"0022297a","full_sha":"0022297abd46a3adf49d4589f91110945231cab5","message":"style(optimizer): fix ruff-format on _SAFE_PRE_FILTER_OPS","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/0022297abd46a3adf49d4589f91110945231cab5"},"tags":[],"docs_url":null,"body":"## style(optimizer): fix ruff-format on _SAFE_PRE_FILTER_OPS\n\nCommit `0022297a` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/retrievers/pipelines/optimizer/rules.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-0022297a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-ea076de7-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T13:12:30-04:00","title":"fix(retrievers): prevent unsafe filter operators from crashing Qdrant pre-filter...","commit":{"sha":"ea076de7","full_sha":"ea076de7942487b02be9802514252e138fce2cd7","message":"fix(retrievers): prevent unsafe filter operators from crashing Qdrant pre-filters","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/ea076de7942487b02be9802514252e138fce2cd7"},"tags":["bugfix","retriever"],"docs_url":"https://docs.mixpeek.com/retrieval/overview","body":"## fix(retrievers): prevent unsafe filter operators from crashing Qdrant pre-filters\n\nCommit `ea076de7` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/api/retrievers/services.py\\- server/shared/retrievers/pipelines/models.py\\- server/shared/retrievers/pipelines/optimizer/rules.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-ea076de7.mp4\" type=\"video/mp4\"></video>"},{"id":"api-5c29b3ea-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T10:32:19-04:00","title":"feat(sync): add DLQ visibility and bulk-mark-failed endpoint","commit":{"sha":"5c29b3ea","full_sha":"5c29b3eaac69bb3c0d1e8005a5918ee8fc8063d2","message":"feat(sync): add DLQ visibility and bulk-mark-failed endpoint","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/5c29b3eaac69bb3c0d1e8005a5918ee8fc8063d2"},"tags":["feature"],"docs_url":null,"body":"## feat(sync): add DLQ visibility and bulk-mark-failed endpoint\n\nCommit `5c29b3ea` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/controllers.py\\- server/api/buckets/syncs/dlq_handler.py\\- server/api/buckets/syncs/models.py\\- studio/src/features/buckets/components/SyncFailedObjects.tsx\\- studio/src/features/buckets/pages/BucketDetails.tsx\\- studio/src/features/settings/hooks/useSyncDLQ.ts\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-5c29b3ea.mp4\" type=\"video/mp4\"></video>"},{"id":"api-7cca66e6-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T09:38:24-04:00","title":"style(sync): fix ruff-format parentheses in poll_storage_syncs","commit":{"sha":"7cca66e6","full_sha":"7cca66e63f1f45f7b42748360df468fb6f5ce7b3","message":"style(sync): fix ruff-format parentheses in poll_storage_syncs","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/7cca66e63f1f45f7b42748360df468fb6f5ce7b3"},"tags":[],"docs_url":"https://docs.mixpeek.com/storage/overview","body":"## style(sync): fix ruff-format parentheses in poll_storage_syncs\n\nCommit `7cca66e6` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-7cca66e6.mp4\" type=\"video/mp4\"></video>"},{"id":"api-5b6dd3bf-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T09:14:50-04:00","title":"feat(sync): route multi-collection syncs through parallel dispatch","commit":{"sha":"5b6dd3bf","full_sha":"5b6dd3bfecdbea99cee3a4db097dafec4ed6aaad","message":"feat(sync): route multi-collection syncs through parallel dispatch","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/5b6dd3bfecdbea99cee3a4db097dafec4ed6aaad"},"tags":["collection","feature"],"docs_url":"https://docs.mixpeek.com/processing/overview","body":"## feat(sync): route multi-collection syncs through parallel dispatch\n\nCommit `5b6dd3bf` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-5b6dd3bf.mp4\" type=\"video/mp4\"></video>"},{"id":"api-af0f19ea-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T08:34:48-04:00","title":"style(server): fix ruff format in write_adapter.py asyncio.wait call","commit":{"sha":"af0f19ea","full_sha":"af0f19eabbf65fcdba5d1689d2a2525c5e6f5d27","message":"style(server): fix ruff format in write_adapter.py asyncio.wait call","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/af0f19eabbf65fcdba5d1689d2a2525c5e6f5d27"},"tags":["ci","internal"],"docs_url":null,"body":"## style(server): fix ruff format in write_adapter.py asyncio.wait call\n\nCommit `af0f19ea` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/vector_store/write_adapter.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-af0f19ea.mp4\" type=\"video/mp4\"></video>"},{"id":"api-e58bf6a6-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T08:31:16-04:00","title":"fix(retriever): add feature_search to pre-filter optimization targets","commit":{"sha":"e58bf6a6","full_sha":"e58bf6a624d554446e8ad45820c2705f493297fb","message":"fix(retriever): add feature_search to pre-filter optimization targets","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/e58bf6a624d554446e8ad45820c2705f493297fb"},"tags":["bugfix","retriever","search"],"docs_url":"https://docs.mixpeek.com/retrieval/overview","body":"## fix(retriever): add feature_search to pre-filter optimization targets\n\nCommit `e58bf6a6` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/retrievers/pipelines/optimizer/rules.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-e58bf6a6.mp4\" type=\"video/mp4\"></video>"},{"id":"api-068687ca-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T07:27:34-04:00","title":"fix(engine): default ALLOW_PARTIAL_VECTOR_COVERAGE to enabled","commit":{"sha":"068687ca","full_sha":"068687cae1674e98c53eb5d0cb59bd08fbeb6988","message":"fix(engine): default ALLOW_PARTIAL_VECTOR_COVERAGE to enabled","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/068687cae1674e98c53eb5d0cb59bd08fbeb6988"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): default ALLOW_PARTIAL_VECTOR_COVERAGE to enabled\n\nCommit `068687ca` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/collection/features/vectors/utils.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-068687ca.mp4\" type=\"video/mp4\"></video>"},{"id":"api-5907fccd-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T07:08:23-04:00","title":"fix(engine): allow partial vector coverage in batch jobs","commit":{"sha":"5907fccd","full_sha":"5907fccd68a18f96bece8be3c6f5886d3763a5c4","message":"fix(engine): allow partial vector coverage in batch jobs","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/5907fccd68a18f96bece8be3c6f5886d3763a5c4"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): allow partial vector coverage in batch jobs\n\nCommit `5907fccd` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/jobs/gke.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-5907fccd.mp4\" type=\"video/mp4\"></video>"},{"id":"api-dd74b3f5-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T06:57:37-04:00","title":"fix(batch): prevent infinite hang from MVS health monitor in drain","commit":{"sha":"dd74b3f5","full_sha":"dd74b3f5638a97340e960f51340fb822c4f3bdb4","message":"fix(batch): prevent infinite hang from MVS health monitor in drain","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/dd74b3f5638a97340e960f51340fb822c4f3bdb4"},"tags":["bugfix"],"docs_url":null,"body":"## fix(batch): prevent infinite hang from MVS health monitor in drain\n\nCommit `dd74b3f5` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/vector_store/write_adapter.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-dd74b3f5.mp4\" type=\"video/mp4\"></video>"},{"id":"api-96e51f57-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T06:15:10-04:00","title":"fix(storage+clusters): populate blob.details.size_bytes from sync data, skip vec...","commit":{"sha":"96e51f57","full_sha":"96e51f57e260414927de28df81a08d1f9097ff0c","message":"fix(storage+clusters): populate blob.details.size_bytes from sync data, skip vector-less cluster points","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/96e51f57e260414927de28df81a08d1f9097ff0c"},"tags":["bugfix"],"docs_url":"https://docs.mixpeek.com/storage/overview","body":"## fix(storage+clusters): populate blob.details.size_bytes from sync data, skip vector-less cluster points\n\nCommit `96e51f57` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/clusters/entrypoint.py\\- server/shared/buckets/objects/blobs/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-96e51f57.mp4\" type=\"video/mp4\"></video>"},{"id":"api-719effb1-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T04:05:07-04:00","title":"fix(engine): reduce batch actor CPU from 1 to 0.5 to prevent Ray Data deadlock","commit":{"sha":"719effb1","full_sha":"719effb100cec8413a2e8534edc04cbfea8a3a54","message":"fix(engine): reduce batch actor CPU from 1 to 0.5 to prevent Ray Data deadlock","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/719effb100cec8413a2e8534edc04cbfea8a3a54"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): reduce batch actor CPU from 1 to 0.5 to prevent Ray Data deadlock\n\nCommit `719effb1` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/pipelines/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-719effb1.mp4\" type=\"video/mp4\"></video>"},{"id":"api-94bf320a-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T01:11:33-04:00","title":"style(server): fix import ordering in configs.py (CI runs ruff from repo root)","commit":{"sha":"94bf320a","full_sha":"94bf320afc985e955b38e061d104f907dca488f3","message":"style(server): fix import ordering in configs.py (CI runs ruff from repo root)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/94bf320afc985e955b38e061d104f907dca488f3"},"tags":["ci","internal"],"docs_url":null,"body":"## style(server): fix import ordering in configs.py (CI runs ruff from repo root)\n\nCommit `94bf320a` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/compute/celery/configs.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-94bf320a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-1fa2701d-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T00:47:52-04:00","title":"style(server): fix import ordering in celery configs.py shutdown handler","commit":{"sha":"1fa2701d","full_sha":"1fa2701d6c4a36adc2947f0f0173fd3bab3e9d37","message":"style(server): fix import ordering in celery configs.py shutdown handler","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/1fa2701d6c4a36adc2947f0f0173fd3bab3e9d37"},"tags":[],"docs_url":null,"body":"## style(server): fix import ordering in celery configs.py shutdown handler\n\nCommit `1fa2701d` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/compute/celery/configs.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-1fa2701d.mp4\" type=\"video/mp4\"></video>"},{"id":"api-a2c587b6-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T00:35:54-04:00","title":"style(server): fix ruff formatting in celery configs.py","commit":{"sha":"a2c587b6","full_sha":"a2c587b63411eb3a6b8e61fbd6811e5a4bb3f55b","message":"style(server): fix ruff formatting in celery configs.py","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/a2c587b63411eb3a6b8e61fbd6811e5a4bb3f55b"},"tags":[],"docs_url":null,"body":"## style(server): fix ruff formatting in celery configs.py\n\nCommit `a2c587b6` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/compute/celery/configs.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-a2c587b6.mp4\" type=\"video/mp4\"></video>"},{"id":"api-eab2bc70-2026-05-20","type":"api","visibility":"public","date":"2026-05-20T00:11:06-04:00","title":"feat(resilience): rollout-safe sync + batch recovery","commit":{"sha":"eab2bc70","full_sha":"eab2bc70508122788b06f493b558e206e870a8e9","message":"feat(resilience): rollout-safe sync + batch recovery","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/eab2bc70508122788b06f493b558e206e870a8e9"},"tags":["feature"],"docs_url":null,"body":"## feat(resilience): rollout-safe sync + batch recovery\n\nCommit `eab2bc70` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/batches/controllers.py\\- server/api/buckets/syncs/locking.py\\- server/api/buckets/syncs/tasks.py\\- server/api/compute/celery/configs.py\\- server/clients/interfaces/bucket_syncs/client.py\\- server/engine/pollers/batch/tasks.py\\- server/infra/gke/resource-controller.py\\- server/shared/buckets/syncs/enums.py\\- server/shared/tasks/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-eab2bc70.mp4\" type=\"video/mp4\"></video>"},{"id":"api-5bed3420-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T23:25:51-04:00","title":"style(server): run ruff check --fix and ruff format across all server files","commit":{"sha":"5bed3420","full_sha":"5bed34203e93ac98c01166e0e7ede0b09f88b8fc","message":"style(server): run ruff check --fix and ruff format across all server files","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/5bed34203e93ac98c01166e0e7ede0b09f88b8fc"},"tags":[],"docs_url":null,"body":"## style(server): run ruff check --fix and ruff format across all server files\n\nCommit `5bed3420` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/clusters/executions/services.py\\- server/api/namespaces/snapshots/models.py\\- server/engine/pipelines/helpers/datasets/loaders.py\\- server/engine/pipelines/helpers/media/image.py\\- server/engine/pipelines/tasks.py\\- server/scripts/ops/repair_template_samples_vectors.py\\- server/shared/clusters/models.py\\- server/tests/unit/engine/extractors/test_weighted_allocation.py\\- server/tests/unit/engine/inference/openai/whisper_api/test_quota_degradation.py\\- server/tests/unit/engine/monitoring/performance/test_progress_actor.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-5bed3420.mp4\" type=\"video/mp4\"></video>"},{"id":"api-b3403254-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T23:01:52-04:00","title":"style(server): fix ruff import ordering and list comprehension formatting","commit":{"sha":"b3403254","full_sha":"b3403254c7343e0839e0ec9db2f794dbde27b18e","message":"style(server): fix ruff import ordering and list comprehension formatting","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/b3403254c7343e0839e0ec9db2f794dbde27b18e"},"tags":[],"docs_url":null,"body":"## style(server): fix ruff import ordering and list comprehension formatting\n\nCommit `b3403254` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/locking.py\\- server/engine/extractors/pipeline.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-b3403254.mp4\" type=\"video/mp4\"></video>"},{"id":"api-cb3a7da7-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T20:49:44-04:00","title":"fix(engine): add num_cpus=0.01 to all Ray Data .filter() calls to prevent CPU de...","commit":{"sha":"cb3a7da7","full_sha":"cb3a7da741275e4fbed937992144032e1b3e6ae1","message":"fix(engine): add num_cpus=0.01 to all Ray Data .filter() calls to prevent CPU deadlock","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/cb3a7da741275e4fbed937992144032e1b3e6ae1"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): add num_cpus=0.01 to all Ray Data .filter() calls to prevent CPU deadlock\n\nCommit `cb3a7da7` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/builder.py\\- server/engine/extractors/text_extractor/v1/pipeline.py\\- server/engine/pipelines/helpers/datasets/loaders.py\\- server/engine/pipelines/helpers/media/image.py\\- server/engine/pipelines/helpers/orchestration.py\\- server/engine/pipelines/helpers/pipeline_helpers.py\\- server/engine/pipelines/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-cb3a7da7.mp4\" type=\"video/mp4\"></video>"},{"id":"api-94758807-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T18:54:34-04:00","title":"fix(engine): remove stale MaterializeToParquet import and unused variable","commit":{"sha":"94758807","full_sha":"947588070577bfea7cd5f0d82f1d4c75c6f73cf3","message":"fix(engine): remove stale MaterializeToParquet import and unused variable","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/947588070577bfea7cd5f0d82f1d4c75c6f73cf3"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): remove stale MaterializeToParquet import and unused variable\n\nCommit `94758807` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/pipelines/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-94758807.mp4\" type=\"video/mp4\"></video>"},{"id":"api-095f3de9-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T18:49:25-04:00","title":"fix(engine): 9-fix pipeline audit from 1k TubeScience batch","commit":{"sha":"095f3de9","full_sha":"095f3de951f4961e240c0f854ea112c75410b38f","message":"fix(engine): 9-fix pipeline audit from 1k TubeScience batch","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/095f3de951f4961e240c0f854ea112c75410b38f"},"tags":["bugfix","ci","engine","internal"],"docs_url":null,"body":"## fix(engine): 9-fix pipeline audit from 1k TubeScience batch\n\nCommit `095f3de9` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/engine/databases/qdrant/datasink.py\\- server/engine/extractors/multimodal_extractor/v1/pipeline.py\\- server/engine/extractors/multimodal_extractor/v2/pipeline.py\\- server/engine/extractors/pipeline.py\\- server/engine/inference/openai/whisper_api/services.py\\- server/engine/monitoring/performance/utils.py\\- server/engine/pipelines/helpers/media/distributed.py\\- server/engine/pipelines/tasks.py\\- server/tests/unit/engine/extractors/test_weighted_allocation.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-095f3de9.mp4\" type=\"video/mp4\"></video>"},{"id":"api-7492e336-2026-05-19","type":"api","visibility":"internal","date":"2026-05-19T17:25:45-04:00","title":"fix(ci): apply ruff format to sync tasks and controllers","commit":{"sha":"7492e336","full_sha":"7492e3369bcde9e871c47f8da0232906998e9522","message":"fix(ci): apply ruff format to sync tasks and controllers","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/7492e3369bcde9e871c47f8da0232906998e9522"},"tags":["bugfix","ci","internal"],"docs_url":null,"body":"## fix(ci): apply ruff format to sync tasks and controllers\n\nCommit `7492e336` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/controllers.py\\- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-7492e336.mp4\" type=\"video/mp4\"></video>"},{"id":"api-0412ed82-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T16:11:42-04:00","title":"fix(sync): shard locks use upsert so parallel dispatch can acquire locks","commit":{"sha":"0412ed82","full_sha":"0412ed82fd57552204a487061402f82754190bbb","message":"fix(sync): shard locks use upsert so parallel dispatch can acquire locks","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/0412ed82fd57552204a487061402f82754190bbb"},"tags":["bugfix"],"docs_url":null,"body":"## fix(sync): shard locks use upsert so parallel dispatch can acquire locks\n\nCommit `0412ed82` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/locking.py\\- server/clients/interfaces/bucket_syncs/client.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-0412ed82.mp4\" type=\"video/mp4\"></video>"},{"id":"api-94523ce7-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T13:16:43-04:00","title":"feat(sync): concurrent object processing and provider-based fan-out","commit":{"sha":"94523ce7","full_sha":"94523ce78cc78fbf4488b9eb1dc52f2828f06d43","message":"feat(sync): concurrent object processing and provider-based fan-out","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/94523ce78cc78fbf4488b9eb1dc52f2828f06d43"},"tags":["feature"],"docs_url":null,"body":"## feat(sync): concurrent object processing and provider-based fan-out\n\nCommit `94523ce7` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/controllers.py\\- server/api/buckets/syncs/tasks.py\\- server/api/compute/celery/configs.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-94523ce7.mp4\" type=\"video/mp4\"></video>"},{"id":"api-66787255-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T12:58:50-04:00","title":"fix(engine): use cumulative failure rate in FailureAggregator to prevent false c...","commit":{"sha":"66787255","full_sha":"66787255358124a46444c9693bf9a18b95ad35a4","message":"fix(engine): use cumulative failure rate in FailureAggregator to prevent false crashes","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/66787255358124a46444c9693bf9a18b95ad35a4"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): use cumulative failure rate in FailureAggregator to prevent false crashes\n\nCommit `66787255` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/pipelines/helpers/error_tracking.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-66787255.mp4\" type=\"video/mp4\"></video>"},{"id":"api-d6ddaa20-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T12:27:34-04:00","title":"style: format billing webhook handlers with ruff","commit":{"sha":"d6ddaa20","full_sha":"d6ddaa20b9e2d16ddd212de2ef943ba14884da55","message":"style: format billing webhook handlers with ruff","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/d6ddaa20b9e2d16ddd212de2ef943ba14884da55"},"tags":["billing"],"docs_url":"https://docs.mixpeek.com/account/billing","body":"## style: format billing webhook handlers with ruff\n\nCommit `d6ddaa20` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/organizations/billing/webhooks/handlers.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-d6ddaa20.mp4\" type=\"video/mp4\"></video>"},{"id":"api-465d05ef-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T12:12:30-04:00","title":"feat: raise free tier to 10GB/5K credits and add self-serve credit purchases","commit":{"sha":"465d05ef","full_sha":"465d05efd5eb6c8a9c65a952684ceb1b0b9812a1","message":"feat: raise free tier to 10GB/5K credits and add self-serve credit purchases","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/465d05efd5eb6c8a9c65a952684ceb1b0b9812a1"},"tags":["feature"],"docs_url":"https://docs.mixpeek.com/account/billing","body":"## feat: raise free tier to 10GB/5K credits and add self-serve credit purchases\n\nCommit `465d05ef` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/organizations/billing/controllers.py\\- server/api/organizations/billing/models.py\\- server/api/organizations/billing/stripe_client.py\\- server/api/organizations/billing/webhooks/handlers.py\\- server/api/organizations/private/services.py\\- server/shared/billing/tiers.py\\- studio/src/features/billing/components/BuyCreditsModal.tsx\\- studio/src/features/billing/pages/BillingPage.tsx\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-465d05ef.mp4\" type=\"video/mp4\"></video>"},{"id":"api-0d6250c7-2026-05-19","type":"api","visibility":"internal","date":"2026-05-19T11:54:33-04:00","title":"fix(ci): update resilience guard to expect dual_write for engine deploy","commit":{"sha":"0d6250c7","full_sha":"0d6250c70e33c103f0988ad35c5b9825b18e3e6d","message":"fix(ci): update resilience guard to expect dual_write for engine deploy","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/0d6250c70e33c103f0988ad35c5b9825b18e3e6d"},"tags":["bugfix","ci","engine","internal"],"docs_url":null,"body":"## fix(ci): update resilience guard to expect dual_write for engine deploy\n\nCommit `0d6250c7` by Ethan Steininger.\n\n### Changed Files\n\n- server/scripts/ops/validate_platform_resilience_contracts.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-0d6250c7.mp4\" type=\"video/mp4\"></video>"},{"id":"api-c8eae290-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T10:08:40-04:00","title":"fix(engine): passthrough rows when FFmpeg produces no chunks instead of hard-fai...","commit":{"sha":"c8eae290","full_sha":"c8eae290d20a32a03f8f760b87fd5eec3d36b047","message":"fix(engine): passthrough rows when FFmpeg produces no chunks instead of hard-failing batch","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/c8eae290d20a32a03f8f760b87fd5eec3d36b047"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): passthrough rows when FFmpeg produces no chunks instead of hard-failing batch\n\nCommit `c8eae290` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/inference/ffmpeg/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-c8eae290.mp4\" type=\"video/mp4\"></video>"},{"id":"api-94ffd1b9-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T08:49:20-04:00","title":"fix(engine): scope ComputeProfile overrides to matching resource types","commit":{"sha":"94ffd1b9","full_sha":"94ffd1b9927beef474df66bec51a4a7daa7d5949","message":"fix(engine): scope ComputeProfile overrides to matching resource types","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/94ffd1b9927beef474df66bec51a4a7daa7d5949"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): scope ComputeProfile overrides to matching resource types\n\nCommit `94ffd1b9` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/pipeline.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-94ffd1b9.mp4\" type=\"video/mp4\"></video>"},{"id":"api-9c23779c-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T08:02:02-04:00","title":"fix(engine): remove extractor-level batch_size/actor_memory_gb that starved CPU ...","commit":{"sha":"9c23779c","full_sha":"9c23779ca967b11c1add01899c62e02ef3066fc8","message":"fix(engine): remove extractor-level batch_size/actor_memory_gb that starved CPU steps","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/9c23779ca967b11c1add01899c62e02ef3066fc8"},"tags":["bugfix","engine"],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## fix(engine): remove extractor-level batch_size/actor_memory_gb that starved CPU steps\n\nCommit `9c23779c` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v1/pipeline.py\\- server/engine/extractors/multimodal_extractor/v2/pipeline.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-9c23779c.mp4\" type=\"video/mp4\"></video>"},{"id":"api-96b2ad5d-2026-05-19","type":"api","visibility":"public","date":"2026-05-19T01:05:39-04:00","title":"perf(sync): fix KEDA scaling, add fan-out coordinator, increase heavy-sync concu...","commit":{"sha":"96b2ad5d","full_sha":"96b2ad5df6610d5eeec7683c9497fa16b4ae57d7","message":"perf(sync): fix KEDA scaling, add fan-out coordinator, increase heavy-sync concurrency","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/96b2ad5df6610d5eeec7683c9497fa16b4ae57d7"},"tags":["performance"],"docs_url":null,"body":"## perf(sync): fix KEDA scaling, add fan-out coordinator, increase heavy-sync concurrency\n\nCommit `96b2ad5d` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\- server/api/compute/celery/configs.py\\- server/api/compute/monitoring/sre_metrics_emitter.py\\- server/clients/providers/iconik/sync_provider.py\\- server/infra/gke/celery-deployment.yaml\\- server/shared/sre/metrics.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-96b2ad5d.mp4\" type=\"video/mp4\"></video>"},{"id":"api-001fb583-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T19:41:05-04:00","title":"style(snapshots): format tasks.py with ruff","commit":{"sha":"001fb583","full_sha":"001fb583fd26f29acda6f3f138252dce0357118a","message":"style(snapshots): format tasks.py with ruff","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/001fb583fd26f29acda6f3f138252dce0357118a"},"tags":[],"docs_url":null,"body":"## style(snapshots): format tasks.py with ruff\n\nCommit `001fb583` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/namespaces/snapshots/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-001fb583.mp4\" type=\"video/mp4\"></video>"},{"id":"api-ecf4a03b-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T19:28:50-04:00","title":"feat(snapshots): dump and restore vector points via MVS abstraction","commit":{"sha":"ecf4a03b","full_sha":"ecf4a03bc10bc9e2bada75b17cf3da7f7eb6552f","message":"feat(snapshots): dump and restore vector points via MVS abstraction","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/ecf4a03bc10bc9e2bada75b17cf3da7f7eb6552f"},"tags":["feature"],"docs_url":null,"body":"## feat(snapshots): dump and restore vector points via MVS abstraction\n\nCommit `ecf4a03b` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/namespaces/snapshots/tasks.py\\- server/scripts/e2e/snapshot_e2e_test.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-ecf4a03b.mp4\" type=\"video/mp4\"></video>"},{"id":"api-50c736be-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T17:15:55-04:00","title":"fix(snapshots): correct ResourceType import path","commit":{"sha":"50c736be","full_sha":"50c736be3b3ed7a1a006f9aa43d5e39e9d9c1b41","message":"fix(snapshots): correct ResourceType import path","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/50c736be3b3ed7a1a006f9aa43d5e39e9d9c1b41"},"tags":["bugfix"],"docs_url":null,"body":"## fix(snapshots): correct ResourceType import path\n\nCommit `50c736be` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/namespaces/snapshots/controllers.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-50c736be.mp4\" type=\"video/mp4\"></video>"},{"id":"api-72b73943-2026-05-18","type":"api","visibility":"internal","date":"2026-05-18T17:03:45-04:00","title":"fix(ci): add gemini_embedding_2 to required Ray Serve apps in staging E2E","commit":{"sha":"72b73943","full_sha":"72b73943df35b318d76e04bcc802395446dcf793","message":"fix(ci): add gemini_embedding_2 to required Ray Serve apps in staging E2E","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/72b73943df35b318d76e04bcc802395446dcf793"},"tags":["bugfix","ci","engine","internal","search"],"docs_url":"https://docs.mixpeek.com/retrieval/searchkit","body":"## fix(ci): add gemini_embedding_2 to required Ray Serve apps in staging E2E\n\nCommit `72b73943` by Ethan Steininger.\n\n### Changed Files\n\n- .github/workflows/server-gcp-smoke-test.yml\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-72b73943.mp4\" type=\"video/mp4\"></video>"},{"id":"api-15293490-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T15:56:22-04:00","title":"style(server): fix ruff lint — modern type hints and line length","commit":{"sha":"15293490","full_sha":"152934902522242b946ae721da5fc15b211a8dd0","message":"style(server): fix ruff lint — modern type hints and line length","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/152934902522242b946ae721da5fc15b211a8dd0"},"tags":[],"docs_url":null,"body":"## style(server): fix ruff lint — modern type hints and line length\n\nCommit `15293490` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/pipelines/__init__.py\\- server/shared/databases/utilities/queries/validators.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-15293490.mp4\" type=\"video/mp4\"></video>"},{"id":"api-36cc0b7b-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T15:34:25-04:00","title":"fix(server): correct import name and restore SLO constant in flows.py","commit":{"sha":"36cc0b7b","full_sha":"36cc0b7b53e66d7b25f2963e94eea5a5e4521ecd","message":"fix(server): correct import name and restore SLO constant in flows.py","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/36cc0b7b53e66d7b25f2963e94eea5a5e4521ecd"},"tags":["bugfix"],"docs_url":null,"body":"## fix(server): correct import name and restore SLO constant in flows.py\n\nCommit `36cc0b7b` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/databases/utilities/queries/validators.py\\- server/shared/retrievers/flows.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-36cc0b7b.mp4\" type=\"video/mp4\"></video>"},{"id":"api-b46ccf87-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T15:18:16-04:00","title":"fix(api): feature search filters silently dropped, add unindexed field warnings","commit":{"sha":"b46ccf87","full_sha":"b46ccf876ec708c48e46803c8d9f0ba7833f7440","message":"fix(api): feature search filters silently dropped, add unindexed field warnings","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/b46ccf876ec708c48e46803c8d9f0ba7833f7440"},"tags":["api","bugfix","search"],"docs_url":"https://docs.mixpeek.com/retrieval/overview","body":"## fix(api): feature search filters silently dropped, add unindexed field warnings\n\nCommit `b46ccf87` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/api/collection/features/search/controllers.py\\- server/api/retrievers/services.py\\- server/engine/pipelines/__init__.py\\- server/shared/databases/utilities/queries/validators.py\\- server/shared/retrievers/flows.py\\- server/shared/retrievers/pipelines/context.py\\- server/shared/retrievers/pipelines/executor.py\\- server/shared/retrievers/pipelines/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-b46ccf87.mp4\" type=\"video/mp4\"></video>"},{"id":"api-7cef16c0-2026-05-18","type":"api","visibility":"public","date":"2026-05-18T08:18:27-04:00","title":"fix(engine): correct frame numbers, Whisper hallucinations, and video descriptio...","commit":{"sha":"7cef16c0","full_sha":"7cef16c0c1ec1686fc3f91788c434554728bb166","message":"fix(engine): correct frame numbers, Whisper hallucinations, and video description output","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/7cef16c0c1ec1686fc3f91788c434554728bb166"},"tags":["bugfix","ci","engine","internal"],"docs_url":null,"body":"## fix(engine): correct frame numbers, Whisper hallucinations, and video description output\n\nCommit `7cef16c0` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v2/pipeline.py\\- server/engine/inference/ffmpeg/tasks.py\\- server/engine/inference/openai/whisper_api/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-7cef16c0.mp4\" type=\"video/mp4\"></video>"},{"id":"api-19ca0132-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T22:31:52-04:00","title":"perf(multimodal-extractor): tune v1/v2 pipeline for API-bound workloads","commit":{"sha":"19ca0132","full_sha":"19ca01320f707c0b4030f69d94022c72ee267a87","message":"perf(multimodal-extractor): tune v1/v2 pipeline for API-bound workloads","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/19ca01320f707c0b4030f69d94022c72ee267a87"},"tags":["api","performance"],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## perf(multimodal-extractor): tune v1/v2 pipeline for API-bound workloads\n\nCommit `19ca0132` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v1/pipeline.py\\- server/engine/extractors/multimodal_extractor/v2/pipeline.py\\- server/infra/hardware/config.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-19ca0132.mp4\" type=\"video/mp4\"></video>"},{"id":"api-7ff7e06e-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T21:43:27-04:00","title":"fix(engine): force Whisper API on CPU-only clusters, add extractor optimization ...","commit":{"sha":"7ff7e06e","full_sha":"7ff7e06eff733f8e425a3409955d6980c45670cb","message":"fix(engine): force Whisper API on CPU-only clusters, add extractor optimization guide","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/7ff7e06eff733f8e425a3409955d6980c45670cb"},"tags":["api","bugfix","engine"],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## fix(engine): force Whisper API on CPU-only clusters, add extractor optimization guide\n\nCommit `7ff7e06e` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/pipeline.py\\- server/infra/hardware/config.py\\- server/shared/collection/features/extractors/README.md\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-7ff7e06e.mp4\" type=\"video/mp4\"></video>"},{"id":"api-b7962608-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T18:23:05-04:00","title":"style: fix ruff format in E5TextEmbeddingAPIBatch","commit":{"sha":"b7962608","full_sha":"b7962608bee26bd61d98423eac660fb3cfc5a5d7","message":"style: fix ruff format in E5TextEmbeddingAPIBatch","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/b7962608bee26bd61d98423eac660fb3cfc5a5d7"},"tags":["api","search"],"docs_url":"https://docs.mixpeek.com/retrieval/searchkit","body":"## style: fix ruff format in E5TextEmbeddingAPIBatch\n\nCommit `b7962608` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/inference/intfloat/multilingual_e5_large_instruct/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-b7962608.mp4\" type=\"video/mp4\"></video>"},{"id":"api-8f769ce4-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T18:14:38-04:00","title":"perf(engine): fix worker scaling bug, route E5 to serve API, right-size CPU","commit":{"sha":"8f769ce4","full_sha":"8f769ce401bd6770647afe2de08f11c8e2823613","message":"perf(engine): fix worker scaling bug, route E5 to serve API, right-size CPU","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/8f769ce401bd6770647afe2de08f11c8e2823613"},"tags":["api","engine","performance"],"docs_url":null,"body":"## perf(engine): fix worker scaling bug, route E5 to serve API, right-size CPU\n\nCommit `8f769ce4` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v2/pipeline.py\\- server/engine/inference/intfloat/multilingual_e5_large_instruct/services.py\\- server/engine/jobs/gke.py\\- server/engine/jobs/services.py\\- server/infra/hardware/config.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-8f769ce4.mp4\" type=\"video/mp4\"></video>"},{"id":"api-61082b85-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T10:49:20-04:00","title":"style: fix ruff format in routes.py and rust_adapter.py","commit":{"sha":"61082b85","full_sha":"61082b85a221d7bdffe188108ab0b33946789c68","message":"style: fix ruff format in routes.py and rust_adapter.py","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/61082b85a221d7bdffe188108ab0b33946789c68"},"tags":[],"docs_url":null,"body":"## style: fix ruff format in routes.py and rust_adapter.py\n\nCommit `61082b85` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/inference/google/gemini_embedding/routes.py\\- server/mvs/shard/rust_adapter.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-61082b85.mp4\" type=\"video/mp4\"></video>"},{"id":"api-d4325a0c-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T09:58:07-04:00","title":"style: fix ruff format in health.py","commit":{"sha":"d4325a0c","full_sha":"d4325a0c380b74b1e7bb0d58f6304b21fc52cd33","message":"style: fix ruff format in health.py","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/d4325a0c380b74b1e7bb0d58f6304b21fc52cd33"},"tags":[],"docs_url":null,"body":"## style: fix ruff format in health.py\n\nCommit `d4325a0c` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/health.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-d4325a0c.mp4\" type=\"video/mp4\"></video>"},{"id":"api-8bba89f2-2026-05-17","type":"api","visibility":"public","date":"2026-05-17T09:33:27-04:00","title":"fix(engine): always use Whisper API, remove batch-size GPU switching","commit":{"sha":"8bba89f2","full_sha":"8bba89f2dec6af506941321fa0b5cc2cba9d79a1","message":"fix(engine): always use Whisper API, remove batch-size GPU switching","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/8bba89f2dec6af506941321fa0b5cc2cba9d79a1"},"tags":["api","bugfix","engine"],"docs_url":null,"body":"## fix(engine): always use Whisper API, remove batch-size GPU switching\n\nCommit `8bba89f2` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/jobs/controllers.py\\- server/engine/jobs/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-8bba89f2.mp4\" type=\"video/mp4\"></video>"},{"id":"api-3e89ccec-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T20:58:01-04:00","title":"fix(engine): upgrade Gemini model and prompt to reduce hallucinated descriptions","commit":{"sha":"3e89ccec","full_sha":"3e89ccece61578acc44acc9e2048b06171c5b28d","message":"fix(engine): upgrade Gemini model and prompt to reduce hallucinated descriptions","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/3e89ccece61578acc44acc9e2048b06171c5b28d"},"tags":["bugfix","ci","engine","internal"],"docs_url":null,"body":"## fix(engine): upgrade Gemini model and prompt to reduce hallucinated descriptions\n\nCommit `3e89ccec` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v2/definition.py\\- server/engine/extractors/multimodal_extractor/v2/pipeline.py\\- server/engine/inference/google/vertex/models.py\\- server/shared/clouds/google/vertex/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-3e89ccec.mp4\" type=\"video/mp4\"></video>"},{"id":"api-e1b63a7c-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T14:43:51-04:00","title":"feat(engine): use Whisper API for small batches (<500 objects)","commit":{"sha":"e1b63a7c","full_sha":"e1b63a7caf63453602bbf3a0d09ab4ebf43535f6","message":"feat(engine): use Whisper API for small batches (<500 objects)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/e1b63a7caf63453602bbf3a0d09ab4ebf43535f6"},"tags":["api","engine","feature"],"docs_url":null,"body":"## feat(engine): use Whisper API for small batches (<500 objects)\n\nCommit `e1b63a7c` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/jobs/controllers.py\\- server/engine/jobs/services.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-e1b63a7c.mp4\" type=\"video/mp4\"></video>"},{"id":"api-bd134ba6-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T09:03:40-04:00","title":"chore: fix lint and regenerate OpenAPI spec for dedup_strategy","commit":{"sha":"bd134ba6","full_sha":"bd134ba63b85918f80b27907e46553dd38a68381","message":"chore: fix lint and regenerate OpenAPI spec for dedup_strategy","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/bd134ba63b85918f80b27907e46553dd38a68381"},"tags":["api"],"docs_url":null,"body":"## chore: fix lint and regenerate OpenAPI spec for dedup_strategy\n\nCommit `bd134ba6` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/pipelines/tasks.py\\- server/openapi.json\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-bd134ba6.mp4\" type=\"video/mp4\"></video>"},{"id":"api-74644478-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T08:53:39-04:00","title":"feat(batches): add cross-batch dedup_strategy with audit trail","commit":{"sha":"74644478","full_sha":"746444785b034ca4370227cda4cca8967387c632","message":"feat(batches): add cross-batch dedup_strategy with audit trail","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/746444785b034ca4370227cda4cca8967387c632"},"tags":["feature"],"docs_url":null,"body":"## feat(batches): add cross-batch dedup_strategy with audit trail\n\nCommit `74644478` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/batches/controllers.py\\- server/api/buckets/batches/flows.py\\- server/api/buckets/batches/services.py\\- server/engine/pipelines/helpers/job_builder.py\\- server/engine/pipelines/models.py\\- server/engine/pipelines/tasks.py\\- server/shared/batches/artifacts/models.py\\- server/shared/batches/durability/processed_objects/services.py\\- server/shared/batches/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-74644478.mp4\" type=\"video/mp4\"></video>"},{"id":"api-a733661d-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T00:14:02-04:00","title":"fix(infra): isolate sync/eval tasks into dedicated heavy-sync queue","commit":{"sha":"a733661d","full_sha":"a733661d07de6a686aa265916d1e8189ba25a5b2","message":"fix(infra): isolate sync/eval tasks into dedicated heavy-sync queue","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/a733661d07de6a686aa265916d1e8189ba25a5b2"},"tags":["bugfix"],"docs_url":null,"body":"## fix(infra): isolate sync/eval tasks into dedicated heavy-sync queue\n\nCommit `a733661d` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/compute/celery/configs.py\\- server/api/compute/monitoring/sre_metrics_emitter.py\\- server/infra/gke/celery-deployment.yaml\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-a733661d.mp4\" type=\"video/mp4\"></video>"},{"id":"api-4bd6b24a-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T00:08:34-04:00","title":"fix(health): increase queue depth timeout to 5s and show error type on timeout","commit":{"sha":"4bd6b24a","full_sha":"4bd6b24a7c6f8417fdf27c6739fcda7680276ad9","message":"fix(health): increase queue depth timeout to 5s and show error type on timeout","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/4bd6b24a7c6f8417fdf27c6739fcda7680276ad9"},"tags":["bugfix"],"docs_url":null,"body":"## fix(health): increase queue depth timeout to 5s and show error type on timeout\n\nCommit `4bd6b24a` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/health.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-4bd6b24a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-f8317bc3-2026-05-16","type":"api","visibility":"public","date":"2026-05-16T00:04:06-04:00","title":"fix(sync): flush discovery progress every 100 files during sync runs","commit":{"sha":"f8317bc3","full_sha":"f8317bc3657da89c03e03a0cb5b69a8425be2afd","message":"fix(sync): flush discovery progress every 100 files during sync runs","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/f8317bc3657da89c03e03a0cb5b69a8425be2afd"},"tags":["bugfix"],"docs_url":null,"body":"## fix(sync): flush discovery progress every 100 files during sync runs\n\nCommit `f8317bc3` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/syncs/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-f8317bc3.mp4\" type=\"video/mp4\"></video>"},{"id":"api-4ad0145d-2026-05-15","type":"api","visibility":"public","date":"2026-05-15T13:35:44-04:00","title":"fix(engine): fallback to serve.status() when registry misses a deployment","commit":{"sha":"4ad0145d","full_sha":"4ad0145d951533a3af52e5eced776bf9d26dcfef","message":"fix(engine): fallback to serve.status() when registry misses a deployment","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/4ad0145d951533a3af52e5eced776bf9d26dcfef"},"tags":["bugfix","engine"],"docs_url":null,"body":"## fix(engine): fallback to serve.status() when registry misses a deployment\n\nCommit `4ad0145d` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/health.py\\- server/engine/inference/controllers.py\\- server/shared/utilities/registry.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-4ad0145d.mp4\" type=\"video/mp4\"></video>"},{"id":"api-fa90acdd-2026-05-15","type":"api","visibility":"public","date":"2026-05-15T12:24:47-04:00","title":"fix(engine): add GeminiEmbedding2 Ray Serve deployment for realtime search","commit":{"sha":"fa90acdd","full_sha":"fa90acdd7aa39478fbc24e08295c2ce1ac51c5f5","message":"fix(engine): add GeminiEmbedding2 Ray Serve deployment for realtime search","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/fa90acdd7aa39478fbc24e08295c2ce1ac51c5f5"},"tags":["bugfix","engine","search"],"docs_url":"https://docs.mixpeek.com/retrieval/searchkit","body":"## fix(engine): add GeminiEmbedding2 Ray Serve deployment for realtime search\n\nCommit `fa90acdd` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/inference/google/gemini_embedding/routes.py\\- server/engine/main.py\\- server/infra/gke/rayservice.yaml\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-fa90acdd.mp4\" type=\"video/mp4\"></video>"},{"id":"api-c7aa32e3-2026-05-15","type":"api","visibility":"public","date":"2026-05-15T10:52:57-04:00","title":"fix(engine): remove embedding variance check from datasink entirely","commit":{"sha":"c7aa32e3","full_sha":"c7aa32e325a4ef3b1bfa6d63bf1590e487e7112d","message":"fix(engine): remove embedding variance check from datasink entirely","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/c7aa32e325a4ef3b1bfa6d63bf1590e487e7112d"},"tags":["bugfix","engine","search"],"docs_url":"https://docs.mixpeek.com/retrieval/searchkit","body":"## fix(engine): remove embedding variance check from datasink entirely\n\nCommit `c7aa32e3` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/engine/databases/qdrant/datasink.py\\- server/engine/databases/qdrant/embedding_variance.py\\- server/tests/unit/engine/test_pipeline_validation_gates.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-c7aa32e3.mp4\" type=\"video/mp4\"></video>"},{"id":"api-a04bd743-2026-05-15","type":"api","visibility":"public","date":"2026-05-15T10:45:09-04:00","title":"fix(engine): downgrade embedding variance check from hard failure to warning","commit":{"sha":"a04bd743","full_sha":"a04bd743938e74901359d2a292ed7aad63007a34","message":"fix(engine): downgrade embedding variance check from hard failure to warning","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/a04bd743938e74901359d2a292ed7aad63007a34"},"tags":["bugfix","engine","search"],"docs_url":"https://docs.mixpeek.com/retrieval/searchkit","body":"## fix(engine): downgrade embedding variance check from hard failure to warning\n\nCommit `a04bd743` by Ethan Steininger.\n\n### Changed Files\n\n- FRUSTRATIONS.md\\- server/engine/databases/qdrant/datasink.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-a04bd743.mp4\" type=\"video/mp4\"></video>"},{"id":"api-9315f310-2026-05-15","type":"api","visibility":"public","date":"2026-05-15T10:37:16-04:00","title":"fix(mvs): drain fire-and-forget shadow writes in SyncVectorWriter","commit":{"sha":"9315f310","full_sha":"9315f3104042a7f1798c6721934c1892e116a918","message":"fix(mvs): drain fire-and-forget shadow writes in SyncVectorWriter","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/9315f3104042a7f1798c6721934c1892e116a918"},"tags":["bugfix"],"docs_url":null,"body":"## fix(mvs): drain fire-and-forget shadow writes in SyncVectorWriter\n\nCommit `9315f310` by Ethan Steininger.\n\n### Changed Files\n\n- server/shared/vector_store/write_adapter.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-9315f310.mp4\" type=\"video/mp4\"></video>"},{"id":"api-01a97a3c-2026-05-15","type":"api","visibility":"public","date":"2026-05-15T08:12:16-04:00","title":"fix(celery): increase visibility_timeout to 2h to prevent re-queuing storms (#12...","commit":{"sha":"01a97a3c","full_sha":"01a97a3cb93a8487d8a7abe34364865c6ef01225","message":"fix(celery): increase visibility_timeout to 2h to prevent re-queuing storms (#121)","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/01a97a3cb93a8487d8a7abe34364865c6ef01225"},"tags":["bugfix"],"docs_url":null,"body":"## fix(celery): increase visibility_timeout to 2h to prevent re-queuing storms (#121)\n\nCommit `01a97a3c` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/compute/celery/configs.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-01a97a3c.mp4\" type=\"video/mp4\"></video>"},{"id":"api-4ea7d8e5-2026-05-14","type":"api","visibility":"internal","date":"2026-05-14T20:33:48-04:00","title":"fix(ci): unblock deploy — remove quoted type annotation and update coverage base...","commit":{"sha":"4ea7d8e5","full_sha":"4ea7d8e5b837b3deaf1be34904c4debde6c7b70d","message":"fix(ci): unblock deploy — remove quoted type annotation and update coverage baselines","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/4ea7d8e5b837b3deaf1be34904c4debde6c7b70d"},"tags":["bugfix","ci","internal"],"docs_url":null,"body":"## fix(ci): unblock deploy — remove quoted type annotation and update coverage baselines\n\nCommit `4ea7d8e5` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/webhooks/iconik.py\\- server/scripts/coverage_tier_baseline.json\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-4ea7d8e5.mp4\" type=\"video/mp4\"></video>"},{"id":"api-ec93ad7a-2026-05-14","type":"api","visibility":"public","date":"2026-05-14T19:33:53-04:00","title":"feat(sync): ReconcileSettings, cascade document delete, webhook update propagati...","commit":{"sha":"ec93ad7a","full_sha":"ec93ad7a2463754e1ab12f5772fc71869fe173c6","message":"feat(sync): ReconcileSettings, cascade document delete, webhook update propagation, sync logs API","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/ec93ad7a2463754e1ab12f5772fc71869fe173c6"},"tags":["api","ci","feature","internal"],"docs_url":null,"body":"## feat(sync): ReconcileSettings, cascade document delete, webhook update propagation, sync logs API\n\nCommit `ec93ad7a` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/buckets/objects/services.py\\- server/api/buckets/syncs/controllers.py\\- server/api/buckets/syncs/models.py\\- server/api/buckets/syncs/tasks.py\\- server/api/buckets/webhooks/iconik.py\\- server/api/buckets/webhooks/mux.py\\- server/clients/interfaces/bucket_syncs/client.py\\- server/shared/buckets/syncs/models.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-ec93ad7a.mp4\" type=\"video/mp4\"></video>"},{"id":"api-5dc97283-2026-05-14","type":"api","visibility":"public","date":"2026-05-14T19:06:04-04:00","title":"style(server): fix remaining ruff lint and format issues","commit":{"sha":"5dc97283","full_sha":"5dc97283b45af6adf690a917d07242f00409ea27","message":"style(server): fix remaining ruff lint and format issues","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/5dc97283b45af6adf690a917d07242f00409ea27"},"tags":[],"docs_url":null,"body":"## style(server): fix remaining ruff lint and format issues\n\nCommit `5dc97283` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v1/definition.py\\- server/engine/extractors/multimodal_extractor/v2/definition.py\\- server/engine/inference/ffmpeg/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-5dc97283.mp4\" type=\"video/mp4\"></video>"},{"id":"api-ecbbf879-2026-05-14","type":"api","visibility":"public","date":"2026-05-14T18:54:55-04:00","title":"style(server): fix import sort in multimodal extractor v1 definition","commit":{"sha":"ecbbf879","full_sha":"ecbbf87978de2cc5c54aed159311d6d614f5644e","message":"style(server): fix import sort in multimodal extractor v1 definition","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/ecbbf87978de2cc5c54aed159311d6d614f5644e"},"tags":[],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## style(server): fix import sort in multimodal extractor v1 definition\n\nCommit `ecbbf879` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v1/definition.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-ecbbf879.mp4\" type=\"video/mp4\"></video>"},{"id":"api-548460b3-2026-05-14","type":"api","visibility":"public","date":"2026-05-14T18:50:22-04:00","title":"feat(engine): add start_frame/end_frame to multimodal extractor v2 output","commit":{"sha":"548460b3","full_sha":"548460b3a196e366aa5dfbc71586b16cce431508","message":"feat(engine): add start_frame/end_frame to multimodal extractor v2 output","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/548460b3a196e366aa5dfbc71586b16cce431508"},"tags":["engine","feature"],"docs_url":"https://docs.mixpeek.com/processing/feature-extractors","body":"## feat(engine): add start_frame/end_frame to multimodal extractor v2 output\n\nCommit `548460b3` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/extractors/multimodal_extractor/v2/definition.py\\- server/engine/inference/ffmpeg/tasks.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-548460b3.mp4\" type=\"video/mp4\"></video>"},{"id":"api-828871fb-2026-05-14","type":"api","visibility":"public","date":"2026-05-14T17:40:57-04:00","title":"chore(engine): touch engine file to trigger engine tests CI gate","commit":{"sha":"828871fb","full_sha":"828871fb3aa00e8c7fa7b5cd625570e5955afeb5","message":"chore(engine): touch engine file to trigger engine tests CI gate","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/828871fb3aa00e8c7fa7b5cd625570e5955afeb5"},"tags":["ci","engine","internal"],"docs_url":null,"body":"## chore(engine): touch engine file to trigger engine tests CI gate\n\nCommit `828871fb` by Ethan Steininger.\n\n### Changed Files\n\n- server/engine/clusters/quality.py\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-828871fb.mp4\" type=\"video/mp4\"></video>"},{"id":"api-d863399b-2026-05-14","type":"api","visibility":"public","date":"2026-05-14T16:53:26-04:00","title":"fix(resilience): pass resilience guard — headers, health, secrets","commit":{"sha":"d863399b","full_sha":"d863399b5aa41760043c8c528b698ce69dd012c9","message":"fix(resilience): pass resilience guard — headers, health, secrets","author":"Ethan Steininger","url":"https://github.com/mixpeek/mixpeek/commit/d863399b5aa41760043c8c528b698ce69dd012c9"},"tags":["bugfix"],"docs_url":null,"body":"## fix(resilience): pass resilience guard — headers, health, secrets\n\nCommit `d863399b` by Ethan Steininger.\n\n### Changed Files\n\n- server/api/health.py\\- server/scripts/customers/tubescience/test_iconik_comprehensive.py\\- server/scripts/customers/tubescience/test_iconik_sync_e2e.py\\- server/scripts/customers/tubescience/test_iconik_sync_features.py\\- studio/src/api/client.ts\\n\n> Auto-generated release note. Edit `studio/public/releases.json` to add more detail.\n\n\n<video controls autoplay muted loop playsinline width=\"100%\" style=\"border-radius:8px;border:1px solid #27272a;margin-top:12px\"><source src=\"https://d8ts56gtwtyh1.cloudfront.net/home/changelog/api-d863399b.mp4\" type=\"video/mp4\"></video>"}]