mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 07:19:39 +02:00
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>
700 lines
17 KiB
JSON
700 lines
17 KiB
JSON
{
|
||
"date": "2026-04-20",
|
||
"day_number": 89,
|
||
"weekday": "Montag",
|
||
"commits": 68,
|
||
"authors": [
|
||
{
|
||
"name": "Till JS",
|
||
"count": 68
|
||
}
|
||
],
|
||
"additions": 22189,
|
||
"deletions": 111943,
|
||
"net_lines": -89754,
|
||
"files_changed": 965,
|
||
"new_files": 0,
|
||
"deleted_files": 0,
|
||
"session": {
|
||
"first_commit_at": "2026-04-20T12:24:39.000Z",
|
||
"last_commit_at": "2026-04-20T19:28:45.000Z",
|
||
"total_span_minutes": 424,
|
||
"active_minutes": 351,
|
||
"pauses": [
|
||
{
|
||
"from": "16:53",
|
||
"to": "18:05",
|
||
"minutes": 73
|
||
}
|
||
],
|
||
"longest_focus_minutes": 203
|
||
},
|
||
"top_dirs": [
|
||
{
|
||
"path": "apps/mana/apps/web",
|
||
"pct": 24
|
||
},
|
||
{
|
||
"path": "apps/context/apps/mobile",
|
||
"pct": 15
|
||
},
|
||
{
|
||
"path": "apps/picture/apps/mobile",
|
||
"pct": 13
|
||
},
|
||
{
|
||
"path": "apps/cards/apps/mobile",
|
||
"pct": 13
|
||
},
|
||
{
|
||
"path": "apps/chat/apps/mobile",
|
||
"pct": 11
|
||
}
|
||
],
|
||
"top_extensions": [
|
||
{
|
||
"ext": ".ts",
|
||
"count": 390
|
||
},
|
||
{
|
||
"ext": ".tsx",
|
||
"count": 334
|
||
},
|
||
{
|
||
"ext": ".svelte",
|
||
"count": 82
|
||
},
|
||
{
|
||
"ext": ".md",
|
||
"count": 62
|
||
},
|
||
{
|
||
"ext": ".json",
|
||
"count": 50
|
||
},
|
||
{
|
||
"ext": ".sql",
|
||
"count": 38
|
||
}
|
||
],
|
||
"tags": ["spaces", "invoices", "ai", "broadcast", "type-check"],
|
||
"commits_list": [
|
||
{
|
||
"hash": "52d008d",
|
||
"short": "fix(goals): start GoalTracker on boot + surface AI proposals inline",
|
||
"type": "fix",
|
||
"scope": "goals",
|
||
"additions": 35,
|
||
"deletions": 7,
|
||
"timestamp": "2026-04-20T14:24:39+02:00"
|
||
},
|
||
{
|
||
"hash": "a2598b9",
|
||
"short": "feat(crypto): type-safe registry entries + dev-mode drift check",
|
||
"type": "feat",
|
||
"scope": "crypto",
|
||
"additions": 122,
|
||
"deletions": 14,
|
||
"timestamp": "2026-04-20T14:26:37+02:00"
|
||
},
|
||
{
|
||
"hash": "c7af693",
|
||
"short": "feat(crypto): Phase C — build-time registry ↔ Dexie audit",
|
||
"type": "feat",
|
||
"scope": "crypto",
|
||
"additions": 406,
|
||
"deletions": 3,
|
||
"timestamp": "2026-04-20T14:36:32+02:00"
|
||
},
|
||
{
|
||
"hash": "1eda3f5",
|
||
"short": "chore(turbo): lint against recursive \\`turbo run\\` calls in child packages",
|
||
"type": "chore",
|
||
"scope": "turbo",
|
||
"additions": 98,
|
||
"deletions": 1,
|
||
"timestamp": "2026-04-20T14:39:32+02:00"
|
||
},
|
||
{
|
||
"hash": "5ec1dfc",
|
||
"short": "chore(db): enforce pgSchema isolation with a lint script",
|
||
"type": "chore",
|
||
"scope": "db",
|
||
"additions": 114,
|
||
"deletions": 8,
|
||
"timestamp": "2026-04-20T14:45:59+02:00"
|
||
},
|
||
{
|
||
"hash": "d1d3774",
|
||
"short": "fix(install): remove silent `|| true` from postinstall + narrow filter",
|
||
"type": "fix",
|
||
"scope": "install",
|
||
"additions": 13,
|
||
"deletions": 9,
|
||
"timestamp": "2026-04-20T14:58:59+02:00"
|
||
},
|
||
{
|
||
"hash": "da47f53",
|
||
"short": "docs(plans): function-calling migration + removal of propose/approve gate",
|
||
"type": "docs",
|
||
"scope": "plans",
|
||
"additions": 298,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T15:10:23+02:00"
|
||
},
|
||
{
|
||
"hash": "c34175a",
|
||
"short": "fix(type-check): repair silently broken per-package type-check scripts",
|
||
"type": "fix",
|
||
"scope": "type-check",
|
||
"additions": 26,
|
||
"deletions": 5,
|
||
"timestamp": "2026-04-20T15:13:54+02:00"
|
||
},
|
||
{
|
||
"hash": "4b8fede",
|
||
"short": "fix(mana-llm): surface Gemini finish_reason errors instead of returning \"\"",
|
||
"type": "fix",
|
||
"scope": "mana-llm",
|
||
"additions": 208,
|
||
"deletions": 13,
|
||
"timestamp": "2026-04-20T15:15:37+02:00"
|
||
},
|
||
{
|
||
"hash": "c612a22",
|
||
"short": "fix(type-check): unblock two more pre-existing failures",
|
||
"type": "fix",
|
||
"scope": "type-check",
|
||
"additions": 7,
|
||
"deletions": 2,
|
||
"timestamp": "2026-04-20T15:20:08+02:00"
|
||
},
|
||
{
|
||
"hash": "e757470",
|
||
"short": "feat(mana-llm): add OpenAI-style tools + tool_calls passthrough",
|
||
"type": "feat",
|
||
"scope": "mana-llm",
|
||
"additions": 566,
|
||
"deletions": 79,
|
||
"timestamp": "2026-04-20T15:22:48+02:00"
|
||
},
|
||
{
|
||
"hash": "4523ab2",
|
||
"short": "feat(shared-ai): toolToFunctionSchema — catalog → OpenAI function-spec",
|
||
"type": "feat",
|
||
"scope": "shared-ai",
|
||
"additions": 235,
|
||
"deletions": 2,
|
||
"timestamp": "2026-04-20T15:24:36+02:00"
|
||
},
|
||
{
|
||
"hash": "11f768b",
|
||
"short": "docs(invoices): ClubDesk vs. Mana comparison + invoices module plan",
|
||
"type": "docs",
|
||
"scope": "invoices",
|
||
"additions": 675,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T15:27:57+02:00"
|
||
},
|
||
{
|
||
"hash": "2cf89ce",
|
||
"short": "feat(invoices): M1 skeleton — module registration + empty ListView",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 666,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T15:28:09+02:00"
|
||
},
|
||
{
|
||
"hash": "4daca89",
|
||
"short": "feat(shared-ai): runPlannerLoop + compact system prompt for function calling",
|
||
"type": "feat",
|
||
"scope": "shared-ai",
|
||
"additions": 537,
|
||
"deletions": 1,
|
||
"timestamp": "2026-04-20T15:31:01+02:00"
|
||
},
|
||
{
|
||
"hash": "248137e",
|
||
"short": "chore(mobile): remove 6 of 7 mobile apps — keep only memoro",
|
||
"type": "chore",
|
||
"scope": "mobile",
|
||
"additions": 26,
|
||
"deletions": 106334,
|
||
"timestamp": "2026-04-20T15:31:47+02:00"
|
||
},
|
||
{
|
||
"hash": "8d00ee0",
|
||
"short": "feat(invoices): M2 CRUD — draft lifecycle, totals, list + detail",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 2704,
|
||
"deletions": 61,
|
||
"timestamp": "2026-04-20T15:40:11+02:00"
|
||
},
|
||
{
|
||
"hash": "a44e3df",
|
||
"short": "refactor(mana): remove post-signup onboarding wizard",
|
||
"type": "refactor",
|
||
"scope": "mana",
|
||
"additions": 1,
|
||
"deletions": 1329,
|
||
"timestamp": "2026-04-20T15:46:21+02:00"
|
||
},
|
||
{
|
||
"hash": "0077752",
|
||
"short": "fix(type-check): clear the last five failures — monorepo type-check is now 76/76 green",
|
||
"type": "fix",
|
||
"scope": "type-check",
|
||
"additions": 22,
|
||
"deletions": 10,
|
||
"timestamp": "2026-04-20T15:53:07+02:00"
|
||
},
|
||
{
|
||
"hash": "2dc298a",
|
||
"short": "feat(invoices): M4 PDF rendering — pdf-lib renderer + preview + download",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 904,
|
||
"deletions": 172,
|
||
"timestamp": "2026-04-20T15:57:30+02:00"
|
||
},
|
||
{
|
||
"hash": "b249345",
|
||
"short": "feat(spaces): add space types + module allowlist as multi-tenancy foundation",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 852,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T15:57:57+02:00"
|
||
},
|
||
{
|
||
"hash": "8dbc850",
|
||
"short": "chore(ci): add \\`validate:all\\` + fix undefined \\`validate:monorepo\\` reference",
|
||
"type": "chore",
|
||
"scope": "ci",
|
||
"additions": 3,
|
||
"deletions": 11,
|
||
"timestamp": "2026-04-20T16:01:54+02:00"
|
||
},
|
||
{
|
||
"hash": "3179fa1",
|
||
"short": "fix(page-shell): keep header title on one line with ellipsis",
|
||
"type": "fix",
|
||
"scope": "page-shell",
|
||
"additions": 7,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T16:03:26+02:00"
|
||
},
|
||
{
|
||
"hash": "9d69e44",
|
||
"short": "docs(claude-md): document \\`validate:all\\` + \\`test:coverage\\` in Quick Start",
|
||
"type": "docs",
|
||
"scope": "claude-md",
|
||
"additions": 6,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T16:03:55+02:00"
|
||
},
|
||
{
|
||
"hash": "166d6c6",
|
||
"short": "feat(spaces): validate space metadata on Better Auth organization hooks",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 577,
|
||
"deletions": 225,
|
||
"timestamp": "2026-04-20T16:05:38+02:00"
|
||
},
|
||
{
|
||
"hash": "5af23d3",
|
||
"short": "feat(invoices): M5 Swiss QR-Bill — SCOR reference + PDF overlay",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 398,
|
||
"deletions": 5,
|
||
"timestamp": "2026-04-20T16:07:35+02:00"
|
||
},
|
||
{
|
||
"hash": "5af96bf",
|
||
"short": "feat(webapp): mission runner on native function calling, tools execute directly",
|
||
"type": "feat",
|
||
"scope": "webapp",
|
||
"additions": 505,
|
||
"deletions": 734,
|
||
"timestamp": "2026-04-20T16:08:58+02:00"
|
||
},
|
||
{
|
||
"hash": "da1bb2d",
|
||
"short": "feat(spaces): auto-create personal space on signup via Better Auth hook",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 266,
|
||
"deletions": 1,
|
||
"timestamp": "2026-04-20T16:10:26+02:00"
|
||
},
|
||
{
|
||
"hash": "698ffe7",
|
||
"short": "feat(spaces): add spaces pg schema — credentials + module_permissions",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 167,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T16:13:33+02:00"
|
||
},
|
||
{
|
||
"hash": "78bfea4",
|
||
"short": "refactor(webapp): drop AiProposalInbox usages from 9 module pages",
|
||
"type": "refactor",
|
||
"scope": "webapp",
|
||
"additions": 71,
|
||
"deletions": 31,
|
||
"timestamp": "2026-04-20T16:18:54+02:00"
|
||
},
|
||
{
|
||
"hash": "c34c755",
|
||
"short": "feat(spaces): scope layer — active-space store + scoped-db wrapper + visibility",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 501,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T16:24:43+02:00"
|
||
},
|
||
{
|
||
"hash": "08b7ac1",
|
||
"short": "feat(invoices): M6 send-by-mail flow — mailto + PDF download + confirm",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 422,
|
||
"deletions": 3,
|
||
"timestamp": "2026-04-20T16:27:34+02:00"
|
||
},
|
||
{
|
||
"hash": "2d15684",
|
||
"short": "refactor(webapp): delete proposal infrastructure + ai-plan legacy wrappers",
|
||
"type": "refactor",
|
||
"scope": "webapp",
|
||
"additions": 26,
|
||
"deletions": 1555,
|
||
"timestamp": "2026-04-20T16:30:13+02:00"
|
||
},
|
||
{
|
||
"hash": "2ee3a1a",
|
||
"short": "feat(invoices): M7 dashboard widget + tests + plan status",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 644,
|
||
"deletions": 4,
|
||
"timestamp": "2026-04-20T16:38:18+02:00"
|
||
},
|
||
{
|
||
"hash": "1cd559c",
|
||
"short": "feat(mana-ai): server runner on runPlannerLoop, drops text-JSON parser",
|
||
"type": "feat",
|
||
"scope": "mana-ai",
|
||
"additions": 262,
|
||
"deletions": 212,
|
||
"timestamp": "2026-04-20T16:39:20+02:00"
|
||
},
|
||
{
|
||
"hash": "80dbb3b",
|
||
"short": "feat(spaces): migrate calendar module to scoped-db wrapper (pilot)",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 54,
|
||
"deletions": 22,
|
||
"timestamp": "2026-04-20T16:42:10+02:00"
|
||
},
|
||
{
|
||
"hash": "9f7d2f2",
|
||
"short": "feat(companion): chat on runPlannerLoop with native function calling",
|
||
"type": "feat",
|
||
"scope": "companion",
|
||
"additions": 106,
|
||
"deletions": 273,
|
||
"timestamp": "2026-04-20T16:45:33+02:00"
|
||
},
|
||
{
|
||
"hash": "e10c243",
|
||
"short": "feat(spaces): thread space_id through mana-sync protocol + storage",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 205,
|
||
"deletions": 11,
|
||
"timestamp": "2026-04-20T16:53:14+02:00"
|
||
},
|
||
{
|
||
"hash": "5b7564b",
|
||
"short": "test(ai): promote MockLlmClient to a shared @mana/shared-ai export",
|
||
"type": "test",
|
||
"scope": "ai",
|
||
"additions": 70,
|
||
"deletions": 80,
|
||
"timestamp": "2026-04-20T18:05:46+02:00"
|
||
},
|
||
{
|
||
"hash": "76060b0",
|
||
"short": "feat(invoices): M3 logo upload — embed in PDF header",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 301,
|
||
"deletions": 5,
|
||
"timestamp": "2026-04-20T18:06:40+02:00"
|
||
},
|
||
{
|
||
"hash": "871a1c3",
|
||
"short": "feat(spaces): wire active-space boot into (app) layout",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 19,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T18:10:46+02:00"
|
||
},
|
||
{
|
||
"hash": "b878ecf",
|
||
"short": "feat(spaces): Space-Switcher + Create-Dialog in (app) layout",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 715,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T18:16:47+02:00"
|
||
},
|
||
{
|
||
"hash": "0d613e1",
|
||
"short": "feat(ai): thread TokenUsage through runPlannerLoop → mana-ai budget",
|
||
"type": "feat",
|
||
"scope": "ai",
|
||
"additions": 60,
|
||
"deletions": 6,
|
||
"timestamp": "2026-04-20T18:21:34+02:00"
|
||
},
|
||
{
|
||
"hash": "a4bc7d2",
|
||
"short": "feat(invoices): M8 AI tools — create/mark_paid/list/stats",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 427,
|
||
"deletions": 4,
|
||
"timestamp": "2026-04-20T18:22:20+02:00"
|
||
},
|
||
{
|
||
"hash": "dc1a0a6",
|
||
"short": "docs(invoices): mark all milestones done, list Phase-2/3 open items",
|
||
"type": "docs",
|
||
"scope": "invoices",
|
||
"additions": 7,
|
||
"deletions": 9,
|
||
"timestamp": "2026-04-20T18:23:02+02:00"
|
||
},
|
||
{
|
||
"hash": "6d8637b",
|
||
"short": "feat(spaces): migrate todo/notes/contacts to scoped-db + add scopedGet",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 48,
|
||
"deletions": 16,
|
||
"timestamp": "2026-04-20T18:26:01+02:00"
|
||
},
|
||
{
|
||
"hash": "728027c",
|
||
"short": "feat(ai): auto-execute server-planned iterations on the client",
|
||
"type": "feat",
|
||
"scope": "ai",
|
||
"additions": 177,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T18:34:52+02:00"
|
||
},
|
||
{
|
||
"hash": "3194180",
|
||
"short": "docs(plans): mark shared-llm tool-call integration as deferred",
|
||
"type": "docs",
|
||
"scope": "plans",
|
||
"additions": 1,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T18:36:07+02:00"
|
||
},
|
||
{
|
||
"hash": "394aa79",
|
||
"short": "feat(invoices): close Phase-2 gaps — finance cross-link + structured addresses",
|
||
"type": "feat",
|
||
"scope": "invoices",
|
||
"additions": 413,
|
||
"deletions": 35,
|
||
"timestamp": "2026-04-20T18:58:18+02:00"
|
||
},
|
||
{
|
||
"hash": "8e84004",
|
||
"short": "fix(invoices): add scopedForModule import after Spaces bulk-migration",
|
||
"type": "fix",
|
||
"scope": "invoices",
|
||
"additions": 6,
|
||
"deletions": 3,
|
||
"timestamp": "2026-04-20T19:16:24+02:00"
|
||
},
|
||
{
|
||
"hash": "b13eb44",
|
||
"short": "docs(broadcast): plan newsletter / broadcast module",
|
||
"type": "docs",
|
||
"scope": "broadcast",
|
||
"additions": 505,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T19:32:53+02:00"
|
||
},
|
||
{
|
||
"hash": "00b1c9b",
|
||
"short": "feat(spaces): migrate 43 modules to scopedForModule (Batches A–D)",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 379,
|
||
"deletions": 155,
|
||
"timestamp": "2026-04-20T19:42:06+02:00"
|
||
},
|
||
{
|
||
"hash": "a12928b",
|
||
"short": "fix(shared-types): add .ts extensions to re-exports for Node ESM resolvers",
|
||
"type": "fix",
|
||
"scope": "shared-types",
|
||
"additions": 15,
|
||
"deletions": 27,
|
||
"timestamp": "2026-04-20T19:50:22+02:00"
|
||
},
|
||
{
|
||
"hash": "4ff95b2",
|
||
"short": "feat(spaces): rename legacy spaceId → contextSpaceId (v31 migration)",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 94,
|
||
"deletions": 23,
|
||
"timestamp": "2026-04-20T19:52:44+02:00"
|
||
},
|
||
{
|
||
"hash": "88e3adb",
|
||
"short": "feat(spaces): multi-member RLS policy in mana-sync (forward-compat)",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 65,
|
||
"deletions": 4,
|
||
"timestamp": "2026-04-20T19:55:17+02:00"
|
||
},
|
||
{
|
||
"hash": "79a6da3",
|
||
"short": "feat(spaces): move access tier from user to space",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 117,
|
||
"deletions": 15,
|
||
"timestamp": "2026-04-20T20:10:06+02:00"
|
||
},
|
||
{
|
||
"hash": "1f392c1",
|
||
"short": "feat(broadcast): M1 skeleton — module registration + empty ListView",
|
||
"type": "feat",
|
||
"scope": "broadcast",
|
||
"additions": 500,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T20:16:35+02:00"
|
||
},
|
||
{
|
||
"hash": "5139ade",
|
||
"short": "feat(spaces): invite + accept flow (member management UI)",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 807,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T20:38:55+02:00"
|
||
},
|
||
{
|
||
"hash": "264c4c3",
|
||
"short": "feat(broadcast): M2 audience + editor + compose wizard",
|
||
"type": "feat",
|
||
"scope": "broadcast",
|
||
"additions": 2529,
|
||
"deletions": 147,
|
||
"timestamp": "2026-04-20T20:41:09+02:00"
|
||
},
|
||
{
|
||
"hash": "da37349",
|
||
"short": "chore(mana-llm): thread GOOGLE_API_KEY + default model into local compose",
|
||
"type": "chore",
|
||
"scope": "mana-llm",
|
||
"additions": 2,
|
||
"deletions": 0,
|
||
"timestamp": "2026-04-20T20:42:21+02:00"
|
||
},
|
||
{
|
||
"hash": "38d3524",
|
||
"short": "feat(spaces): end-to-end shared-space sync (membership lookup + plaintext)",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 365,
|
||
"deletions": 18,
|
||
"timestamp": "2026-04-20T20:46:53+02:00"
|
||
},
|
||
{
|
||
"hash": "3ac32d9",
|
||
"short": "feat(broadcast): M3 email HTML render + desktop/mobile/text preview",
|
||
"type": "feat",
|
||
"scope": "broadcast",
|
||
"additions": 828,
|
||
"deletions": 15,
|
||
"timestamp": "2026-04-20T20:48:14+02:00"
|
||
},
|
||
{
|
||
"hash": "1d3794f",
|
||
"short": "feat(mana-ai): Prometheus metrics for tool-calls, loop rounds, provider errors",
|
||
"type": "feat",
|
||
"scope": "mana-ai",
|
||
"additions": 125,
|
||
"deletions": 3,
|
||
"timestamp": "2026-04-20T20:48:29+02:00"
|
||
},
|
||
{
|
||
"hash": "fabd45b",
|
||
"short": "feat(spaces): move Space-Switcher into the PillNav start slot",
|
||
"type": "feat",
|
||
"scope": "spaces",
|
||
"additions": 38,
|
||
"deletions": 20,
|
||
"timestamp": "2026-04-20T20:54:41+02:00"
|
||
},
|
||
{
|
||
"hash": "ea673a2",
|
||
"short": "style(workbench): polish timeline — time-range filter, event count, prominent revert",
|
||
"type": "style",
|
||
"scope": "workbench",
|
||
"additions": 90,
|
||
"deletions": 15,
|
||
"timestamp": "2026-04-20T21:16:16+02:00"
|
||
},
|
||
{
|
||
"hash": "ea1c9c1",
|
||
"short": "fix(spaces): Space-Switcher visible + styled like native PillNav pills",
|
||
"type": "fix",
|
||
"scope": "spaces",
|
||
"additions": 375,
|
||
"deletions": 158,
|
||
"timestamp": "2026-04-20T21:21:16+02:00"
|
||
},
|
||
{
|
||
"hash": "8e677c9",
|
||
"short": "feat(ai): add Library AI tools (create / rate / status / list)",
|
||
"type": "feat",
|
||
"scope": "ai",
|
||
"additions": 305,
|
||
"deletions": 1,
|
||
"timestamp": "2026-04-20T21:23:19+02:00"
|
||
},
|
||
{
|
||
"hash": "becba67",
|
||
"short": "fix(spaces): call Better Auth at its real URL, not through SvelteKit",
|
||
"type": "fix",
|
||
"scope": "spaces",
|
||
"additions": 71,
|
||
"deletions": 47,
|
||
"timestamp": "2026-04-20T21:28:45+02:00"
|
||
}
|
||
],
|
||
"review_state": "auto",
|
||
"llm": {
|
||
"model": null,
|
||
"generated_at": null
|
||
}
|
||
}
|