Rename podcasts -> podcast_runs and treat the run row as job state
only: delivered audio and its markdown live in the Artifact, so the
row drops storage_backend/storage_key/file_location and gains
artifact_id. mark_ready commits status and artifact_id atomically,
preserving the READY <-> artifact_id invariant that Zero publishes.
Public shares stream audio through the artifact content route and get
artifact_id + workspace_id injected at snapshot time; the authenticated
player and library read artifactId from Zero. Retire the legacy
authenticated stream route, the podcast storage helpers, and the REST
list endpoint.
Video now delivers into an Artifact like image and podcast. The run row
becomes a lifecycle record and the Remotion payload lives in the Artifact.
- run carries artifact_id; the tool returns artifact_id + workspace_id and
the frontend renders from the Artifact
- public shares serve video and slide audio through artifact-scoped routes
behind the snapshot allowlist, replacing the broken audio_file path
- purge_document_blobs collects slide audio storage keys so deleting a video
Artifact no longer orphans them
- backfill_video_artifacts.py converts legacy rows and repoints chat and
snapshot payloads (run before the slim migration)
- migrations: 179 adds artifact_id (expand); 180 renames the table to
video_presentation_runs, drops slides/scene_codes, adds error, and
publishes to Zero (contract). 180 aborts if any delivered run still lacks
an Artifact, so the backfill can't be skipped
- publish video_presentation_runs to Zero so in-flight and failed runs reach
the library by push; retire the legacy REST routes, schema, and poller
- Introduced a comprehensive specification for renaming `searchSpace` to `workspace` in `surfsense_web` and `surfsense_desktop`, ensuring all TypeScript identifiers, React props, and local data structures are updated.
- Implemented migration shims for persisted local state to prevent data loss during the transition.
- Updated observability metrics and IPC channels to reflect the new naming convention.
- Removed legacy `active-search-space` module and replaced it with `active-workspace` to maintain consistency.
- Ensured no behavioral changes or data loss for users during the renaming process.
- Added the ensure_publication function to create and verify the zero_publication if it is missing, ensuring idempotency during database initialization.
- Integrated ensure_publication into the create_db_and_tables function to prevent zero-cache crash loops on startup.
- Introduced a self-check script to validate the ensure_publication functionality on a create_all-bootstrapped database.
- Updated various components to reflect the transition from search space to workspace, including adjustments in imports and routing paths.
- Updated environment variables and - configurations for credit purchases via Stripe, replacing legacy page pack system.
- Introduced auto-reload feature for credit top-ups and modified database models to track credit transactions.
- Updated notification system to handle insufficient credits and auto-reload failures.
- Adjusted API routes and schemas to reflect changes in credit management.