Commit graph

4018 commits

Author SHA1 Message Date
Till JS
339afa6781 fix(build-app): drop --remove-orphans — it nuked 23 cross-app containers
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
build-app.sh ran `compose up -d --no-deps --remove-orphans <svc>` in the
shared manacore-monorepo project, so every mana-web rebuild deleted all
OTHER apps' containers (uload, comicello, moodlit, mana-stats, …) as
orphans — a 23-container outage on 2026-05-26. The per-service rm pass
already clears this service's own leftovers; --remove-orphans only added
the catastrophic cross-app deletion. Removed it; the benign 'Found orphan
containers' warning is the accepted trade-off until managarten leaves the
shared project.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:35:57 +02:00
Till JS
7455df03b2 fix(mac-mini): Watchdog env-sicher — start/restart statt rm+compose-up
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
Behebt den Blank-Secrets-Bug der vorigen Rewrites (d5c0c020d/2448a50cc):
deren label-getriebenes rm+compose-up hat für ${VAR}-Interpolations-Apps
(Secrets aus der Deploy-Shell, nicht env_file) LEERE Secrets einkompiliert,
weil der launchd-Watchdog diese Vars nicht hat. So wurde comicello-api am
2026-05-26 zerlegt (Postgres-PW + MANA_SERVICE_KEY leer → 28P01) — dieselbe
Falle wie mana-auth KEK 2026-04-08.

Sichere Architektur:
- Bestehende Container heilen NUR via `docker start` (stuck/exited) bzw.
  `docker restart` (crash-loop, Backoff) → behält die einkompilierte Env,
  kann nie Secrets leeren. Projektübergreifend (auch nicht-mana-*), via
  Restart-Policy-Gate (nur always/unless-stopped; watchtower etc. nie).
- Compose-recreate NUR für fehlende mana-core-Container — sicher, weil
  Core seine Env via env_file (+ co-located .env) im Compose-Dir trägt;
  zusätzlich --no-build (Watchdog baut nie ein Image → kein OOM-Crash).
- Komplett fehlende App-Container (${VAR}-Apps) werden NICHT auto-neu-
  erstellt (Blank-Secret-Risiko) — brauchen echten Re-Deploy.
- DRY_RUN side-effect-frei.

bash -n + DRY_RUN + Live-Lauf auf dem Server grün. Verifiziert: docker
compose/rm nur in der Core-Reconcile, App-Recovery nur start/restart.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:14:32 +02:00
Till JS
8318d7ba0f infra(cloudflared): add stats.mana.how ingress → localhost:3118
The mana-stats service (stats.mana.how + mana-ev.ch/zahlen source) had no
tunnel ingress rule in the committed config — root/healthz/api all 404'd
even though mana-stats is healthy on :3118. Add the rule before the 404
catch-all. DNS already points at the tunnel.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:13:12 +02:00
Till JS
2448a50cc5 fix(mac-mini): Watchdog-Reconciliation generisch über alle App-Stacks
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
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
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
Erweitert die mana-core-Reconciliation (vorheriger Commit) auf alle
Compose-Projekte — fehlende Dauerläufer werden projektübergreifend neu
erstellt (zitare/nutriphi/viadocu/comicello/…), nicht nur Core.

Sicherheits-Leitplanken:
- Projekt+Compose aus Labels der LAUFENDEN Container (Projekt ohne
  laufenden Container = bewusst unten → nicht anfassen).
- Mehrdeutige Projektnamen (gleicher Name, versch. Composes = bekannte
  Projekt-Kollision: manacore-monorepo/herbatrium/pageta/wordeck) → skip.
- Nur Dauerläufer (restart always/unless-stopped via `config --format
  json` + jq) → keine Job/Init/Profile-Services.
- ALLE compose-up nutzen --no-build: ein Watchdog darf NIE ein Image
  bauen (genau das kippte am 2026-05-26 die VM in den OOM-Crash).
- mana-core garantiert dabei via hardcodiertem Pfad.
- DRY_RUN jetzt side-effect-frei (track_restart persistiert nicht).
- Log-Messages ASCII-safe (× → -mal).

bash -n grün, DRY_RUN gegen die echte (driftige) Landschaft verifiziert:
mehrdeutige Projekte korrekt übersprungen, --no-build greift, comicello-api
(Postgres-Auth-Fehler) wird korrekt als manueller Fix geflaggt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 17:45:58 +02:00
Till JS
d5c0c020d2 fix(mac-mini): Watchdog label-getrieben + mana-core-Reconciliation
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
ensure-containers-running.sh heilte bisher nur ^mana-Container und nur
über die eine managarten-Compose — nach der Core-Isolation (mana-core in
mana-platform) und für eigenständige App-Stacks (nutriphi/viadocu/zitare)
griff das nicht. Beim VM-Crash 2026-05-26 kam dadurch weder das komplett
fehlende mana-auth (Core) noch viadocu/nutriphi (nicht-mana-*) zurück.

- Recovery jetzt LABEL-getrieben: jeder Container via seinem eigenen
  com.docker.compose.project/-config_files/-service → projektübergreifend.
- Restart-Policy-Gate: nur always/unless-stopped werden auto-gestartet;
  bewusst gestoppte (restart=no, z.B. watchtower) nie. Fixt nebenbei den
  minio-init-False-Positive (One-Shot, keine Dauerläufer-Policy).
- mana-core-Reconciliation: gleicht Core-Compose-Services gegen vorhandene
  Container ab und (re-)erstellt komplett fehlende gezielt (--no-deps).
  Respektiert das Wartungs-Lock /tmp/mana-colima-maintenance.
- DRY_RUN=1 zum gefahrlosen Testen. colima-Guard/Notifications/Loop-Guard
  unverändert. bash -n grün, DRY_RUN + Live-Lauf auf dem Server verifiziert.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 17:28:41 +02:00
