Commit graph

3967 commits

Author SHA1 Message Date
Till JS
2b08e2f3a2 chore(mana): comic aus unified-App entfernen
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Comic-Surface ist nach Comicello (comicello.mana.how + comicello.com)
umgezogen. Comicello hat seit Phase ω-2 (2026-05-18) Feature-Parität
+ Cross-Module-Hooks via mana-share:
- Character-Variant-Render mit pinned-Variant-Anker
- Panel-Render via mana-image-edits
- Panel-Edit/Delete/Reorder
- POST /api/v1/share/receive für externe Apps (Journal/Notes/Calendar/
  Library/Writing können Text-Snippet rüberschicken, Story wird als
  Draft angelegt)
- /comics/new?text=…&sourceModule=… URL-Prefill als Alternative zum
  Server-Roundtrip

Gelöscht / abgebaut:
- Module: apps/mana/.../modules/comic + Routen + Locales
- Backend: apps/api/src/modules/comic, picture/routes
  verifyMediaOwnership-Allowlist auf nur `['me']` reduziert (comic-
  Tag war hier Identity-Anchor-Quelle für panel renders, jetzt
  Comicello-intern)
- shared-branding: APP_ICONS.comic + MANA_APPS comic-Entry
- shared-ai/tools/schemas: ganzer Comic-Block (list_comic_stories,
  create_comic_story, generate_comic_panel, list_comic_characters,
  create_comic_character, generate_character_variant,
  pin_character_variant)
- shared-ai/agents/templates: comic-author.ts + index.ts Eintrag
- mana-tool-registry: modules/comic.ts + types ModuleId 'comic' raus
- Cross-Module: website/embeds resolveComicStories +
  LocalComicStory-Import + 'comic.stories' EmbedSource + Inspector-
  Option; crypto-registry comicStories+comicCharacters; exposed-records
  comic-Eintrag
- picture/types: comicStoryId, comicPanelIndex, comicCharacterId
  Back-Ref-Felder (sowohl LocalImage als auch Image-Public-DTO);
  picture/queries to-Public-Mapping
- Registries: app-registry/apps.ts (Comic registerApp + FilmStrip-
  Icon + Header), categories, help-content, module-registry,
  data/tools/init
- i18n: comic in apps/{de,en,es,fr,it}.json

Was BLEIBT:
- cloudflared `comicello.mana.how` + `comicello-api.mana.how` —
  Standalone-Routes
- docker-compose mana-auth CORS_ORIGINS comicello.com + .mana.how —
  SSO für Standalone

Dexie v66:
- droppt comicStories + comicCharacters
- Upgrade-Callback strippt comicStoryId/comicPanelIndex/comicCharacterId
  aus existierenden Image-Rows (waren nie indiziert, nur Properties)

mana-web svelte-check 0/0 (7281 files), snapshot test 10/10.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:54:11 +02:00
Till JS
6c13308cf4 backup-cron: uload-postgres + comicello-postgres user-mapping (Nachzügler zu bbebb0490)
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
2026-05-18 15:40:46 +02:00
Till JS
bbebb04904 uload (υ-6 Live): cloudflared-Routes + mana-auth-CORS + Backup-Cron
Wurde während des υ-6-Cutovers nur live auf mana-server gepatcht, nicht
committed — letzter git pull hat die Edits überschrieben (live-Stack
lief weiter weil cloudflared in-Memory + mana-auth post-restart-State
noch korrekt war, aber bei nächstem Restart wäre alles weg).

- cloudflared-config.yml: uload.mana.how 5000→3108, uload-api.mana.how
  3070→3107, ulo.ad NEU auf 3107.
- docker-compose.macmini.yml: 3 uload-Origins (uload.mana.how,
  uload-api.mana.how, ulo.ad) in mana-auth CORS_ORIGINS.
- scripts/mac-mini/backup-databases.sh: uload-postgres → 'uload' +
  comicello-postgres → 'comicello' im db_user_for_container()-Case.

Memory + Playbook tracken Cutover-Details (project_uload_live.md).
2026-05-18 15:39:49 +02:00
Till JS
609f662538 chore(mana): news aus unified-App entfernen
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Reader-Surface ist nach Pageta (pageta.mana.how + pageta-api.mana.how)
umgezogen, das seit 2026-05-16 live ist und mehr Features bietet als
das alte managarten-news-Modul:
- Highlights (4 Farben, plain-text-offsets, Kontext)
- Reading-Progress + User-Note pro Artikel
- Bulk-Import (200 URLs/Job mit Worker)
- 5 MCP-Tools (save/list/archive/tag/highlight)
- Reading-Status-Enum (unread/reading/finished/archived) statt Boolean

Was Pageta NICHT hat: Categories mit Color+Icon — Pageta verwendet
freie String-Tags statt visuelle Folders. Bewusste Design-Entscheidung
in Pageta.

Daten-Migration: KEIN automatisches Skript. User mit gespeicherten
Artikeln im managarten-newsArticles müssen ihre Liste in Pageta neu
aufbauen (oder Bulk-Import via /api/v1/imports verwenden).

Gelöscht / abgebaut:
- Module: apps/mana/.../modules/news + Routen + Locales
- apps/articles/migrations/from-news.ts (one-off-Migration nach
  articles-Modul, Sentinel-gated, abgeschlossen) + Call in
  (app)/+layout.svelte
- apps/api/src/modules/news + MCP-Executor save_news_article
- shared-branding: APP_ICONS.news + MANA_APPS news-Entry
- shared-ai/tools/schemas save_news_article
- shared-types/spaces: 3 'news'-Einträge in Space-Modul-Listen
- Cross-Module: news-research/ListView + (app)/news-research/+page.svelte
  hatten den preferencesStore + usePreferences vom news-Modul für
  Custom-Feed-Pinning — Pin-UI entfernt (Custom-Feeds sind jetzt
  Pageta-Verantwortung)
- Dashboard: 'news-unread' Widget + NewsUnreadWidget-Import
- Registries: app-registry/apps.ts (News registerApp + Newspaper icon +
  Header), categories, help-content, module-registry, data/tools/init
- i18n: news in apps/{de,en,es,fr,it}.json

Was BLEIBT:
- `news-research` Modul + `apps/api/src/modules/news-research/` —
  RSS-Discovery + Search-Funktion bleibt im managarten als
  Recherche-Tool für andere Module
- `mana-news-pool` Plattform-Service (Code/mana/services/) — wird von
  news-research + Pageta-Standalone konsumiert
- shared-ai `research_news` Tool

Dexie v65 Migration:
- droppt newsArticles, newsCategories, newsPreferences, newsReactions,
  newsCachedFeed

