dorfteich/apps/api/prisma/migrations
Claude Fable 5 8ae010218e
Some checks failed
CD / Build and push images (push) Successful in 4m5s
CD / Deploy to Test (push) Successful in 9s
CI / Lint, typecheck, test (push) Failing after 4m21s
CI / Auth e2e pack (push) Has been skipped
CI / Import/export fidelity gate (push) Has been skipped
CI / Build container images (push) Has been skipped
CD / Smoke tests against Test (push) Successful in 1m22s
CD / Promote to Int (push) Successful in 11s
Obsidian vault import: endpoint, job orchestration, rollback (#117)
POST /ponds/:pondId/import/vault (pond-admin-gated; a vault import
creates a subtree, uploads files, and creates labels — administration,
not everyday editing) takes the ZIP plus a JSON options field
{parentPageId?, labelIds?, frontmatterMode}. The archive is parsed at
enqueue for fast 400s; the job (new kind import_vault, riding the
existing isImportKind worker routing) re-parses and runs the #116
transform, then: containers top-down → notes (asset placeholders →
uploaded pond files; non-images become page attachments) → tags to
labels (nested tags build a label hierarchy via LabelsService, so
locking and cache invalidation apply) plus the dialog labels.

All-or-nothing: any failure hard-deletes the created pages (children
first) and removes the stored files (quota restored), then surfaces as
import_vault_invalid_zip / import_vault_too_large / quota_exceeded /
conversion_failed — and makes the worker's retry policy safe.

Supporting changes:
- conversion_jobs gains a nullable options jsonb column; enqueue takes
  kind-specific options and a maxInputBytes override (the 25 MiB
  default protects the pandoc sidecar, which a vault never touches —
  vaults use the 64 MiB upload limit).
- insertPage accepts a pre-reserved slug (the batch reserves all slugs
  up front against pond ∪ batch).
- NEW: pages born with content seed their outgoing page_links rows
  (deriveContent now returns wikilinkSlugs) — imported pages would
  otherwise stay invisible to backlinks and the graph until their
  first collab save. Collab still rewrites the rows on every save, and
  the existing phantom resolution heals batch creation order.

import-vault.e2e.db.test.ts (4 tests, real worker drained): gating +
input rejection, the full fixture import (tree under a mount page,
collision suffixes, link rows incl. phantom, nested tag labels, extra
label everywhere, frontmatter stripped, image embedded + PDF attached),
complete quota rollback, and a clean re-import with fresh suffixes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 17:13:11 +02:00
..
20260704171456_init Add Prisma with PostgreSQL, automatic migrations, and /readyz 2026-07-04 19:16:44 +02:00
20260704224132_auth_models Add user, identity, session, and auth-support data model 2026-07-05 00:42:22 +02:00
20260705090100_ponds Ponds: data model, CRUD API, personal pond on verification (#21) 2026-07-05 11:08:16 +02:00
20260705185146_quotas Quota foundation: overrides, resolution, race-safe consumption (#22) 2026-07-05 20:55:59 +02:00
20260705200714_pages Add page CRUD and Yjs state persistence (#23) 2026-07-05 22:25:41 +02:00
20260708082627_attachments Add file storage service and image upload API (#27) 2026-07-08 10:35:03 +02:00
20260708101011_trash_and_jobs Add page trash: soft delete, restore, and purge job (#31) 2026-07-08 12:48:17 +02:00
20260709060328_collab_open_sessions Add Yjs update-log compaction job (#40) 2026-07-09 08:15:55 +02:00
20260709062007_page_versions Fix compaction test Bytes typing for strict typecheck (#40) 2026-07-09 08:23:55 +02:00
20260709062727_page_version_created_by Add version snapshots: automatic, named, thinning (#41) 2026-07-09 08:37:07 +02:00
20260709082418_labels Add hierarchical labels: model, CRUD API, and validation (#43) 2026-07-09 10:30:17 +02:00
20260709104519_page_links Add wikilink index, backlinks API, and phantom resolution (#47) 2026-07-09 12:54:10 +02:00
20260709111040_search_vector Add SearchProvider interface with PostgreSQL FTS (#49) 2026-07-09 13:25:05 +02:00
20260709115727_role_grants Add grant model and shared permission-resolution algorithm (#51) 2026-07-09 14:02:07 +02:00
20260709140000_owner_admin_grants Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
20260710035316_conversion_jobs Add conversion job queue and pandoc sidecar integration (#62) 2026-07-10 04:06:27 +02:00
20260710041215_import_pages_conversion Import .docx and .odt documents as new pages (#63) 2026-07-10 07:34:43 +02:00
20260710120000_data_export_expiry Add self-service GDPR data export (#68) 2026-07-10 13:01:51 +02:00
20260710130000_plugins Add plugin storage, install API, and directory watcher (#71) 2026-07-10 16:55:26 +02:00
20260711100000_setup_completed_backfill Add the first-run setup wizard API with env-backed secret store (#80) 2026-07-11 15:10:28 +02:00
20260711180000_audit_log_and_job_duration Add Site-Admin system panel with persistent audit trail (#86) 2026-07-11 20:03:05 +02:00
20260711220000_comments Add threaded page comments: data model, API, and comment policy (#91) 2026-07-11 21:42:29 +02:00
20260711230000_watches Add watches: follow pages and ponds with auto-watch preferences (#93) 2026-07-11 22:59:11 +02:00
20260712000000_notifications Notify watchers about page changes and comments, with an in-app center (#94) 2026-07-11 23:20:25 +02:00
20260712010000_digest_frequency Batch notifications into localized e-mail digests with unsubscribe (#95) 2026-07-11 23:37:26 +02:00
20260712020000_api_tokens Public REST API v1: personal access tokens, instance switch + per-pond opt-in (#104) 2026-07-12 11:17:03 +02:00
20260714000000_page_hierarchy Page hierarchy: parentId, create-under-parent, reparent (#106) 2026-07-14 09:57:47 +02:00
20260714120000_conversion_job_options Obsidian vault import: endpoint, job orchestration, rollback (#117) 2026-07-14 17:13:11 +02:00
migration_lock.toml Add Prisma with PostgreSQL, automatic migrations, and /readyz 2026-07-04 19:16:44 +02:00