Till JS
113e88e353 docs(mac-mini): document Verdaccio npm-auth via BuildKit secret for web builds
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
Covers the secret-mount mechanism added so sveltekit-base + web-app builds
authenticate to npm.mana.how for private @mana/* packages. Makes the
docker-compose.macmini.yml comment reference accurate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 16:18:01 +02:00
Till JS
5f5287d0e9 chore(umami): commit the 6 umami-removal edits left dirty after the earlier reset
These landing/legal/shared-utils edits are part of the umami decommission
(Umami → no-op / 'kein Web-Analytics', dated 2026-05-26) but were left
uncommitted in the working tree after the concurrent git-reset incident.
Pure rewording — no behaviour change, tracking was already dead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 16:16:20 +02:00
Till JS
bffb5be345 build(web): supply Verdaccio npm auth to SvelteKit builds via BuildKit secret
The sveltekit-base build (and the mana-web / manavoxel-web app builds on
top of it) run `pnpm install` with no .npmrc in the build context, so
private @mana/* packages resolved against registry.npmjs.org and 404'd
(e.g. @mana/shared-icons@1.0.0, which only lives on npm.mana.how). It had
been coasting on a warm pnpm cache; once sveltekit-base:local was gone the
rebuild hard-failed.

Mount the host ~/.npmrc (registry map + resolved _authToken) as a BuildKit
secret at /root/.npmrc in all three pnpm-install steps. Token never lands
in an image layer. build-app.sh passes it via --secret for the base build;
docker compose build reads it from the top-level secrets: entry.

Unblocks every managarten web rebuild (incl. the pending umami-removal).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 15:43:23 +02:00
Till JS
7db881b026 fix(mana-web): drop deleted quotes/content module from Dockerfile
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
The quotes module was removed in the 2026-05-19 decommission but its
COPY + build steps lingered in apps/mana/apps/web/Dockerfile, breaking
every mana-web rebuild since ("/apps/quotes/packages/content": not
found at the COPY stage). The web app no longer imports the package.
This unblocks the umami-removal deploy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 15:28:08 +02:00
Till JS
bcb4df0979 chore(analytics): Umami-Token auch aus datierten Records genericisiert (Web-Analytics)
Auf expliziten Wunsch — 6 historische Audit-/Decision-/Plan-Records. Token
Umami→Web-Analytics; präzise Historie bleibt in git-log + devlog erhalten.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 15:16:32 +02:00
Till JS
0b04ec35b5 chore(analytics): Umami aus Doku-Sektionen + manascore-Content (Welle E2)
URL_SCHEMA/MONITORING (Umami-Tabellen-Sektionen raus), OBSERVABILITY_GAPS,
RECOMMENDED_SERVICES, WINDOWS_GPU_SERVER_SETUP, generate-env-Kommentar,
manascore about.md + index.astro (Umami-Card/Methodik), website-builder-smoketest.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 15:03:25 +02:00
Till JS
04bfa71a7a chore(analytics): Umami-Tabellen-/Listen-Einträge aus Referenz-Docs (Welle E)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:58:57 +02:00
Till JS
100543b316 chore(analytics): Umami aus mac-mini-Ops-Scripts (DB-Loop, Container-Liste, Doku)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:58:22 +02:00
Till JS
3ea8703a94 chore(analytics): Umami aus i18n, CSP, website-blocks-Feature, infra (Welle D)
i18n×5 (settings-footnote → 'kein Web-Analytics'), security-headers CSP
(stats.mana.how raus, GlitchTip bleibt), website-blocks (Provider-Enum
'umami' raus, plausible bleibt; Analytics/Inspector/Test), privacy-faq DE/EN,
infra gpu-box .env/compose/README.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:56:34 +02:00
Till JS
394e520a26 chore(analytics): Umami aus Legal/Cookies/Features/Schema (Welle C)
datenschutz.md + chat cookies.astro → 'kein Web-Analytics' (akkurat),
features.astro Marketing entschärft, manascore-config-Schema-Kommentare,
shared-utils index/web-vitals Kommentare, apps/picture/docs/UMAMI_SETUP.md gelöscht.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:51:54 +02:00
Till JS
f81214043f chore(analytics): Umami aus Config + Admin-UI (Welle B)
env.development/macmini.example (UMAMI_*-Blöcke), docker-compose PUBLIC_UMAMI_WEBSITE_ID,
generate-env.mjs (10 Mappings), Admin Overview/SystemTab (Umami-Service-Einträge),
funnel-tracking-Kommentar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:47:55 +02:00
Till JS
dfcda85f35 chore(analytics): Umami-Script-Loader + <Analytics /> aus 7 App-Landing-Layouts entfernt
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:45:21 +02:00
Till JS
3a7269144c chore(analytics): Umami aus Landing-Pages — Script-Loader + shared Analytics-Komponente
Welle A der Umami-Code-Hygiene:
- 7 App-Landing-Layouts (chat/presi/contacts/calendar/picture/todo/mana):
  Umami-Script-Loader-Block + Analytics-Import + <Analytics />-Usage entfernt
- packages/shared-landing-ui/atoms/Analytics.astro GELÖSCHT (window.umami-Event-Tracker)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:44:59 +02:00
Till JS
9720cd9516 chore(analytics): Umami-Kern entfernen — Injection, Client-Lib, Auth-Hook, Container, DB
Erster Schritt der Umami-Komplett-Entfernung (Entscheidung: kein Web-Analytics):
- hooks.server.ts: injectUmamiAnalytics-Injection raus (stoppt Script-Load in der Unified-App)
- packages/shared-utils/analytics-server.ts: GELÖSCHT (Script-Injection-Util)
- packages/shared-utils/analytics.ts: zu No-op entkernt — window.umami/isUmamiAvailable
  raus, trackEvent no-op; alle 28 *Events-Aufrufer kompilieren weiter (senden nichts)
- packages/shared-auth/authService.ts: inline-Umami-trackAuth-Hook + Aufrufe raus
- infrastructure/docker-compose.gpu-box.yml: umami-Service (mana-mon-umami) raus
- docker/init-db: CREATE DATABASE umami + GRANT raus
- gelöscht: docs/ANALYTICS.md, scripts/mac-mini/setup-umami-db.sh, picture-landing .env.example

VERBLEIBEND (separat, größer): ~60 weitere Dateien — 7 Landing-Layout.astro
(eigene Script-Injection), website-blocks Analytics-Feature, Legal/Datenschutz,
i18n×5, Admin-UI, ~20 Docs. Teils produkt-/rechts-sensibel → in Wellen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:21:04 +02:00
Till JS
1d9a19d40f feat(infra): Backup-Zweitkopie auf GPU-Box (Phase 1 Off-Site)
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
backup-databases.sh spiegelt nach erfolgreichem lokalem Dump die
heutigen Dumps verschlüsselt (AES-256 via openssl) per scp auf die
GPU-Box (LAN). Schließt die "alles auf einer Disk"-Lücke.

- Non-blocking: Push-Fehler/Box-aus kippt NIE das lokale Backup,
  meldet nur via send_notification (ssh-Reachability-Probe vorweg).
- Verschlüsselt mit Passfile /Users/mana/.config/mana-backup-offsite.pass
  (chmod 600); fehlt es, wird unverschlüsselt gespiegelt + laut gewarnt.
- Zielpfad als Variable (OFFSITE_DIR) — beim Anschluss der externen SSD
  an die GPU nur diese eine Zeile umbiegen.
- Bewusst ZWEITKOPIE, kein echtes Off-Site (gleicher Standort) — Cloud
  bleibt Phase 2.

Deployed (Backup .bak-pre-offsite-20260525), bash -n grün, Skip-Pfad +
scp-Transport verifiziert. Aktiviert sich automatisch, sobald mana@macmini
auf der GPU-Box autorisiert ist (administrators_authorized_keys, Elevation
nötig — manueller Einzelschritt).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 15:34:12 +02:00
Till JS
4e26637464 feat(infra): colima-VM-Liveness-Guard in ensure-containers
Schließt das letzte SPOF-Loch: stirbt die colima-VM im laufenden Betrieb
(Crash/OOM), brachte bisher nichts sie zurück — startup.sh läuft nur beim
Boot, ensure-containers nahm an, docker sei oben (exit 1 bei totem docker).

Neu: vor dem docker-info-Check prüft das Script `colima status` und
startet die VM bei Bedarf. Sicherungen:
- Wartungs-Lock `/tmp/mana-colima-maintenance` (touch = Guard pausiert) —
  damit bewusste colima-Stopps (egress-/ssh-mux-Debug) nicht
  überschrieben werden.
- Backoff: nach 3 Fehlstarts in Folge KEIN Auto-Start mehr +
  urgent-Notification (z.B. stale in_use_by-Symlink → manueller Eingriff).
- send_notification bei Auto-Restart + bei Backoff-Stopp.
- set-e-sicher (if/else statt nacktem &&).

Deployed auf mana-server (Backup .bak-pre-colima-guard-20260525),
bash -n grün, einmal real ausgeführt (colima running → Guard no-op).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 15:04:37 +02:00
Till JS
800a91f1b5 fix(infra): credits-Port-Drift 3002→3061 entschärfen
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
credits.mana.how routete im cloudflared-Ingress auf localhost:3002 —
dort lauscht aber nichts (refused), der mana-credits-Container läuft
auf 3061. Live funktioniert credits.mana.how aktuell über einen
anderen Tunnel (3 cloudflared-Prozesse), die :3002-Zeile war eine
Reload-Zeitbombe: der nächste Reload dieser Config hätte
credits.mana.how auf refused:3002 geschickt.

Auch gpu-box.yml MANA_CREDITS_URL 192.168.178.131:3002→3061.

Server-Dateien wurden parallel gepatcht (Backups .bak-credits-20260525),
aber bewusst KEIN cloudflared-Reload — live bleibt unverändert (200),
der Fix greift beim nächsten regulären Reload/Deploy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 14:03:55 +02:00
Till JS
832adfe37b infra: Kern-Services aus Compose entfernen (leben jetzt in mana-core)
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
docker-compose.macmini.yml von 37 auf 6 reale App-Services reduziert
(landings, searxng, mana-web, manavoxel-web, mana-llm, mana-api).
postgres/redis/minio/auth/credits/share/mcp/notify/sync/... + Dubletten
raus; depends_on auf Kern-Services entfernt (Kern via Netz erreichbar).
mana-api + mana-web credits-URL auf kanonisch 3061.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 02:39:48 +02:00
Till JS
e14d1a54ea chore(infra): MinIO-CORS um memoro-app.mana.how erweitert
Some checks failed
CD Mac Mini / Detect Changes (push) Has been cancelled
CI / Detect Changes (push) Has been cancelled
CI / Validate (push) Has been cancelled
Mirror to Forgejo / Push to Forgejo (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
Browser direkt zu MinIO sprechen lassen ist Voraussetzung für
Memoro-Multipart-Upload (Cloudflare-Cap-Umgehung, siehe
memoro/docs/MULTIPART_UPLOAD.md). Gleichzeitig Drift mit
Server-Stand gesynct (food/plants ergänzt).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 16:32:47 +02:00
Till JS
24b6f50f50 chore(deps): regenerate pnpm-lock to match committed package.json specifiers
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
Drift war 2030+/506- Zeilen — package.json war clean (z.B. yaml
^2.8.3 schon committet), aber Lockfile hatte noch alte Specifier
(yaml ^2.9.0 etc.) plus eine andere transitive jiti-Resolution
(2.6.1 → 1.21.7, beide valid). Routine-pnpm-install-Output, kein
funktionaler Effekt.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 15:07:41 +02:00
Till JS
f8f2d4586a fix(backup): kreisel/mukke/viadocu in db_user_for_container ergänzen
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
Diese drei Container failten still bei der DB-Enumeration (Default-User
`postgres` existiert dort nicht → `:list`-Fail), wurden also nie
gebackupt. Echte Superuser verifiziert: kreisel→kreisel (mana_kreisel),
mukke→mukke (mana_mukke), viadocu→viadocu (viadocu).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 13:52:26 +02:00
Till JS
0fa84a919b chore(cloudflared): Server-Drift zurückgezogen — s3, mukke-vocal-studio, chor, app.<x>.com
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
Lokale Datei war seit 2026-05-21 ~50 Zeilen hinter dem Server-Stand
(`/Users/mana/projects/managarten/cloudflared-config.yml`). Editiert
wurde durchgehend server-side via SSH; mehrere live-Routes nie
zurück nach Git geflossen.

Nachgezogen (Stand: scp vom Mac Mini):

- **s3.mana.how → localhost:9000** (memoro presigned-URL signing,
  siehe memoro-Audio-Pipeline-Fix vom 22.05.).
- **mukke-api.mana.how → :3113** + **stems/music-gen/pitch/mix.mana.how**
  → Vocal-Studio-Plattform-Services (Mai 21).
- **chor.mana.how → :3091** (Chorplattform-Schnellfix-Hostname).
- **app.<wordeck|pageta|herbatrium>.com**-Routen für die jeweiligen
  Web-Apps (Apex-Domain → Landing, app-Subdomain → SPA).
- Diverse Service-Port-Updates (`5181 → 3202` für wordeck.com etc).

Bis das Drift-Pattern besser unterbunden wird (z.B. ein git-hook auf
mana-server der diff zum letzten Push prüft), bleibt es weiter ein
TODO immer den Server-Stand als Source-of-Truth zu betrachten und
nach Edits in Git nachzuziehen.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 12:51:19 +02:00
Till JS
abafdfbeb3 fix(shared-ui): TagChip nested button + Pill svelte:element ARIA role
Some checks failed
CD Mac Mini / Detect Changes (push) Has been cancelled
CI / Detect Changes (push) Has been cancelled
CI / Validate (push) Has been cancelled
Mirror to Forgejo / Push to Forgejo (push) Has been cancelled
Docker Validate / Validate Dockerfiles (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
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
Beide standen seit dem letzten shared-ui-Sync (ce923bbdc) als
svelte-check --fail-on-warnings Treffer im Pre-Push-Hook drin.
Aufgeräumt für die Cutover-PRs.

TagChip: outer war `<button>` mit innerem Remove-`<button>` —
verschachtelte interaktive Elemente sind invalid HTML und brechen
SSR-Hydration. Outer ist jetzt `<span role="button" tabindex="0">`
mit Enter/Space-Keyboard-Handler. CSS-Selektor `button.chip` →
`.chip-interactive` Klasse.

Pill: `<svelte:element this={tag}>` mit onclick/oncontextmenu
braucht explizite ARIA-Rolle (button bzw. link), weil der
statische Analyser den dynamischen Tag nicht aufdröselt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:24:56 +02:00
Till JS
db1dc9a738 feat(profile,infra): mana-me Write-Through-Brücke + me.mana.how-Route
Phase 1 des managarten me-images → mana-me Cutovers
(siehe mana/docs/USER_CONTEXT_STRATEGY.md). Spiegelt Primary-Slot-
Wechsel (face-ref, body-ref) in die Plattform-Service mana-me, damit
cross-app-Konsumenten (Werdrobe, Memoro) den aktuellen Face/Body
des Users ohne managarten-DB-Abhängigkeit bekommen.

- apps/api/src/lib/mana-me.ts: Service-to-Service-Client (X-Service-Key)
  mit slot→kind-Mapping (face-ref→face, body-ref→fullbody).
- apps/api/.../profile/routes.ts: POST /me-images/sync-primary (JWT)
  ruft den Client; best-effort, blockt setPrimary nicht.
- web stores/me-images.svelte.ts: setPrimary('face-ref'|'body-ref')
  triggert die Brücke via api/me-images.ts.

cloudflared: me.mana.how → localhost:3078 in der Plattform-Sektion
(neben share/mcp).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:07:32 +02:00
Till JS
ce923bbdc7 shared-ui: Sync auf mana/shared-ui v1.0.0 + AppSlider tot weg
Workspace-Kopie in packages/shared-ui synchronisiert mit
mana@1dc8a98 (Compat-Layer für alle v0.1.x-Patterns). 219 Files
geändert — alter Code (Charts, Quick-Input-Originale, Help, Onboarding,
Settings, Bottom-Stack, Search-Core, ColorPicker, Actions) entfällt;
neue v1.0.0-Komponenten kommen rein.

tsconfig.json self-contained (kein extends auf nicht-existierenden
managarten/tsconfig.base.json).

pnpm check ergibt jetzt 0 Errors über alle 10086 Files
(Stand vorher: 204 Errors mit dem unverarbeiteten Sync). Zwei
non-blocking Warnings stehen offen (SSR-nested-button bei TagChip,
ARIA-Role bei Pill mit click-handler).

AppSlider toter Code in apps/mana/apps/web/src/lib/components/
AppSlider.svelte entfernt — der Wrapper hatte keine Aufrufer mehr.

mana-internal Configs (Storybook, lost-pixel, vite.config, Dockerfile,
infrastructure, PORTING_PLAN.md) bewusst NICHT gesynced — die wandern
nur im mana-Repo. managarten-shared-ui ist eingefrorene Kopie, kein
publish-target.

scripts/validate-disziplin.mjs: ungenutzte lines-Variable entfernt
(ESLint no-unused-vars).
2026-05-21 14:56:54 +02:00
Till JS
3b61ab64a4 chore: gitignore .npmrc — Verdaccio-Token soll nie in git
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-20 16:52:24 +02:00
Till JS
8c8108d202 feat(infra): Primary-Switch herbatrium.com + seepuls.com
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
- herbatrium.mana.how + herbatrium-api.mana.how raus aus cloudflared
  und mana-auth CORS_ORIGINS — nur noch herbatrium.com /
  api.herbatrium.com.
- Seepuls vom .mana.how- auf .com-Setup gewechselt: cloudflared
  exposed jetzt seepuls.com (apex + www) und api.seepuls.com (statt
  seepuls.mana.how + seepuls-api.mana.how).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:30:06 +02:00
Till JS
767c3b7970 fix(cloudflared): kreisel.mana.how + kreisel-api.mana.how Ingress nachziehen
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
Beim 2026-05-20-Cutover war Schritt "Ingress in cloudflared-config.yml" zwar
im Memory abgehakt, aber nie wirklich gemacht — beide Hosts liefen in den
service: http_status:404 Catchall. App-Symptom: Native zeigte "API-Fehler
404:" in Töpfe-/Aufnehmen-Tab, Container kreisel-api selbst war healthy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:15:44 +02:00
Till JS
f2803fab0e feat(infra): Co-Domain herbatrium.com + api.herbatrium.com
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
cloudflared-config: 2 hostnames hinzu (apex → 3104, api → 3103).
docker-compose mana-auth: CORS_ORIGINS erweitert um die zwei neuen
Origins. herbatrium.mana.how bleibt funktional (kein Primary-Switch).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:45:13 +02:00
Till JS
a9a3c0436f fix(cloudflared): hub.mana.how → mana-hub-web auf :3082 (war catch-all 404) 2026-05-20 15:31:29 +02:00
Till JS
98207eb1fc chore(mana-web): /offline-Kommentar updated nach Layout-Bypass-Fix
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
Folge-Commit zu a0a463a4f. Der FIXME-Block in +page.ts war noch der
alte „prerender = false weil 500-Crash" — jetzt ersetzt durch die
Erklärung warum @-Notation + prerender = true die saubere Lösung sind.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:42:14 +02:00
Till JS
a0a463a4f1 fix(mana-web): /offline prerendert wieder + ohne Workbox-Bug
Seit 2026-04-07 stand `prerender = false` mit FIXME im Repo, weil der
SvelteKit-Build-SSR der Offline-Page in „Error: 500 /offline" lief —
ohne Stack. Daraus folgten zwei latente Probleme:

  - /offline lag NICHT in `prerendered/`, die @mana/shared-pwa-Workbox
    matched aber nur `**/*.html`. Pageta hat 2026-05-20 denselben
    Effekt unter `non-precached-url: /offline` aufgedeckt.
  - SSR-at-request-time war kaschiert, weil mana.how heute kaum
    Worker-Caching greift.

Root-Cause: `apps/mana/apps/web/src/routes/+layout.svelte` lädt
Dexie / encryption-vault / data-layer-listeners / auth-store auf
Modul-Ebene — Browser-only Code (window/document/IndexedDB) explodiert
im SSR-Worker.

Fix: `/offline` aus der Layout-Chain rauswerfen. Datei umbenannt von
`+page.svelte` zu `+page@.svelte` (SvelteKit-Konvention: @-Suffix
bricht alle Eltern-Layouts). OfflinePage-Komponente aus @mana/shared-ui
kommt ohne Stores aus, also unproblematisch.

Verifiziert:
- pnpm run build → keine Crashes mehr
- `.svelte-kit/output/prerendered/pages/offline.html` (9.2 KB) generiert
- `sw.js` Precache enthält `/offline` + `offline/__data.json`
- Workbox `createHandlerBoundToURL("/offline")` hat jetzt ein Target

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:41:34 +02:00
Till JS
568fc75f73 feat(infra): app.zitare.com + api.zitare.com ingress, zitare.mana.how raus
- cloudflared-config.yml: app.zitare.com → :3084, api.zitare.com →
  :3083 ergänzt. zitare.mana.how-Block entfernt. zitare-api.mana.how
  bleibt als Back-Compat. Kommentar-Header aktualisiert.
- docker-compose.macmini.yml: mana-auth CORS_ORIGINS — zitare.mana.how
  + zitare-api.mana.how raus, zitare.com + app.zitare.com +
  api.zitare.com + zitare-api.mana.how (Back-Compat) rein.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:34:10 +02:00
Till JS
4f47b1532b fix(cloudflared): comicello.com + www + api.comicello.com Tunnel-Routes
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
Primary-Domain-Cutover 2026-05-20 — Apex zeigte vorher als
Namecheap-Parking-A-Record, Tunnel hatte keine Routes für die
.com-Domain. CF-DNS auf Verein-Tunnel umgehängt, Routes hier
ergänzt. .mana.how-Co-Domain bleibt.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 13:44:20 +02:00
Till JS
b43a1eeda9 fix(cloudflared): sync2.mana.how + herbatrium.mana.how + -api.mana.how Routes
Drei Hostnames waren NIE im aktiven cloudflared-config eingetragen,
obwohl die DNS-CNAMEs angelegt waren:
  - sync2.mana.how → mana-sync-v2 (Event-Sourcing-Platform, alle 9
    Verein-Apps; ohne diesen Route konnten Browser-Clients keine
    Events emittieren)
  - herbatrium.mana.how / -api.mana.how (Live-Status in Memory war
    falsch, Smokes nur gegen localhost grün)

Manueller Insert via sed am 2026-05-19 ist beim nächsten managarten-
git-pull verloren gegangen, jetzt sauber im Repo persistiert.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:37:29 +02:00
Till JS
6a03eb00d2 feat(infra): ulo.ad path-routing, uload.mana.how raus
- cloudflared-config.yml: ulo.ad mit Pfad-Regex /r|api|public|healthz|
  readyz|\.well-known → :3107, sonst → :3108. uload.mana.how-Block raus.
- docker-compose.macmini.yml: mana-auth CORS_ORIGINS — uload.mana.how
  raus.
- package.json + lock: yaml als root-devDep (scripts/validate-cloudflared-
  config.mjs importiert es direkt, lief sonst nicht ohne Hoisting).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:25:29 +02:00
Till JS
5a3ffd3292 chore(compose): mana-auth CORS_ORIGINS um wordeck.com erweitert
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
`https://wordeck.com` + `https://api.wordeck.com` in mana-auth
CORS_ORIGINS. Ohne diese werden Cross-Origin-Refresh-Calls vom
wordeck-Callback hart geblockt — pendant zum PRODUCTION_TRUSTED_ORIGINS-
Update in mana@e9e78c0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:14:06 +02:00
Till JS
8b7b56f823 docs(lasts): scan.ts Header an leere SOURCES anpassen, auf Followup-Playbook verweisen
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
Nach places-Lift hat scan.ts SOURCES=[]. Der alte Header behauptete
"M3 ships only places source" — das war historisch korrekt, ist aber
seit dem places-Decommission irreführend. Jetzt klar dokumentiert:
Inbox bleibt leer bis habits/contacts-Source kommt; manuelles
create_last via UI/Tool funktioniert weiter.