mana-web svelte-check 0/0, snapshot test 10/10.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:05:25 +02:00
Till JS
fc616688e3 chore(mana): memoro aus unified-App entfernen
Memoro lebt als eigenständiger Stack:
- `memoro.mana.how` (Astro landing :3120)
- `memoro-app.mana.how` (SvelteKit Web SPA)
- `memoro-api.mana.how` (Bun/Hono server)
- `memoro-audio.mana.how` (audio-server)

Quelle: `Code/memoro/`, deployt nach `~/projects/memoro-deploy/` auf
Mac Mini. Phasenstand: Phase 2.5 (Cutover-Endphase), 2.5a/b durch.

Gelöscht / abgebaut:
- Module: apps/mana/.../modules/memoro + Routen + Locales
- Top-Level: apps/memoro/ (Server, Audio-Server, Landing, Mobile)
- docker-compose.macmini.yml memoro-server + memoro-audio-server
  Service-Blocks (alter Container im managarten-Compose, der echte
  Memoro läuft aus ~/projects/memoro-deploy/)
- .github/workflows/cd-macmini.yml memoro-server + memoro-audio-server
  Build-Jobs + Service-Liste + Health-Check-Mapping
- prometheus memoro-server scrape job + mana.how/memoro probe
- shared-branding APP_BRANDING.memoro + APP_ICONS.memoro + MANA_APPS
  Memoro-Entry + MemoroLogo + onboarding-template
- shared-utils analytics: memoro tracker + MemoroEvents-Block
- website-blocks EmbedSourceSchema 'memoro.memos' + Inspector-Option
- Cross-Module: website/embeds.ts resolveMemos + LocalMemo-Import,
  crypto-registry memos+memories + LocalMemo-Import, plaintext-
  allowlist memoSpaces+memoTags+memoroSpaces+spaceMembers,
  exposed-records memoro-Eintrag
- Registries: app-registry/apps.ts (Memoro registerApp + Microphone
  icon + Header), categories, help-content, module-registry,
  splitscreen, hooks.server, data/tools/init
- (app)/+layout.svelte startMemoroLlmWatcher/stopMemoroLlmWatcher
  imports + Calls
- package.json memoro:dev / dev:memoro:* Scripts
- cloudflared: irreführender Comment-Block in unified-app-Sektion
  bereinigt; Standalone-Memoro-Routes (memoro.mana.how,
  memoro-app.mana.how, memoro-api.mana.how, memoro-audio.mana.how)
  bleiben — sie zeigen auf den live Standalone-Stack
- i18n locales apps/{de,en,es,fr,it}.json memoro raus

Dexie v64 Migration:
- droppt memos, memories, memoTags, memoroSpaces, spaceMembers,
  memoSpaces

shared-theme/store.svelte.ts APP_THEME_CONFIGS.memoro bleibt erhalten —
das Package wird auch vom externen Memoro-Web-Repo konsumiert.

Test/Doku:
- module-registry.test.ts: memoro-Eintrag aus SYNC_APP_MAP + memoroSpaces
  aus TABLE_TO_SYNC_NAME entfernt

mana-web svelte-check 0/0, snapshot test 10/10.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:50:47 +02:00
Till JS
0490ec490e cloudflared(ingress): moodlit.mana.how + moodlit-api.mana.how Routing
Mein vorheriges live-Edit am 2026-05-18 12:01 hat den moodlit-Block
direkt auf dem mana-server eingefügt, aber nicht im Git committet.
Beim Comicello-Deploy um 14:14 wurde die Server-Datei dann aus
einem älteren Git-State regeneriert → moodlit-Block weg, alter
`moodlit.mana.how → :5000`-Unified-App-Stub wieder aktiv → live
zeigte fälschlich die Unified-App.

Jetzt im Repo verankert (nach Comicello-Block, vor catch-all):
- moodlit.mana.how → :3106 (web)
- moodlit-api.mana.how → :3105 (api)

Plus: alter Stub `moodlit.mana.how → :5000` im unified-Block entfernt
(war fälschlich noch in Z. 129 — ingress-Reihenfolge zählt, hätte
den neuen Block weiter unten überrannt).

Live verifiziert: HTML zeigt `data-theme=\"twilight\"`, gelieferter
0.*.css enthält @keyframes sunrise / sunset / sparkle (eigene
Brightness-Animationen statt gradient-shift-Fallback) und
requestFullscreen ist im ausgelieferten Chunk.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:40:54 +02:00
Till JS
9a6e51b7a3 chore(mana): plants + who aus unified-App entfernen
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Plants → Herbatrium (herbatrium.mana.how, LIVE seit 2026-05-17),
Who → eigenständiger Bun-Stack auf who.mana.how (außerhalb des
managarten-Repos, deployt nativ unter PM2 auf dem Mac Mini).

Gelöscht / abgebaut:
- Module: apps/mana/.../modules/{plants,who} + Routen + Locales +
  routes/api/v1/who Proxy
- Top-Level: apps/plants/
- Backend: apps/api/src/modules/{plants,who} + scripts/generate-who-
  dossiers.ts + RESOURCE_MODULES + app.route()-Mounts
- shared-branding: APP_BRANDING, APP_ICONS, MANA_APPS, PlantsLogo
- credits AI_PLANT_ANALYSIS, shared-utils analytics PlantsEvents,
  spiral-db MANA_APP_INDEX plants
- Cross-Module: PlantWateringWidget, time-blocks/types,
  seed-registry PLANTS_GUEST_SEED, crypto-registry plants +
  plaintext-allowlist plantPhotos/plantTags/wateringLogs/wateringSchedules
- Dashboard: 'plant-watering' Widget, requiredBackend 'plants',
  WIDGET_REGISTRY-Eintrag
- Registries: app-registry/apps.ts + categories + help-content +
  module-registry + splitscreen + hooks.server APP_SUBDOMAINS +
  quick-input registry + data/tools/init
- Infrastruktur: cloudflared plants.mana.how, docker-compose
  CORS_ORIGINS + MinIO plants-storage Bucket, prometheus probe,
  package.json plants:dev Scripts, i18n locales plants+who Strings
- who.mana.how / who-api.mana.how Standalone-Routes BLEIBEN
  (PM2-Container auf Mac Mini, eigenständige Auth/SQLite/LLM-Keys)

Dexie v62 (Nachholung) + v63 Migrations:
- v62: dropped meals, goals, foodFavorites, mealTags, wardrobeGarments,
  wardrobeOutfits + images-Schema-Index ohne wardrobe-FKs + Upgrade-
  Callback strippt wardrobeOutfitId/wardrobeGarmentId aus Image-Rows.
  (Migration war im vorherigen Commit nicht im File gelandet, jetzt
  nachgeholt.)
