managarten/apps
Till JS 73f294b298 feat(mana/web): encryption phase 6.1 — cards, presi, inventar, planta
Four more modules join the encrypted-at-rest path. Tables flipped:

  - cards.cards         front + back   (no `notes` column on LocalCard)
  - cards.cardDecks     name + description   (schema uses `name` not `title`)
  - presi.presiDecks    title + description
  - presi.slides        content   (LocalSlide has only the SlideContent
                                    object — no separate `notes`. The
                                    JSON-stringify in wrapValue handles
                                    nested-object content cleanly)
  - inventar.invItems   description   (only — `name` is in the schema
                                        index used by where()/sortBy
                                        queries, and `notes` is an array
                                        of {id, content, createdAt} that
                                        addNote/deleteNote splice in
                                        place; encrypting either would
                                        force per-mutation decrypt+
                                        re-encrypt of the whole array.
                                        Phase 7 concern.)
  - planta.plants       name + careNotes + temperature + soilType
                        (`name` is NOT indexed for plants — the schema
                        only indexes id/isActive/healthStatus, so it's
                        safe to encrypt unlike inventar/dreamSymbols)

Per-module mutations
  Each store now follows the established Phase 4/5 pattern:
    - createX: build LocalRecord, snapshot via toX() for the optimistic
      return, encryptRecord, then table.add
    - updateX: build diff, encryptRecord on the diff, then table.update
    - The Sprint 1 atomic-cascade deleteDeck (cards + presi) is unchanged
      because deletes only touch plaintext deletedAt/updatedAt fields.

  planta.update() reads the row back after the write to return a Plant
  to its caller; that read goes through decryptRecord because the
  raw row is now encrypted on disk.

Per-module queries
  useAllDecks / useDeck / useCardsByDeck (cards)
  useAllDecks / useDeck / useDeckSlides (presi)
  useAllItems (inventar)
  useAllPlants (planta)
  All filter on plaintext metadata first, then decryptRecords on the
  visible set.

cross-app-queries dashboard widgets
  - useRecentDecks (presi)  decrypts the title/description before the
    dashboard widget renders the deck name
  - useCardsProgress decrypts the deck name list — counts continue to
    work on plaintext fields

Skipped intentionally
  - tasks / calendar.events / habits — title is duplicated to the
    cross-module timeBlocks table. Encrypting only the task copy
    would still leak the title via the timeBlock. Needs a coordinated
    timeBlocks encryption pass (Phase 6.1.5).
  - picture.images / storage.files / music.songs — records are
    server-pushed (image generation, file uploads, library imports).
    Client-side encryptRecord can't help; needs the API service to
    encrypt before pushing, or a sync-time wrap step. Documented as
    a Phase 7 concern.
  - nutriphi.meals / uload.links / context.documents / questions /
    answers — write directly from views, no store. Need a store
    extraction first.

Verified: 20 test files, 262/262 tests passing. Pre-existing TS
errors in context/index.ts, picture/images.svelte.ts, planta/
quick-input-adapter.ts and questions/index.ts are unrelated parallel
refactor drift.

Phase 6.2 next: settings/security UI showing vault status, encrypted-
table list, manual rotate button.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 19:44:38 +02:00
..
api feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
calc/packages/shared chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
calendar chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
cards chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
chat chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
citycorners chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
contacts chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
context chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
docs chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
guides chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
inventar chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
mana feat(mana/web): encryption phase 6.1 — cards, presi, inventar, planta 2026-04-07 19:44:38 +02:00
manacore/apps/web/src/lib feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
manavoxel chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
matrix chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
memoro chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
moodlit feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
mukke feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
news chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
nutriphi chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
photos chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
picture chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
planta chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
presi chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
questions feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
skilltree chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
storage chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
times chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
todo chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
traces feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
uload chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
zitare/packages/content chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00