Plan-Doc: mana/docs/playbooks/MANAGARTEN_LIFTS_FOLLOWUPS.md @ 9e7046f.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 19:49:57 +02:00
Till JS
7b842cabaf chore(mana): places + locationLogs 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
viadocu ist als Standalone-App live (viadocu-api.mana.how) und deckt
GPS-Tracking + Cities-Aggregation ab. Till bestätigt: keine User-Daten,
5 places-exklusive Features (Kategorien home/work/shopping/transit/
leisure, Heart-Favoriten, Tags, Visit-Counter pro Place, Place-Sharing
via Unlisted-Snapshot) werden bewusst aufgegeben.

Entfernt:
- apps/mana/apps/web/src/routes/(app)/places/ (1 Route)
- apps/mana/apps/web/src/lib/modules/places/ (Stores, Queries,
  Collections, Types, Tools, Views, SharedPlaceView, tracking-store
  mit Geolocation-Permission-Flow)
- apps/mana/apps/web/src/lib/i18n/locales/places/ (DE/EN/ES/FR/IT)
- apps/mana/apps/web/src/lib/modules/lasts/inference/sources/places.ts
  (places war einzige aktive Inference-Source; SOURCES-Array jetzt
  leer, habits/contacts-Sources sind M3.b geplant)

Cross-Module-Konsumenten aufgeräumt:
- modules/website/embeds.ts: resolvePlaces + 'places.places' embed-Case
- modules/myday/tools.ts: allPlaces-Read + visitedToday-Aggregat raus
- data/projections/day-snapshot.ts: places-Section + trackingStore-
  Import raus