- v63: dropped plants, plantPhotos, wateringSchedules, wateringLogs,
  plantTags, whoGames, whoMessages.

Test/Doku:
- module-registry.test.ts Snapshot: plants-Eintrag entfernt,
  whoGames/whoMessages aus LEGACY_TABLES (werden jetzt gedroppt)

mana-web svelte-check 0/0, snapshot test 10/10, streaks 5/5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:25:45 +02:00
92f0b3ae06 comicello: cloudflared ingress + mana-auth CORS_ORIGINS (Phase ω-0 Live 2026-05-18) 2026-05-18 14:25:41 +02:00
Till JS
86269f1b7e pageta: pageta.com Co-Domain in cloudflared + mana-auth CORS
- cloudflared-config: zwei zusätzliche Ingress-Regeln pageta.com →
  :3100 + api.pageta.com → :3099 (zusätzlich zu pageta.mana.how —
  kein Primary-Switch).
- docker-compose.macmini mana-auth CORS_ORIGINS: lesen.mana.how-
  Reste durch pageta.mana.how + pageta-api.mana.how + pageta.com +
  api.pageta.com ersetzt. Der Rebrand vom Mittag hatte diese env
  übersehen — Memory project_pageta_live.md warnt explizit davor.

DNS-CNAMEs (pageta.com + api.pageta.com) sind via Cloudflare-API
angelegt (Zone ba85dec9..., proxied=true auf den mana-server-Tunnel).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:20:14 +02:00
Till JS
92195b83ec fix(backup): moodlit + herbatrium + wordeck Postgres-Container
3 Container fielen heimlich aus dem täglichen pg_dump-Backup raus:

1. moodlit-postgres, herbatrium-postgres — neu seit 2026-05-18 bzw.
   2026-05-17, fehlten im db_user_for_container-case (defaultete auf
   'postgres', der in diesen Containern nicht existiert).
2. wordeck-postgres — Cards-Rebrand 2026-05-17 hat den Container
   umbenannt, der case zeigte aber noch auf 'cards-postgres' → kein
   Match → default 'postgres' → role nicht da.

Zusätzlich: psql -U <user> versuchte ohne -d zur DB '<user>' zu
connecten (Default-Verhalten), das gibt's bei den Greenfield-Apps
nicht (DBs heißen mana_moodlit / mana_herbatrium / wordeck). Mit
expliziter `-d template1` (existiert in jeder Postgres-Instanz)
funktioniert die Liste-Datenbanken-Query universell.

Verifiziert per manuellem Run am 2026-05-18:
  OK: moodlit-postgres/mana_moodlit (1.0K)
  OK: wordeck-postgres/wordeck (575K)
  OK: herbatrium-postgres/mana_herbatrium (2.8K)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:13:09 +02:00
Till JS
0c15f73b58 backup-cron: lesen-postgres → pageta-postgres mapping
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Brand-Rebrand 2026-05-18 nachgezogen. lesen-postgres existiert nicht
mehr, pageta-postgres läuft mit User pageta in DB pageta. Ohne dieses
Mapping fällt der Container in den Default-Branch (User postgres) und
backup failt still.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 12:49:15 +02:00
Till JS
ae04c9e194 chore(mana): citycorners + food + wardrobe aus unified-App entfernen
Citycorners-Reste vom vorherigen Sprint mit committet. food → Nutriphi,
wardrobe → Werdrobe sind als Standalone-Apps live; die mana.how-unified-
App trägt die Modul-Surfaces nicht mehr.

Gelöscht / abgebaut:
- Module: apps/mana/.../modules/{food,wardrobe} + Routen + Locales
- Landing-Apps: apps/{food,citycorners}/ Top-Level
- Backend: apps/api/src/modules/{food,wardrobe} + MCP-Tools log_meal /
  nutrition_summary, picture-routes verifyMediaOwnership-Allowlist
- shared-branding: APP_BRANDING, APP_ICONS, MANA_APPS, Logos, Onboarding
- shared-ai, mana-tool-registry, credits, shared-types/spaces,
  shared-utils/analytics, spiral-db/MANA_APP_INDEX, website-blocks
- Cross-Module: Body-CalorieWeightChart, Comic-CharacterPicker-Wardrobe,
  website-Embed wardrobe.outfits, DaySnapshot.nutrition, FoodEventType,
  MealLogged/Meal*-Streaks/Goals/Companion/Trigger, AI-Agent-Policy,
  GoalEditor MealLogged, MyDay/RitualRunner/Rules nutrition-Refs,
  Crypto-Registry meals/wardrobeGarments/wardrobeOutfits
- Generic: PlaceCategory 'food' (places + geocoding + Locales),
  spaces.ts 'food'/'wardrobe' Modul-IDs
- Infrastruktur: cloudflared, docker-compose CORS, nginx-Landing,
  prometheus-Probe, load-tests, package.json dev-Scripts,
  generate-env, mac-mini/build-landings, dependabot

Dexie v62 Migration:
- droppt meals, goals, foodFavorites, mealTags, wardrobeGarments,
  wardrobeOutfits Tabellen
- entfernt wardrobeOutfitId / wardrobeGarmentId aus images-Index
- Upgrade-Callback strippt die toten FK-Properties aus alten image-Rows

Test/Doku:
- module-registry.test.ts: Snapshot refresht auf aktuellen Stand mit
  56 Modulen (vorher 32, statisch eingefroren pre-refactor). Plus
  LEGACY_TABLES-Exclusion für nicht-mehr-registrierte Tabellen aus
  cards/citycorners/moodlit/rituals/wishes/who.
- streaks.test.ts: MealLogged-Test in TaskCompleted-Test umgebaut
- apps/mana/CLAUDE.md: food-Refs in AI-Tool-Tabelle und
  AiProposalInbox-Liste entfernt
- validate-i18n-keys.mjs + validate-no-recursive-turbo.mjs:
  existsSync-Guard, damit die Skripte mit gestaged-aber-rm'ten Dateien
  klarkommen

mana-web svelte-check 0 errors / 7436 files, betroffene Tests grün
(streaks, dashboard, module-registry), validate:pg-schema,
validate:turbo, validate:i18n-parity grün.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 12:47:33 +02:00
Till JS
932bd98d84 cloudflared(ingress): rename lesen.* → pageta.*
Brand-Rebrand der Reader-Webapp. DNS-CNAMEs für pageta.mana.how +
pageta-api.mana.how sind über die Cloudflare-API angelegt (CNAME auf
1435166a-…cfargotunnel.com, proxied=true), aber dieser Reload sollte
ERST nach dem Container-Cutover passieren — sonst gibt der Tunnel
ein 404-Fenster, weil die alten lesen-Container kein pageta-Hostname-
Match haben.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 12:22:54 +02:00
Till JS
a7aed2ce72 feat(cloudflared): cardecky.mana.how → wordeck.com 301-Cutover
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
cardecky.mana.how routet jetzt zu mana-infra-landings:4400 (nginx
301-Redirect) statt direkt zu cards-web:5181. Damit greift der
landings.conf-Block, der auf wordeck.com weiterleitet — alte
Browser-Bookmarks und Deep-Links landen automatisch auf der neuen
Domain.

