{ "date": "2026-04-28", "day_number": 97, "weekday": "Dienstag", "commits": 65, "authors": [ { "name": "Till JS", "count": 65 } ], "additions": 21935, "deletions": 29438, "net_lines": -7503, "files_changed": 491, "new_files": 0, "deleted_files": 0, "session": { "first_commit_at": "2026-04-28T12:54:32.000Z", "last_commit_at": "2026-04-29T00:50:16.000Z", "total_span_minutes": 716, "active_minutes": 436, "pauses": [ { "from": "16:24", "to": "16:57", "minutes": 33 }, { "from": "17:37", "to": "20:57", "minutes": 199 }, { "from": "01:30", "to": "02:17", "minutes": 48 } ], "longest_focus_minutes": 273 }, "top_dirs": [ { "path": "apps/mana/apps/web", "pct": 54 }, { "path": "games/arcade/apps", "pct": 13 }, { "path": "services/mana-geocoding/src", "pct": 9 }, { "path": "apps/api/src/modules", "pct": 3 }, { "path": "packages/shared-branding/src", "pct": 2 } ], "top_extensions": [ { "ext": ".ts", "count": 311 }, { "ext": ".svelte", "count": 170 }, { "ext": ".json", "count": 85 }, { "ext": ".md", "count": 25 }, { "ext": ".html", "count": 23 }, { "ext": ".yml", "count": 15 } ], "tags": ["articles", "forms", "feedback", "geocoding", "deploy"], "commits_list": [ { "hash": "44f9155", "short": "chore(dev): pnpm dev:analytics script + test-checklist mentions local-dev startup", "type": "chore", "scope": "dev", "additions": 19, "deletions": 1, "timestamp": "2026-04-28T14:54:32+02:00" }, { "hash": "0c30a16", "short": "fix: 4 boot-time noise + correctness bugs surfaced by post-deploy smoke", "type": null, "scope": null, "additions": 106, "deletions": 55, "timestamp": "2026-04-28T14:56:24+02:00" }, { "hash": "5377190", "short": "infra(macmini): bump squeezed container memory limits", "type": "infra", "scope": "macmini", "additions": 10, "deletions": 5, "timestamp": "2026-04-28T15:02:38+02:00" }, { "hash": "eaa1d74", "short": "fix: silence two cosmetic boot-time devtools warnings", "type": null, "scope": null, "additions": 55, "deletions": 20, "timestamp": "2026-04-28T15:10:15+02:00" }, { "hash": "94d3277", "short": "feat(feedback): \"Idee teilen\" lebt jetzt im PillNav-Usermenü", "type": "feat", "scope": "feedback", "additions": 65, "deletions": 109, "timestamp": "2026-04-28T15:12:27+02:00" }, { "hash": "ff823bf", "short": "fix(feedback): POST /api/v1/feedback liest appId aus X-App-Id-Header", "type": "fix", "scope": "feedback", "additions": 6, "deletions": 1, "timestamp": "2026-04-28T15:16:11+02:00" }, { "hash": "f1e4a39", "short": "feat(geocoding): provider chain with Photon + Nominatim fallbacks", "type": "feat", "scope": "geocoding", "additions": 2120, "deletions": 184, "timestamp": "2026-04-28T15:21:11+02:00" }, { "hash": "f39e723", "short": "chore(ci): drop 16 dead build-* jobs + per-product detect-changes branches", "type": "chore", "scope": "ci", "additions": 30, "deletions": 727, "timestamp": "2026-04-28T15:32:43+02:00" }, { "hash": "15ab24b", "short": "feat(feedback): heart-half als globales Feedback-Icon + inline-Form in der Workbench", "type": "feat", "scope": "feedback", "additions": 441, "deletions": 341, "timestamp": "2026-04-28T15:36:52+02:00" }, { "hash": "9a0cf5b", "short": "fix(geocoding): bump PROVIDER_TIMEOUT_MS default 5s → 8s", "type": "fix", "scope": "geocoding", "additions": 6, "deletions": 2, "timestamp": "2026-04-28T15:39:09+02:00" }, { "hash": "34b1690", "short": "fix(mana-ai): copy missing workspace deps into Docker installer stage", "type": "fix", "scope": "mana-ai", "additions": 11, "deletions": 1, "timestamp": "2026-04-28T15:42:20+02:00" }, { "hash": "164d5da", "short": "fix(mana-llm): copy aliases.yaml into Docker image", "type": "fix", "scope": "mana-llm", "additions": 5, "deletions": 1, "timestamp": "2026-04-28T15:47:48+02:00" }, { "hash": "bcc21ca", "short": "feat(geocoding): privacy hardening — sensitive-query block + coord quantization + extended cache TTL for public answers", "type": "feat", "scope": "geocoding", "additions": 658, "deletions": 29, "timestamp": "2026-04-28T16:04:56+02:00" }, { "hash": "698e09b", "short": "chore(deploy): auto-apply additive Drizzle schema migrations + RAM headroom for mana-web build", "type": "chore", "scope": "deploy", "additions": 283, "deletions": 0, "timestamp": "2026-04-28T16:10:31+02:00" }, { "hash": "112e2cc", "short": "feat(feedback): rename community → feedback (module + routes + domain)", "type": "feat", "scope": "feedback", "additions": 51, "deletions": 51, "timestamp": "2026-04-28T16:18:45+02:00" }, { "hash": "f20a411", "short": "chore(infra): right-size mem_limits based on observed RSS (Tier-3 sweep)", "type": "chore", "scope": "infra", "additions": 28, "deletions": 8, "timestamp": "2026-04-28T16:18:58+02:00" }, { "hash": "b1fa55d", "short": "feat(places): surface geocoding privacy notices in autocomplete UI", "type": "feat", "scope": "places", "additions": 218, "deletions": 25, "timestamp": "2026-04-28T16:24:15+02:00" }, { "hash": "e4d9dc5", "short": "fix(deploy): safe-db-push uses pnpm dlx when local drizzle-kit is missing", "type": "fix", "scope": "deploy", "additions": 14, "deletions": 2, "timestamp": "2026-04-28T16:57:35+02:00" }, { "hash": "6f83fba", "short": "docs(reports): geocoding self-hosting decision — recommend Photon on mana-gpu", "type": "docs", "scope": "reports", "additions": 219, "deletions": 0, "timestamp": "2026-04-28T17:04:30+02:00" }, { "hash": "941df57", "short": "feat(feedback): rename community-identity columns + settings-section", "type": "feat", "scope": "feedback", "additions": 544, "deletions": 209, "timestamp": "2026-04-28T17:09:58+02:00" }, { "hash": "104a5a4", "short": "fix(deploy): pnpm install workspace deps before running safe-db-push", "type": "fix", "scope": "deploy", "additions": 42, "deletions": 12, "timestamp": "2026-04-28T17:10:08+02:00" }, { "hash": "153ad80", "short": "feat(geocoding): support dual-Photon (self-hosted + public) for GPU migration", "type": "feat", "scope": "geocoding", "additions": 537, "deletions": 16, "timestamp": "2026-04-28T17:19:04+02:00" }, { "hash": "f851f15", "short": "feat(lasts): tidy ListView header — single-row quick-add + scrollable icon-tabs", "type": "feat", "scope": "lasts", "additions": 109, "deletions": 108, "timestamp": "2026-04-28T17:22:40+02:00" }, { "hash": "c709420", "short": "fix(feedback): ReactionBar stoppt Click-Bubbling", "type": "fix", "scope": "feedback", "additions": 6, "deletions": 2, "timestamp": "2026-04-28T17:25:22+02:00" }, { "hash": "f41ca54", "short": "fix(deploy): safe-db-push cleanup trap also removes snapshot + journal", "type": "fix", "scope": "deploy", "additions": 37, "deletions": 24, "timestamp": "2026-04-28T17:25:46+02:00" }, { "hash": "f754d4e", "short": "chore(infra): provision 2 GiB swap inside Colima VM as OOM safety net", "type": "chore", "scope": "infra", "additions": 21, "deletions": 0, "timestamp": "2026-04-28T17:31:52+02:00" }, { "hash": "248549b", "short": "fix(feedback): keine doppelte Anzeige von Title + Body", "type": "fix", "scope": "feedback", "additions": 54, "deletions": 3, "timestamp": "2026-04-28T17:37:51+02:00" }, { "hash": "7ebbf06", "short": "feat(macmini): pass PHOTON_SELF_API_URL through to mana-geocoding", "type": "feat", "scope": "macmini", "additions": 9, "deletions": 0, "timestamp": "2026-04-28T21:15:54+02:00" }, { "hash": "fc49198", "short": "docs(geocoding): post-migration log + Photon weekly-refresh operator scripts", "type": "docs", "scope": "geocoding", "additions": 254, "deletions": 5, "timestamp": "2026-04-28T21:31:08+02:00" }, { "hash": "5535f2d", "short": "feat(articles): server-side bulk-import worker (Phase 2)", "type": "feat", "scope": "articles", "additions": 723, "deletions": 0, "timestamp": "2026-04-28T21:33:49+02:00" }, { "hash": "7bca16d", "short": "feat(articles): bulk-import schema + plan (Phase 1)", "type": "feat", "scope": "articles", "additions": 785, "deletions": 4249, "timestamp": "2026-04-28T22:11:51+02:00" }, { "hash": "2bbcf14", "short": "chore(geocoding): remove Pelias + close 3 bypass paths to public Nominatim", "type": "chore", "scope": "geocoding", "additions": 332, "deletions": 1264, "timestamp": "2026-04-28T22:12:26+02:00" }, { "hash": "a9bcd41", "short": "feat(articles): client-side pickup consumer (Phase 3)", "type": "feat", "scope": "articles", "additions": 166, "deletions": 0, "timestamp": "2026-04-28T22:16:10+02:00" }, { "hash": "19627f1", "short": "docs(demo-personas): Runbook für echte-Account-Demo-Workflow", "type": "docs", "scope": "demo-personas", "additions": 233, "deletions": 0, "timestamp": "2026-04-28T22:17:18+02:00" }, { "hash": "962606b", "short": "feat(demo-personas): chor tägerwilen — Recherche + Seed (118 Records)", "type": "feat", "scope": "demo-personas", "additions": 1275, "deletions": 0, "timestamp": "2026-04-28T22:17:32+02:00" }, { "hash": "8a5fad3", "short": "fix(geocoding): bump PROVIDER_TIMEOUT_MS to 20s for cold cross-LAN", "type": "fix", "scope": "geocoding", "additions": 18, "deletions": 6, "timestamp": "2026-04-28T22:19:21+02:00" }, { "hash": "fa299e3", "short": "feat(app-registry): wire up 4 modules + 7 routes + tier-patch validator", "type": "feat", "scope": "app-registry", "additions": 812, "deletions": 556, "timestamp": "2026-04-28T22:21:41+02:00" }, { "hash": "29cbaf3", "short": "feat(articles): bulk-import store + queries (Phase 4)", "type": "feat", "scope": "articles", "additions": 275, "deletions": 1, "timestamp": "2026-04-28T22:23:45+02:00" }, { "hash": "5f0a1b5", "short": "feat(articles): bulk-import UI (Phase 5)", "type": "feat", "scope": "articles", "additions": 773, "deletions": 1, "timestamp": "2026-04-28T22:30:36+02:00" }, { "hash": "0fc16d1", "short": "feat(articles): bulk-import AI tool wiring (Phase 6)", "type": "feat", "scope": "articles", "additions": 130, "deletions": 3, "timestamp": "2026-04-28T22:33:31+02:00" }, { "hash": "33b3f65", "short": "test(articles): parseUrls unit tests + extract pure module (Phase 7)", "type": "test", "scope": "articles", "additions": 184, "deletions": 49, "timestamp": "2026-04-28T22:39:17+02:00" }, { "hash": "230dfd5", "short": "chore: extract arcade into standalone repo", "type": null, "scope": null, "additions": 107, "deletions": 17469, "timestamp": "2026-04-28T22:29:14+02:00" }, { "hash": "907a3ad", "short": "Create forms-module.md", "type": null, "scope": null, "additions": 364, "deletions": 0, "timestamp": "2026-04-28T22:41:45+02:00" }, { "hash": "6d193a9", "short": "chore(app-registry): polish 4 small wins — TOC + AppId-derive + route-drift test + 3 MANA_APPS", "type": "chore", "scope": "app-registry", "additions": 205, "deletions": 37, "timestamp": "2026-04-28T22:59:26+02:00" }, { "hash": "75d9207", "short": "feat(forms): M1 skeleton — module + Dexie v57 + welcome-seed", "type": "feat", "scope": "forms", "additions": 1063, "deletions": 0, "timestamp": "2026-04-28T23:01:05+02:00" }, { "hash": "f104a2b", "short": "feat(forms): M2 builder + CRUD — drag-reorder + 11 field-types", "type": "feat", "scope": "forms", "additions": 1414, "deletions": 0, "timestamp": "2026-04-28T23:21:27+02:00" }, { "hash": "0ef71de", "short": "feat(forms): M3a responses view + CSV export + detail modal", "type": "feat", "scope": "forms", "additions": 1088, "deletions": 1, "timestamp": "2026-04-28T23:21:51+02:00" }, { "hash": "afeb32f", "short": "feat(forms): M4a conditional branching — pure resolver + UI editor", "type": "feat", "scope": "forms", "additions": 842, "deletions": 2, "timestamp": "2026-04-28T23:31:17+02:00" }, { "hash": "18f13e1", "short": "feat(forms): M4b visibility + unlisted-sharing + public render", "type": "feat", "scope": "forms", "additions": 800, "deletions": 1, "timestamp": "2026-04-28T23:39:41+02:00" }, { "hash": "054b9e5", "short": "fix(articles): import-projection accepts F3 + legacy field_meta shapes", "type": "fix", "scope": "articles", "additions": 28, "deletions": 92, "timestamp": "2026-04-28T23:22:30+02:00" }, { "hash": "8fbdc6d", "short": "feat(notes): isSpaceContext flag replaces kontext module (Option B)", "type": "feat", "scope": "notes", "additions": 496, "deletions": 983, "timestamp": "2026-04-29T00:06:34+02:00" }, { "hash": "1815139", "short": "chore: drop context module — registry refs, schema, AI route, AppId", "type": null, "scope": null, "additions": 11, "deletions": 96, "timestamp": "2026-04-28T20:57:14+02:00" }, { "hash": "5c8faae", "short": "chore: drop remaining context module legacy refs", "type": null, "scope": null, "additions": 1, "deletions": 66, "timestamp": "2026-04-28T21:44:33+02:00" }, { "hash": "a295894", "short": "chore: drop legacy context module files (companion to acb737e25)", "type": null, "scope": null, "additions": 0, "deletions": 2241, "timestamp": "2026-04-29T00:23:10+02:00" }, { "hash": "0d85d7c", "short": "feat(forms): M5 AI tools — 7 tools im AI_TOOL_CATALOG", "type": "feat", "scope": "forms", "additions": 640, "deletions": 0, "timestamp": "2026-04-29T00:33:55+02:00" }, { "hash": "e99fea1", "short": "feat(forms): M3b public-submit endpoint — schließt den Public-Loop", "type": "feat", "scope": "forms", "additions": 360, "deletions": 23, "timestamp": "2026-04-29T00:44:42+02:00" }, { "hash": "b297f68", "short": "fix(articles, mana-ai): rollout-block hardening for sync_changes projections", "type": "fix", "scope": "articles, mana-ai", "additions": 223, "deletions": 69, "timestamp": "2026-04-29T00:53:39+02:00" }, { "hash": "93545f8", "short": "chore: drop who + kontext MANA_APPS entries to match earlier extractions", "type": null, "scope": null, "additions": 0, "deletions": 98, "timestamp": "2026-04-29T01:04:34+02:00" }, { "hash": "59373c0", "short": "chore(articles): hygiene pass — shared-ai actor + lib/sync-db + metrics (#5,#7,#11)", "type": "chore", "scope": "articles", "additions": 247, "deletions": 124, "timestamp": "2026-04-29T01:06:15+02:00" }, { "hash": "7f805d9", "short": "feat(forms): M7a auto-sync zu contacts — der Mana-Differentiator", "type": "feat", "scope": "forms", "additions": 548, "deletions": 4, "timestamp": "2026-04-29T01:07:22+02:00" }, { "hash": "e8774fc", "short": "test(articles): worker rollup + field-meta + consent-wall + recovery UI (#6,#14)", "type": "test", "scope": "articles", "additions": 222, "deletions": 3, "timestamp": "2026-04-29T01:30:04+02:00" }, { "hash": "57b7a43", "short": "feat(forms): M7b auto-sync zu events — RSVP-Pipeline für Anmeldungen", "type": "feat", "scope": "forms", "additions": 285, "deletions": 34, "timestamp": "2026-04-29T02:17:37+02:00" }, { "hash": "ace1b70", "short": "feat(forms): M8 website-block — formEmbed bindet Mana-Formulare ein", "type": "feat", "scope": "forms", "additions": 913, "deletions": 2, "timestamp": "2026-04-29T02:38:28+02:00" }, { "hash": "e37c008", "short": "chore(articles): polish pass — schema cleanup, MAX cap, filters, docs (#8,#9,#13,#15,#18,#20)", "type": "chore", "scope": "articles", "additions": 218, "deletions": 22, "timestamp": "2026-04-29T02:42:46+02:00" }, { "hash": "48bd091", "short": "feat(forms): FormsWidget — Workbench-Karte mit Stats + letzte Forms", "type": "feat", "scope": "forms", "additions": 196, "deletions": 1, "timestamp": "2026-04-29T02:50:16+02:00" } ], "review_state": "auto", "llm": { "model": null, "generated_at": null } }