- data/projections/types.ts: DaySnapshot.places-Feld raus
- data/projections/context-document.ts: "X Orte besucht" + "Standort-
  Tracking aktiv" Zeilen raus
- data/unlisted/resolvers.ts: buildPlaceBlob + 'places'-Case raus
- data/privacy/exposed-records.ts: places-Eintrag raus
- data/ai/revert/inverse-operations.ts: PlaceCreated-Inverse raus
- routes/share/[token]/+page.svelte: SharedPlaceView-Mount raus

Cross-Refs raus:
- module-registry.ts (placesModuleConfig)
- module-registry.test.ts (places-Tabellen)
- data/tools/init.ts (placesTools)
- data/crypto/registry.ts (places + locationLogs entry)
- data/crypto/plaintext-allowlist.ts (placeTags)
- app-registry/apps.ts (registerApp 'places' + MapPin-Icon-Import)
- packages/shared-branding/src/mana-apps.ts (places-Eintrag)

NICHT angefasst (mit Absicht):
- data/database.ts db.version()-Stores — Schema-Snapshots sind frozen.
  Tabellen places, locationLogs, placeTags bleiben im IndexedDB-Schema,
  werden aber nicht mehr beschrieben.
- packages/shared-branding/src/app-icons.ts APP_ICONS.places.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:22:38 +02:00
Till JS
0112161e78 chore(mana+api): articles + Backend-Worker raus, pageta trägt allein
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
Pageta ist seit 2026-05-17 standalone live (pageta.mana.how + pageta.com,
voll-featured laut STATUS.md) und deckt alle Articles-Module-Features
ab + mehr (research, reactions, feed, share, snapshot, preferences).
Keine User-Daten im managarten/articles-Modul (Till bestätigt).