cardecky-api.mana.how bleibt direkt zu cards-api:3191 — cards-native
v0.9.4 (TestFlight) nutzt das als Backend. Universal-Links der alten
App (AASA `applinks:cardecky.mana.how`) brechen mit dem Cutover
bewusst — Wordeck-Native v1 wird stattdessen `applinks:wordeck.com`
deklarieren.

Smoke-Tests grün: cardecky.mana.how/d/<slug> → wordeck.com/d/<slug>.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:21:32 +02:00
Till JS
5c04b1d858 feat(nginx): cards.* + cardecky.* → wordeck.com 301-Redirect
Some checks are pending
CD Mac Mini / Deploy (push) Blocked by required conditions
CD Mac Mini / Detect Changes (push) Waiting to run
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Cards-zu-Wordeck-Cutover-Phase Ω-6: alte Legacy-Hostnames werden auf
die neue Domain umgeleitet.

- cards.mana.how + cardecky.mana.how → 301 → wordeck.com
- cards-api.mana.how + cardecky-api.mana.how → 301 → api.wordeck.com
- Tote cardecky.com Marketing-Landing entfernt (war nie deployed)

Hinweis: cloudflared routet cardecky.mana.how weiterhin direkt zur
cards-web — alte Native-App (Bundle ev.mana.cardecky) braucht das.
Der 301 hier greift erst, wenn cloudflared umgestellt wird.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 21:58:06 +02:00
Till JS
afee5fce9d feat(cloudflared): wordeck.com + api.wordeck.com Ingress
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Cards-zu-Wordeck-Rebrand: drei neue Hostnames ergänzt, alle auf
gleichem cards-web/cards-api Backend wie cardecky.mana.how.

- wordeck.com → :5181 (cards-web)
- www.wordeck.com → :5181
- api.wordeck.com → :3191 (cards-api)

Cloudflare-Tunnel-CNAMEs sind via API angelegt. cloudflared per
launchctl reloaded und smoke-tested. wordeck.com antwortet HTTP 200
mit Wordeck-Branding.