Frontend entfernt:
- apps/mana/apps/web/src/routes/(app)/articles/ (9 Routes inkl. (tabs),
  [id], add, import, import/[jobId], settings)
- apps/mana/apps/web/src/lib/modules/articles/ (5 Stores, Queries,
  Collections, Types, Tools, Components, Widgets, ArticlesTabShell,
  consume-pickup, tab-context, parse-urls)
- apps/mana/apps/web/src/lib/i18n/locales/articles/ (DE/EN/ES/FR/IT)

Backend entfernt:
- apps/api/src/modules/articles/ (routes, import-worker, import-projection,
  import-extractor, consent-wall, field-meta, plus Tests)
- apps/api/src/index.ts: articlesRoutes + startArticleImportWorker raus
- apps/api/src/lib/metrics.ts: 5 articles-Metrics raus
  (articlesImportTicks/Items/Extract/JobsCompleted/PickupGc)

"Save-to-Articles"-Features in anderen Modulen entfernt
(User kann später direkt in pageta speichern via Share-Sheet):
- news-research/ListView + routes/(app)/news-research/+page.svelte:
  "Speichern"-Button raus
- writing/tools.ts: save_draft_as_article-Tool raus
- writing/components/ExportMenu.svelte: "Als Artikel speichern"-Option raus
- writing/components/ReferencePicker.svelte: 'article'-Mode raus
- writing/components/ReferenceChip.svelte: KIND_ICON/LABEL ohne 'article'
- writing/utils/reference-resolver.ts: resolveArticle + 'article'-case raus
- writing/utils/reference-resolver.test.ts: kind: 'article' → 'note'
  in Aggregate-Budget-Tests
- writing/utils/prompt-builder.test.ts: 'article'-Resolved-Reference raus
- writing/views/DetailView.svelte: 'articles'-published-Chip raus
- writing/types.ts: DraftReferenceKind ohne 'article',
  DraftPublishModule ohne 'articles'

Aktualisiert (Cross-Refs raus):
- module-registry.ts (articlesModuleConfig)
- module-registry.test.ts (articles-Tabellen + sync-name-Mappings)
- data-layer-listeners.ts (startArticlePickupConsumer)
- app-registry/apps.ts (registerApp 'articles')
- packages/shared-branding/src/mana-apps.ts (articles-Eintrag)
- components/dashboard/widget-registry.ts (ArticlesUnreadWidget)
- types/dashboard.ts (WidgetType 'articles-unread')
- data/crypto/registry.ts (LocalArticle/LocalHighlight)
- data/crypto/plaintext-allowlist.ts (articleTags/articleImportJobs/
  articleImportItems/articleExtractPickup)
- data/tools/init.ts (articlesTools)

NICHT angefasst (mit Absicht):
- data/database.ts db.version()-Stores — Schema-Snapshots sind frozen.
  Tabellen articles, articleHighlights, articleTags, articleImportJobs,
  articleImportItems, articleExtractPickup bleiben im IndexedDB-Schema,
  werden aber nicht mehr beschrieben.