Siehe mana/docs/playbooks/WORDECK_REBRAND.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:56:00 +02:00
Till JS
feb49d9e3d cloudflared(ingress): rename manaspur → viadocu hostnames
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:11:57 +02:00
Till JS
501055a76c news-ingester: als DEPRECATED markiert (Cutover auf mana-news-pool)
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
CLAUDE.md umgeschrieben — Service-Beschreibung war seit dem
2026-05-17-Cutover irreführend (sprach von Container :3066, der
nicht mehr läuft, und 'unified mana-api liest aus derselben
Tabelle', wo jetzt HTTP-Proxy steht).

Klare Drop-Bedingungen für das ganze Verzeichnis dokumentiert:
- mana-news-pool 30 Tage stabil (~2026-06-17)
- altes news.curated_articles-Schema gedroppt
Bis dahin nicht anfassen — Source-Tree als Referenz für die
letzte managarten-eigene Source-Liste.
2026-05-17 18:17:38 +02:00
Till JS
5c47de8dd2 backup-databases: lesen-postgres + seepuls + manameme nachgezogen
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Memory `project_backup_cron_todo`: das Skript erkennt postgres-
Container automatisch via `*postgres*`-Pattern, hat aber für jeden
einen expliziten DB-User-Mapping in db_user_for_container().
Drei Container fehlten: seepuls-postgres, manameme-postgres,
lesen-postgres — wurden bisher mit Default-User `postgres`
versucht und schlugen still im Log fehl.

Stand der LIVE-Container am 2026-05-17:
  cards-postgres, chorportal-prod-postgres, lesen-postgres,
  mana-infra-postgres, manameme-postgres, manaspur-postgres,
  nutriphi-postgres, seepuls-postgres, zitare-postgres

Alle drei neuen User entsprechen dem App-Eigen-User-Pattern
(Container-Name ohne `-postgres`-Suffix = App = DB-User).
2026-05-17 17:04:16 +02:00
Till JS
6f9fb39556 mana-auth CORS_ORIGINS: lesen.mana.how + lesen-api.mana.how (plus werdrobe nachgezogen)
Memory `Adding an app to SSO` schreibt 3 Stellen:
1. PRODUCTION_TRUSTED_ORIGINS in sso-origins.ts (✓ Commit 4d94e07
   im mana-Repo)
2. CORS_ORIGINS in mana-auth-Compose (DAS hier)
3. sso-config.spec.ts laufen lassen (✓ 8/8 grün)

werdrobe.com + api.werdrobe.com waren auch nicht drin und
funktionierten anscheinend trotzdem — vermutlich weil
better-auth-trustedOrigins mit Cookie-Refresh nicht den vollen
CORS-Preflight-Pfad geht. Trotzdem aufgeräumt, damit der
sso-config-Test (sobald der mana-auth-Service-Definition in
mana/infrastructure/ wandert) ohne Surprise grün ist.

Sauberer langfristiger Fix: mana-auth-Service-Definition aus
managarten/docker-compose.macmini.yml nach mana/infrastructure/
heben, damit der sso-config.spec.ts auf die echte Quelle schaut.
2026-05-17 16:57:07 +02:00
Till JS
ad97c5362c managarten cutover: news-Modul liest jetzt aus mana-news-pool
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
apps/api/src/modules/news/routes.ts — ehemals Raw-SQL gegen
mana_platform.news.curated_articles, jetzt HTTP-Proxy auf
MANA_NEWS_POOL_URL/feed mit X-Service-Key. Identischer Query-
Param-Vertrag (topics/lang/since/limit/offset), kein Drizzle-
Schema-Coupling mehr für News.

docker-compose.macmini.yml — MANA_NEWS_POOL_URL=http://mana-news-pool:3079
in mana-api environment. News-Ingester-Kommentar-Section
aktualisiert (Container ist seit Lift-B abgeschaltet).

Damit ist der vollständige Cutover-Pfad aus
mana/services/mana-news-pool/CLAUDE.md durch:
  1. Plattform-Service deployed (gestern)
  2. managarten konsumiert ihn (jetzt)
  3. alter news-ingester:3066-Container schon weg

Type-check: news/routes.ts grün (2 pre-existing forms/-Errors
unrelated).
2026-05-17 16:34:12 +02:00
Till JS
17e5f80adf cloudflared: lesen.mana.how + lesen-api.mana.how ingress
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Lesen ist LIVE seit 2026-05-16 19:13 CEST. Tunnel-Reload + DNS-
Routes via 'cloudflared tunnel route dns mana-server' angelegt.
Externe Smokes grün: https://lesen.mana.how 200, /healthz ok,
manifest 200, /api/v1/feed gated (401), /api/v1/dsgvo/export mit
Service-Key 200.
2026-05-16 19:13:56 +02:00
Till JS
ad776c1a1c devlog: 107 Tage backfilled (2025-11-22 → 2026-05-15)
Some checks are pending
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Vollständige Bau-Geschichte des Monorepos in der Tages-Devlog-
Konvention (mana/docs/DEVLOG.md). Bodies sind heuristik-
generiert aus den Commit-Subjects pro Tag (Lead-Satz +
Highlights/Commit-Bullets, kein LLM-Pfad). Tage mit hand-
curate-Bedarf können nachträglich überarbeitet werden — der
Auto-Stub-Marker ist weg, die Bodies sind editierbar.

321 Files (data.json + spieler.md + macher.md pro Tag).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:24:29 +02:00
Till JS
21e8bcaa5f cloudflared: manameme + seepuls Ingress-Einträge
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
- manameme.mana.how → :3197, manameme-api.mana.how → :3196
  (Phase-8-Cutover 2026-05-15, DNS-Routes bereits live;
  Config-Block war noch uncommitted, jetzt explizit dokumentiert)
- seepuls.mana.how → :3096, seepuls-api.mana.how → :3095
  (Phase β-4 Deploy pending; DNS wird vorgemerkt, Tunnel liefert
  502 bis Container deployed ist. Aggregator-App, gilt
  mana/docs/AGGREGATOR_POLICY.md)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:15:24 +02:00
Till JS
a040e12f37 mana-llm compose: ANTHROPIC_API_KEY + OPENAI_API_KEY env-passthrough
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
mana-llm hat jetzt direkt-Provider für Anthropic und OpenAI; die
Keys werden aus .env.macmini durchgereicht. Default-Modelle als
optionale Overrides:
- ANTHROPIC_DEFAULT_MODEL (Default: claude-sonnet-4-5)
- OPENAI_DEFAULT_MODEL (Default: gpt-4o-mini)

Leer-Werte → Provider wird beim Init silent übersprungen, kein Fail.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 21:55:25 +02:00
Till JS
52bca1152c fix(deploy): drop bash-source of .env.macmini in migration-step
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Same fix as commit 97e285bc6 (backup-script): `. "$ENV_FILE"` breaks
on DOTENV values with unquoted whitespace — `MANA_AI_PUBLIC_KEY_PEM`
contains `-----BEGIN PUBLIC KEY-----…`, bash parses "PUBLIC" as the
next command and fails with `PUBLIC: command not found`.

Replaced the full bash-source with a targeted grep for the only env
var the migration step actually needs (POSTGRES_PASSWORD).

Quotes (single/double) around the value are stripped if present.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 21:32:44 +02:00
Till JS
670036d56d docs: BACKUP_STRATEGY.md — current local-only setup + off-site plan
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Dokumentiert:
- Was läuft (com.mana.backup-databases LaunchD, täglich 3 AM, ~45 GB)
- Was gebackupt wird (6 postgres-Container, 12 DBs)
- Was NICHT gebackupt wird (MinIO, Volumes-as-files, cloudflared-creds, ~/secrets/)
- Off-Site-Plan (R2/Hetzner/restic-Optionen, rclone-Skizze)
- Recovery-Drill (Quartals-Test mit pg_restore gegen Throwaway-Container)
- Pre-Live-Gate-Checkliste für Endurance-User-Daten

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 14:55:47 +02:00
Till JS
97e285bc67 backup: drop bash-source of .env.macmini (DOTENV format, breaks on PEM keys)
.env.macmini contains MANA_AI_PUBLIC_KEY_PEM=-----BEGIN PUBLIC KEY----- ...
which bash parses as 'PUBLIC: command not found' under set -e.

Plus drop set -e so a single failed container doesn't abort the rest.
Failures already collected in FAILED_DBS for the summary report.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 14:52:48 +02:00
Till JS
7f0e2ba10d backup: cover all postgres containers (cards, manaspur, nutriphi, zitare, chorportal)
Aktuell deckte das Skript nur mana-infra-postgres ab. Greenfield-Apps
(Cards seit 2026-05-08, Nutriphi seit 2026-05-08, Zitare seit 2026-05-08,
Manaspur seit 2026-05-13) haben eigene Container und waren komplett
NICHT gebackupt.

Plus: launchd-Job lief seit 2026-02-12 nicht — Pfad zeigte auf
mana-monorepo/, das nicht mehr existiert. plist-Update folgt separat.

Test-Run: bash backup-databases.sh sollte jetzt 6 Container × N DBs
dumpen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 14:51:25 +02:00
Till JS
b223247256 cloudflared: add manaspur.mana.how + manaspur-api.mana.how ingress
Some checks failed
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Docker Validate / Validate Dockerfiles (push) Has been cancelled
Docker Validate / Build calendar-web (push) Has been cancelled
Docker Validate / Build quotes-web (push) Has been cancelled
Docker Validate / Build todo-backend (push) Has been cancelled
Docker Validate / Build todo-web (push) Has been cancelled
Docker Validate / Build mana-auth (push) Has been cancelled
Docker Validate / Build mana-sync (push) Has been cancelled
Docker Validate / Build mana-media (push) Has been cancelled
Manaspur (GPS-Tracking) Phase 8 cutover 2026-05-13. Ports per
mana/docs/PORTS.md: 3193 api / 5183 web. Web container kommt mit
Phase 6 — Hostname ist DNS-only vorgemerkt, 502 bis dahin.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 14:38:31 +02:00
Till
cec84c2a9d chore(mana-llm): manawald.mana.how + localhost:3090 in CORS_ORIGINS
Runtime-Override für den mana-llm-Container, damit der manawald-Browser
direkt llm.mana.how/v1/chat/completions ohne CORS-Block trifft.
Default-Liste in mana/services/mana-llm/src/config.py separat ergänzt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:58:30 +02:00
Till JS
009a695345 fix(mana-web): add @simplewebauthn/browser as explicit dep
Vite/Rollup im Docker-Build resolved den Import nicht über transitive
shared-auth-Hoisting — anderes pnpm-Layout in der Container-Stage. Lokal
funktionierte es nur durch zufällige Hoisting-Reihenfolge.

`settings-client.ts` importiert `@simplewebauthn/browser` für Passkey-
Register. Daher explizite Dep im managarten-Web-Paket.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 17:25:39 +02:00
Till JS
dd2e4b6e9f fix(mana-auth): read PUBLIC_*_URL from window-injected vars, not $env/dynamic/public
Pre-deploy-Audit gefunden: meine neue session.svelte.ts + portal-redirect.ts
lasen PUBLIC_MANA_AUTH_URL/PUBLIC_AUTH_WEB_URL via $env/dynamic/public. In
Production ist das aber die Docker-interne URL `http://mana-auth:3001`,
die der Browser nicht erreichen kann — Folge wäre endlose Redirect-Loop
bei der ersten User-Session.

managarten hat das Pattern schon gelöst: hooks.server.ts injiziert
`window.__PUBLIC_*_URL__` aus den `_CLIENT`-suffixed env-Vars (Public-
Domain-Werte). `lib/data/scope/auth-fetch.authBaseUrl()` ist der
kanonische Helper dafür.

- session.svelte.ts: ruft jetzt `authBaseUrl()` aus auth-fetch.
- portal-redirect.ts: eigenes window/process-Lookup für PUBLIC_AUTH_WEB_URL,
  gleiches Pattern.
- hooks.server.ts: PUBLIC_AUTH_WEB_URL_CLIENT-Lesen + window-Injection.
- docker-compose.macmini.yml (mana-app-web): PUBLIC_AUTH_WEB_URL +
  PUBLIC_AUTH_WEB_URL_CLIENT env-Vars hinzugefügt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 17:05:28 +02:00
Till JS
b299a4acf1 feat(infra): route manawald.mana.how + add to mana-auth CORS
Cloudflared-Ingress für `manawald.mana.how` (port 3090 lokal) + dem
mana-auth-Container die Origin in `CORS_ORIGINS` ergänzen, damit SSO-
Cookie-Auth funktioniert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 17:00:15 +02:00
Till JS
5635598a58 feat(mana): migrate to central auth portal — no embedded login UI, clean cut
managarten redet jetzt nicht mehr direkt mit Better-Auth — Login,
Register, Passwort-Reset, 2FA-Verify, Magic-Link, Passkey-Login laufen
ALLE über `auth.mana.how` (mana-auth-web portal). managarten ist nur
noch Consumer einer existierenden Session.

## Architektur

- Unauthenticated: `redirectToPortal({ next })` macht hartes Redirect zu
  `auth.mana.how/login?app=mana&redirect=<callback>`. AuthGate
  (`(app)/+layout.svelte`) und `require-auth` triggern das.
- Nach Login: Portal setzt SSO-Cookie auf `.mana.how`. Browser landet
  auf `/auth/callback?next=<deep-link>`.
- Callback: `session.tryRefresh()` holt frischen JWT via Cookie,
  `loadUserFromToken()` setzt User, `goto(next)` renderet (app)-Layout
  mit unlocked Vault (Root-Layout-$effect feuert auf User-ID-Wechsel).

## Files

NEU:
- `lib/auth/portal-redirect.ts` — Helper für Portal-URL-Bau + hard redirect.
- `lib/auth/session.svelte.ts` — schlanke Session-Klasse: Token-Refresh
  via SSO-Cookie, ensureFresh, signOut. Storage: `mana.auth.accessToken`,
  `mana.auth.user`.
- `lib/auth/settings-client.ts` — Passkey-CRUD, 2FA-Setup, Sessions,
  Audit-Events. Pflegt keinen State, ruft direkt mana-auth API.

GELÖSCHT:
- `routes/(auth)/login|register|forgot-password|reset-password|+layout`
- `routes/auth/reset-password` (war Alias-Redirect)
- Komplette `(auth)` route group.

UMGESCHRIEBEN:
- `lib/stores/auth.svelte.ts` — re-exportiert `session` als `authStore`
  (keine 47-Methoden-Factory aus `@mana/shared-auth-ui` mehr).
- `routes/auth/callback/+page.svelte` — Token-Refresh + Deep-Link statt
  Legacy-Supabase-Stub.
- `lib/components/settings/sections/SecuritySection.svelte` — alle
  `authStore.registerPasskey/enableTwoFactor/...` Calls auf neuen
  `settings-client` umgelenkt. UI-Komponenten (PasskeyManager,
  TwoFactorSetup, …) aus `@mana/shared-auth-ui` bleiben — sind reine
  Render-Components.

ANGEPASST (Portal-Redirect statt `goto('/login')`):
- `(app)/+layout.svelte`, `RouteTierGate`, `email-verified`,
  `verification-failed`, `feedback/+layout`, `quotes/lists`,
  `quotes/favorites`, `citycorners/favorites`, `feedback/DetailView`,
  `feedback/ListView`, `profile/ListView`, `guest-prompt`,
  `require-auth.svelte.ts`.

ENV:
- `.env.development`: `MANA_AUTH_WEB_URL=http://localhost:3002`.
- `scripts/generate-env.mjs`: schreibt `PUBLIC_MANA_AUTH_URL` +
  `PUBLIC_AUTH_WEB_URL` ins `apps/mana/apps/web/.env`.

## Status

- `pnpm run check`: 0 errors, 0 warnings, 7672 files.
- `pnpm build` (8 GB heap): grün.
- E2E lokal + Production-Deploy stehen aus — Plan siehe
  `mana/docs/playbooks/MANAGARTEN_AUTH_PORTAL_MIGRATION.md`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 17:00:03 +02:00
Till JS
d3d9271426 feat(cloudflared): split auth.mana.how — /api/* → mana-auth, rest → mana-auth-web
Auth portal is now live: API calls (Better Auth endpoints) still hit
mana-auth (:3001) directly; all UI routes (login, register, reset,
verify-email) are served by the new mana-auth-web SvelteKit app on
host port 3042.

Also updates the duplicate-hostname validator to allow path-based split
routing rules for the same hostname.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 18:49:49 +02:00
Till JS
bf8353ea8a feat(stalwart): pin recovery admin via STALWART_RECOVERY_ADMIN env var
Adds STALWART_RECOVERY_ADMIN to the stalwart service environment so the
admin/ManaMailAdmin2026! credentials survive container restarts. Bootstrap
completed programmatically via JMAP; port 587 STARTTLS listener active.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 18:49:11 +02:00
Till JS
7b29dcc23c add design.mana.how tunnel entry → mana-design Storybook (port 3089)
Some checks failed
CD Mac Mini / Detect Changes (push) Has been cancelled
Mirror to Forgejo / Push to Forgejo (push) Has been cancelled
CI / Detect Changes (push) Has been cancelled
CI / Validate (push) Has been cancelled
CD Mac Mini / Deploy (push) Has been cancelled
CI / Build mana-search (push) Has been cancelled
CI / Build mana-sync (push) Has been cancelled
CI / Build mana-api-gateway (push) Has been cancelled
CI / Build mana-crawler (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 19:58:15 +02:00
Till JS
60f5c26507 docs(CLAUDE): correct shared-ui description (Svelte not RN)
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
@mana/shared-ui war fälschlich als "React Native UI components"
beschrieben — tatsächlich ist es eine Svelte-5-Web-Komponenten-
Bibliothek mit ~80 Komponenten (Pills, Modals, Toast, Quick-Input,
Skeletons, …).

Plus Heimat-Hinweis: seit 2026-05-09 lebt das Paket in
mana/packages/shared-ui und auf npm.mana.how. Die Kopie hier ist
eingefroren bis zum Rückbau dieses Repos. Bei Änderungen in mana/
zuerst, dann erst hierher kopieren.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:02:52 +02:00
Till JS
2eb70c62da mana-ev: vier Verein-Domains live, .ch kanonisch, andere als 301
Vier Cloudflare-Zonen für mana e.V. Schweizer Verein in Gründung:

- mana-ev.ch (apex)  → Astro-Landing (mana-landing :3088)
- www.mana-ev.ch     → 301 → mana-ev.ch
- mana-ev.{com,de,at} + jeweils www → 301 → mana-ev.ch

DNS via CF-API (32 Operationen): Default-A/AAAA-Records von
domainssaubillig auf Hetzner gelöscht (Apex, www, Wildcard pro Zone),
durch CNAME → 1435166a-...cfargotunnel.com ersetzt. Wildcard nicht
recreated — saubere Konfig, nur explizite Subdomains gehen.

Tunnel-Config (cloudflared-config.yml): 8 neue Hostnames mit
service-Rules. Nginx-Config (docker/nginx/landings.conf): ein
server-Block für 7 Redirect-Hostnames.

Aufgedeckte Pfad-Korruption: cloudflared-launchd-plist und
docker-compose-Volumes verweisen noch auf ~/projects/mana-monorepo/
statt managarten/. Mit Symlink (Tunnel) und Datei-Kopie (Nginx)
notdürftig geflickt — siehe OFFENE_PUNKTE.md für saubere Lösung.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 13:53:34 +02:00
Till JS
67963a4c0f chore(devlog): Schritte 1+2 der mana/docs/DEVLOG.md-Migration
Some checks failed
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Docker Validate / Validate Dockerfiles (push) Has been cancelled
Docker Validate / Build calendar-web (push) Has been cancelled
Docker Validate / Build quotes-web (push) Has been cancelled
Docker Validate / Build todo-backend (push) Has been cancelled
Docker Validate / Build todo-web (push) Has been cancelled
Docker Validate / Build mana-auth (push) Has been cancelled
Docker Validate / Build mana-sync (push) Has been cancelled
Docker Validate / Build mana-media (push) Has been cancelled
55 Session-Devlogs nach _legacy-sessions/ verschoben (git mv erhält
History) und Disclaimer-Header injected. Astro-Routen so angepasst
dass alle alten /devlog/<slug>-URLs erhalten bleiben — slug.replace
strippt das _legacy-sessions/-Prefix in [slug].astro/index.astro/
activity.astro. Build-Test verifiziert: 55 Posts in dist/devlog/, kein
nested _legacy-sessions/-Pfad.

Disclaimer-Box pro Datei:
> **Legacy-Format.** Dieser Eintrag stammt aus dem Session-basierten
> Devlog vor der Umstellung auf das Tages-Modell (Cutover 2026-05-09).
> Bestand bleibt erhalten und unverändert; neue Einträge folgen der
> Tages-Konvention mit spieler.md + macher.md pro 06–06-Bucket.
> Spec: mana/docs/DEVLOG.md.

Offene Cutover-Schritte (eigene Session, blocked auf Verdaccio-
Token-Setup für @mana/devlog-gen):
- Tages-Modell-Collection mit data.json + spieler.md + macher.md
  (eigenes Schema, parallel zur Legacy-Ansicht)
- @mana/devlog-gen via npm.mana.how integrieren (aktuell nur auf
  pkg.mana.how Lame-Duck publiziert)
- CI-Workflow .github/workflows/devlog.yml für pnpm devlog:today
2026-05-09 02:08:51 +02:00
Till JS
3581ae0f21 chore(macmini): Föderations-Backbone + verein.mana.how + Nutriphi/Cardecky einspielen
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Mac-Mini-Drift in Source-Control bringen — war seit 2026-05-08 live
auf dem Server, aber uncommitted (während des managarten-Renames via
stash gerettet).

Cloudflared-Tunnel:
- verein.mana.how → :3088 (Verein-Landing, live seit 2026-05-09)
- share.mana.how → :3072 (Föderations-Share-Service, Phase F)
- mcp.mana.how → :3069 (MCP-Gateway, exposing tool-registry)
- cardecky-api.mana.how → :3191 (Port-Korrektur, war fälschlich :3072)
- cardecky.mana.how → :5181 (Port-Korrektur, war :5180)
- nutriphi.mana.how → :3087, nutriphi-api.mana.how → :3086

docker-compose.macmini.yml:
- mana-auth CORS_ORIGINS: nutriphi.mana.how + nutriphi-api.mana.how
- Neuer Service mana-share (Build aus ../mana/services/mana-share,
  Föderations-Backbone Phase F, Port 3072, eigene DB-Tabellen in
  mana_platform)
- Neuer Service mana-mcp (Build aus ../mana/services/mana-mcp,
  MCP-Gateway, Port 3069)

Beide Services bauen aus dem mana-platform-Repo (../mana/services/...),
nicht aus managarten — managarten orchestriert nur via Compose.
2026-05-09 01:29:03 +02:00
Till JS
0aec1d43c0 fix(docs): astro starlight repo URL → Memo-2023/managarten
Vorbestehender Bug: zeigte auf nicht-existente Org `mana/`. Korrigiert
auf den tatsächlichen GitHub-Pfad. Edit-Link auf docs-Seite + GitHub-
Icon im Footer funktionieren jetzt.
2026-05-09 01:28:50 +02:00
Till JS
b1b9bbc269 chore: rename repo mana-monorepo → managarten
Some checks are pending
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Phase-3-Rename des ehemaligen Multi-App-Monorepos zum eigenständigen
Produkt-Repo. Verein heißt mana e.V., Plattform-Domain bleibt mana.how,
apps/mana/ bleibt unverändert — nur der Repo-Container kriegt den
neuen Namen "managarten" (Garten der mana-Apps).

Geändert:
- package.json#name + #description
- README.md (Titel + erster Absatz)
- TROUBLESHOOTING.md
- alle Mac-Mini-Skripte (Pfade ~/projects/mana-monorepo → ~/projects/managarten)
- COMPOSE_PROJECT_NAME-default in scripts/mac-mini/status.sh
- .github/workflows/cd-macmini.yml + mirror-to-forgejo.yml
- apps/docs (astro.config.mjs + content)
- .claude/settings.local.json (Bash-Permission-Pfade)
- alle docs/*.md Pfad-Referenzen
- launchd plists, .env.macmini.example, infrastructure/

Forgejo-Repo + GitHub-Repo bereits via API umbenannt. Lokales
Verzeichnis-Rename + Mac-Mini-Cutover folgen separat.
2026-05-09 01:16:02 +02:00
Till JS
ac15de280b chore(decommission): remove cards module from mana web app
Some checks are pending
Docker Validate / Build todo-web (push) Blocked by required conditions
Docker Validate / Build mana-auth (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Docker Validate / Build mana-media (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
CD Mac Mini / Detect Changes (push) Waiting to run
CD Mac Mini / Deploy (push) Blocked by required conditions
CI / Detect Changes (push) Waiting to run
CI / Validate (push) Waiting to run
CI / Build mana-search (push) Blocked by required conditions
CI / Build mana-sync (push) Blocked by required conditions
CI / Build mana-api-gateway (push) Blocked by required conditions
CI / Build mana-crawler (push) Blocked by required conditions
Docker Validate / Validate Dockerfiles (push) Waiting to run
Docker Validate / Build calendar-web (push) Blocked by required conditions
Docker Validate / Build quotes-web (push) Blocked by required conditions
Docker Validate / Build todo-backend (push) Blocked by required conditions
Cards-Modul war im unified mana-Frontend tief verzahnt. Cardecky
ist seit 2026-05-08 standalone auf cardecky.mana.how — Dual-Stack
ist nicht das Ziel. Entfernt:

  - apps/mana/apps/web/src/lib/modules/cards/ (UI + stores + queries
    + collections + module.config + tools + cloze + fsrs + render)
  - apps/mana/apps/web/src/routes/(app)/cards/ (alle Routes)
  - apps/mana/apps/web/src/lib/i18n/locales/cards/ (5 Locales)
  - apps/mana/apps/web/src/lib/search/providers/cards.ts
  - apps/mana/apps/web/src/lib/components/dashboard/widgets/
    CardsProgressWidget.svelte + 'cards-progress' WidgetType-Eintrag

Cross-Refs aufgeräumt:
  - app-registry/apps.ts: Cards-Icon-Import + registerApp-Block raus
  - shared-branding/mana-apps.ts: 'cards'-App-Eintrag raus
  - data/cross-app-queries.ts: useCardsProgress + Cards-Queries-Block
    raus (Konsument war nur das gelöschte Dashboard-Widget)
  - data/seed-registry.ts: CARDS_GUEST_SEED-Import + register-Aufruf
  - data/module-registry.ts: cardsModuleConfig-Import + Eintrag
  - data/privacy/exposed-records.ts: Cards-Block (cardDecks visibility)
  - data/tools/init.ts: cardsTools-Import + registerTools
  - modules/website/embeds.ts: 'cards.decks'-Source + resolveCardDecks
  - apps/mana/apps/web/package.json: @mana/cards-core dependency
  - pnpm-lock.yaml regeneriert
  - dashboard.test.ts: cards-progress-Assertion

Dexie-Tabellen `cardDecks`/`cardReviews`/`cards` (lokal pro User-IndexedDB)
und ggf. mana_platform.cards.* in der prod-DB werden NICHT in diesem
Commit gedroppt — bleibt offen als separater Migrations-Schritt, sobald
sicher ist dass kein anderer Pfad mehr darauf zugreift.

Type-check (svelte-check) 7669 files 0 errors.

Rollback: git checkout cards-decommission-base -- apps/mana/apps/web

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:36:33 +02:00
Till JS
dd1bab09d5 chore(decommission): remove packages/cards-core/
@mana/cards-core wurde nur von apps/cards + services/cards-server +
apps/mana/.../modules/cards genutzt — die ersten zwei sind weg, das
mana-Modul kommt im nächsten Commit.

Rollback: git checkout cards-decommission-base -- packages/cards-core/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:27:33 +02:00
Till JS
bc158cb0bc chore(decommission): remove services/cards-server/
Marketplace-Backend war an apps/cards gekoppelt — beides ist
jetzt im standalone-Repo git.mana.how/till/cards. Live auf
cardecky-api.mana.how (apps/api in cards-Repo).

Rollback: git checkout cards-decommission-base -- services/cards-server/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:27:33 +02:00
Till JS
9cd8717494 chore(decommission): remove apps/cards/
Cards-App ist seit 2026-05-08 ein eigenständiges Repo
git.mana.how/till/cards (Strategie-B-Greenfield, beschlossen
2026-05-08), live auf cardecky.mana.how + cardecky-api.mana.how.
Alte cards-web-Container wurden gestoppt + entfernt.

Rollback: git checkout cards-decommission-base -- apps/cards/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:27:24 +02:00
Till JS
ba254f5854 infra: commit git.mana.how cloudflared route + ignore secrets/.bak
Two long-uncommitted Mac Mini drifts cleaned up:

1. cloudflared-config.yml — git.mana.how → :3030 (Forgejo). The
   route has been live for weeks (HTTP 200), just never committed.
2. .gitignore — exclude secrets/ (private keys: mana-ai mission-grant
   RSA keypair lives there; must NEVER be committed) and *.bak-*
   files (operator backup workflow on the Mac Mini).

services/mana-auth/drizzle/ on the Mac Mini was Mac-Mini-side
generated state for the (now deleted) mana-monorepo mana-auth
service; cleanup fell out with the Phase 7 deletion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:03:52 +02:00
Till JS
f65330399f fix(stalwart): disable healthcheck — distroless image has no wget
Stalwart's official Docker image is distroless and has no wget, curl,
nc, ss, or netstat. The compose healthcheck (CMD wget ...) was failing
with "executable file not found" since 2026-05-05; container shows
status=unhealthy 24/7 even though Stalwart itself runs fine on
:25 / :587 / :465 / :993 / :8080.

Disable. Crash detection comes from docker's restart=always plus
mana-monitoring's external SMTP probe (blackbox-exporter), not from
inside the container.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:00:27 +02:00