- packages/shared-branding/src/app-icons.ts APP_ICONS.articles (für
  Native-PNG-Generator, harmlos).
- apps/api/src/lib/sync-db.ts Z6 Kommentar (historisches Beispiel).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:44:20 +02:00
Till JS
001548c74d chore(mana): quotes + apps/quotes 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-media (push) Blocked by required conditions
Docker Validate / Build mana-sync (push) Blocked by required conditions
Mirror to Forgejo / Push to Forgejo (push) Waiting to run
Zitare ist als Standalone-App live (zitare.mana.how) und im Wesentlichen
feature-complete für das Public-Korpus + Curator-Workflow. Keine Daten
im managarten/quotes-Modul vorhanden (Till bestätigt), kein
Migrations-Aufwand.

Lücken in zitare (Favoriten/Lists/Custom-private-Quotes) bewusst
nicht jetzt geschlossen — DB-Schema in zitare für User-Collections
ist da (collections.curatorId + visibility='private'), API/UI
können später nachgezogen werden wenn gebraucht.

Entfernt:
- apps/mana/apps/web/src/routes/(app)/quotes/ (6 Routes inkl.
  category, lists, favorites, categories)
- apps/mana/apps/web/src/lib/modules/quotes/ (6 Stores, Queries,
  Collections, Tools, Types, SpiralCanvas-Component)
- apps/mana/apps/web/src/lib/i18n/locales/quotes/ (DE/EN/ES/FR/IT)
- apps/mana/apps/web/src/lib/search/providers/quotes.ts
- apps/mana/apps/web/src/lib/components/dashboard/widgets/QuoteWidget.svelte
- apps/mana/apps/web/src/lib/modules/core/widgets/QuoteOfTheDayWidget.svelte
- apps/quotes/ (komplettes Top-Level inkl. @quotes/content Workspace-
  Package mit 87 Zitaten in 13 Kategorien)

Aktualisiert (Quotes-Refs raus):
- module-registry.ts (quotesModuleConfig)
- module-registry.test.ts (quotes-Tabellen + sync-name-Mappings)
- cross-app-queries.ts (useRandomFavorite + LocalFavorite-Import)
- search/providers/index.ts (registerLazy 'quotes')
- app-registry/apps.ts (registerApp 'quotes' + Quotes-Icon-Import)
- packages/shared-branding/src/mana-apps.ts (quotes-Eintrag)
- hooks.server.ts (Allowlist)
- types/dashboard.ts (WidgetType 'quotes-quote' + 'quotes')
- types/dashboard.test.ts
- stores/dashboard.svelte.ts (Widget-Default-Liste)
- splitscreen/registry.ts
- components/dashboard/widget-registry.ts
- modules/core/widgets/{WidgetGrid.svelte,index.ts}
- modules/spiral/collect.ts (Quotes/Music/Cards-Snapshots raus —
  collect dient den Spiral-DB-Engagement-Snapshot, alle 3 Apps
  sind dekommissioniert)
- crypto/plaintext-allowlist.ts (quotesFavorites/Lists/ListTags +
  customQuotes raus; bei der Gelegenheit auch music-Reste:
  mukkeProjects/playlistSongs/songTags)
- apps/mana/apps/web/package.json ('@quotes/content' Workspace-Dep)
- package.json (6 Quotes-Scripts: quotes:dev, dev:quotes:*,
  deploy:landing:quotes, cf:projects:create-Eintrag, dev:quotes:local)

NICHT angefasst (mit Absicht):
- data/database.ts db.version(1).stores — Schema-Snapshot ist frozen
  (gleiche Konvention wie für cards/music). Tabellen quotesFavorites,
  quotesLists, quotesListTags, customQuotes bleiben im IndexedDB-
  Schema, werden aber nicht mehr beschrieben.
- packages/spiral-db — bleibt, wird vom verbleibenden modules/spiral
  noch konsumiert (Mana-Activity-Spiral).
- packages/shared-branding/src/app-icons.ts APP_ICONS.quotes (für
  Native-PNG-Generator, harmlos).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:15:22 +02:00
Till JS
1b637b9aa7 chore(repo): fix pre-existing svelte-check errors blocking pre-push
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
Drei Root-Causes für die 8 pre-existing svelte-check errors auf main
(blockierten den pre-push-Hook seit längerem):

1. `dexie` fehlte als devDep in packages/shared-stores — 4 Files
   importieren `type { Table } from 'dexie'`. Type-only-Import, daher
   devDep reicht.

2. `vite-plugin-pwa` fehlte als devDep in apps/mana/apps/web. Wird
   nur transitiv via `@vite-pwa/sveltekit` gezogen, aber die
   `/// <reference types="vite-plugin-pwa/info" />`-Direktiven in
   src/app.d.ts brauchen das Package direkt im Tree.

3. packages/shared-auth/tsconfig.json baut `src/**/*` inklusive
   `*.spec.ts` — Spec-Files sollen aber nicht in den prepare-Build.
   exclude erweitert um `*.spec.ts` + `*.test.ts`.

Verifikation: `pnpm check` von apps/mana/apps/web läuft jetzt mit
0 ERRORS / 0 WARNINGS / 0 FILES_WITH_PROBLEMS (vorher 8 Errors).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:34:21 +02:00
Till JS
f9159741a0 chore(mana): music + apps/mukke aus unified-App entfernen
Mukke ist seit 2026-05-19 als Standalone-App live (mukke.mana.how +
mukke-api.mana.how, Repo git.mana.how/till/mukke) mit umfassenderem
Feature-Set (Studio, Wavesurfer, Lyrics-Sync, Beats, LRC/SRT/JSON-
Export, ID3-Extract, S3-Streaming). Modul + alte Landing können raus.

Entfernt:
- apps/mana/apps/web/src/routes/(app)/music/ (alle 6 Routes)
- apps/mana/apps/web/src/lib/modules/music/ (Stores, Queries,
  Collections, Tools, Types, Views, Components)
- apps/mana/apps/web/src/lib/i18n/locales/music/ (DE/EN/ES/FR/IT)
- apps/mana/apps/web/src/lib/search/providers/music.ts
- apps/mana/apps/web/src/lib/components/dashboard/widgets/MusicLibraryWidget.svelte
- apps/mukke/ (alte Landing + shared types-Package — Standalone hat
  beides selbst; VISUALIZER_CONCEPT.md + ALTERNATIVES.md vorab nach
  mukke/docs/ ins Standalone-Repo migriert)

Aktualisiert (Music-Refs raus):
- module-registry.ts (musicModuleConfig)
- module-registry.test.ts (music-Tabellen-Expectation)
- cross-app-queries.ts (useMusicStats + MusicStats-Interface)
- tools/init.ts (musicTools-Init)
- search/providers/index.ts (registerLazy 'music')
- app-registry/apps.ts (registerApp 'music' + MusicNotes-Icon-Import)
- packages/shared-branding/src/mana-apps.ts (music-Eintrag)
- hooks.server.ts (Allowlist)
- types/dashboard.ts (WidgetType 'music-library' + RequiredBackend)
- types/dashboard.test.ts (Erwartung 'music-library')
- stores/dashboard.svelte.ts (Widget-Default-Liste)
- splitscreen/registry.ts
- components/dashboard/widget-registry.ts

NICHT angefasst (mit Absicht):
- data/database.ts db.version(1).stores — Schema-Snapshot ist frozen
  (gleiche Konvention wie für cards/quotes). Tabellen (songs,
  mukkePlaylists, playlistSongs, mukkeProjects, markers, songTags)
  bleiben im IndexedDB-Schema, werden aber nicht mehr beschrieben.
  Bei Bedarf später ein db.version(N) mit `songs: null` etc. nachschieben.
- modules/events/discovery/types.ts 'music' (Event-Kategorie, generisch)
- data/time-blocks/types.ts 'music' (TimeBlock-Kategorie, generisch)
- shared-ai/tools/schemas.ts 'music' (Event-Discovery-Enum)
- packages/shared-branding/src/app-icons.ts APP_ICONS.music (für
  Native-PNG-Generator, harmlos)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:20:13 +02:00
Till JS
d2bfaf1b2a chore(infra): cards-Reste raus, CORS für mukke + manaclick
- docker-compose.macmini.yml: cards-server- + cards-web-Compose-Services
  entfernt (dockerfile-Pfade existieren seit den decommission-Commits
  bc158cb0b + 9cd871749 nicht mehr im Tree). Container liefen schon nicht
  mehr — siehe Memory project_cards_auth_bypass_live.md: alte mana-app-
  cards-{server,web}-Container im LIVE-Cutover gestoppt + entfernt.
- docker-compose.macmini.yml: CORS_ORIGINS um mukke.mana.how,
  mukke-api.mana.how, manaclick.mana.how erweitert (mukke LIVE
  2026-05-19, manaclick LIVE 2026-05-19).
- package.json: 5 tote cards-Scripts entfernt (dev:cards-server,
  dev:cards:web, dev:cards:landing, dev:cards:app, dev:cardecky:full,
  dev:cards:local, cards:dev, deploy:landing:cards, cards-landing
  aus cf:projects:create + deploy:landing:all).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:19:42 +02:00
Till JS
e9e43abaa0 shared-uload: HTTP-federation (Option B) — schreibt jetzt gegen uload-api
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
Nach dem uLoad-Cutover 2026-05-18 (Code/uload/ als Standalone) war
@mana/shared-uload structurell broken: ShareModal-Calls aus presi+
music landeten in mana_sync.sync_changes, aber der alte Konsument
(mana-app-uload-server) ist abgeschaltet → 404 auf ulo.ad/r/<code>.

Fix: shared-uload schreibt jetzt direkt via HTTP gegen die föderierte
uload-API.

- create-link.ts: createShortLink() → POST {apiUrl}/api/v1/links
  mit Authorization: Bearer <token>. Init-Signatur ist neu
  initSharedUload({ apiUrl, getAuthToken, shortUrlOrigin? }).
- types.ts: UloadLink (Dexie-internal-Type) entfernt — Caller arbeiten
  nur noch mit CreateShortLinkOptions + CreatedLink (Wire-Shapes).
- package.json: @mana/local-store-Dep entfernt. Version 0.2.0.
- index.ts: getBaseUrl-Export ergänzt, UloadLink raus.

Caller-Site (apps/mana/apps/web/src/routes/(app)/+layout.svelte):
  initSharedUload({
    apiUrl: PUBLIC_ULOAD_API_URL ?? 'https://uload-api.mana.how',
    getAuthToken: () => authStore.getValidToken(),
    shortUrlOrigin: PUBLIC_ULOAD_SHORT_ORIGIN ?? 'https://ulo.ad',
  });

Bonus-Cleanup:
- plaintext-allowlist.ts: uloadFolders + uloadTags raus (Tables sind
  via Dexie v67 gedroppt, Allowlist-Entries waren orphaned).

mana-Web-App: pnpm check grün (0/0 auf 7396 Files).
2026-05-18 16:39:44 +02:00