diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 1434495..8ae77d8 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,25 @@ TASKMATE - CHANGELOG ==================== +================================================================================ +29.12.2025 - Gitea: Commit-Autor = eingeloggter Benutzer +================================================================================ + +BUGFIX: COMMIT-AUTOR WAR FALSCH +-------------------------------------------------------------------------------- +- Problem: Bei Commits wurde "Claude Projekt Manager" als Autor angezeigt + (aus der lokalen Git-Konfiguration des Benutzers) +- Lösung: Der eingeloggte TaskMate-Benutzer wird jetzt als Autor verwendet + +ÄNDERUNGEN +-------------------------------------------------------------------------------- +- backend/services/gitService.js: commit() akzeptiert jetzt author-Parameter + * Verwendet git commit --author="Name " -m "Nachricht" + * Email wird generiert: benutzername@taskmate.local +- backend/routes/git.js: Commit-Route übergibt req.user als Autor + * Verwendet display_name oder username als Autorname +- frontend/sw.js: Cache-Version auf 124 erhöht + ================================================================================ 29.12.2025 - Gitea: Branch umbenennen + UI-Aufräumung ================================================================================ diff --git a/backend/routes/git.js b/backend/routes/git.js index ba930a3..ef268ee 100644 --- a/backend/routes/git.js +++ b/backend/routes/git.js @@ -175,8 +175,14 @@ router.post('/commit/:projectId', (req, res) => { } } - // Commit erstellen - const result = gitService.commit(application.local_path, message); + // Autor aus eingeloggtem Benutzer + const author = req.user ? { + name: req.user.display_name || req.user.username, + email: req.user.email || `${req.user.username.toLowerCase()}@taskmate.local` + } : null; + + // Commit erstellen mit Autor + const result = gitService.commit(application.local_path, message, author); res.json(result); } catch (error) { logger.error('Fehler beim Commit:', error); diff --git a/backend/services/gitService.js b/backend/services/gitService.js index e185f2f..c00caeb 100644 --- a/backend/services/gitService.js +++ b/backend/services/gitService.js @@ -253,8 +253,11 @@ function stageAll(localPath) { /** * Commit erstellen + * @param {string} localPath - Pfad zum Repository + * @param {string} message - Commit-Nachricht + * @param {object} author - Autor-Informationen { name, email } */ -function commit(localPath, message) { +function commit(localPath, message, author = null) { if (!isGitRepository(localPath)) { return { success: false, error: 'Kein Git-Repository' }; } @@ -265,7 +268,17 @@ function commit(localPath, message) { // Escape für Shell const escapedMessage = message.replace(/"/g, '\\"'); - return execGitCommand(`git commit -m "${escapedMessage}"`, localPath); + + // Commit-Befehl mit optionalem Autor + let commitCmd = `git commit -m "${escapedMessage}"`; + if (author && author.name) { + const authorName = author.name.replace(/"/g, '\\"'); + const authorEmail = author.email || `${author.name.toLowerCase().replace(/\s+/g, '.')}@taskmate.local`; + commitCmd = `git commit --author="${authorName} <${authorEmail}>" -m "${escapedMessage}"`; + logger.info(`Commit mit Autor: ${authorName} <${authorEmail}>`); + } + + return execGitCommand(commitCmd, localPath); } /** diff --git a/backups/backup_2025-12-22T12-41-59-725Z.db-wal b/backups/backup_2025-12-22T12-41-59-725Z.db-wal deleted file mode 100644 index fb317e3..0000000 Binary files a/backups/backup_2025-12-22T12-41-59-725Z.db-wal and /dev/null differ diff --git a/backups/backup_2025-12-22T12-41-59-725Z.db b/backups/backup_2025-12-29T19-15-04-246Z.db similarity index 77% rename from backups/backup_2025-12-22T12-41-59-725Z.db rename to backups/backup_2025-12-29T19-15-04-246Z.db index 0fdc965..dfdeb0e 100644 Binary files a/backups/backup_2025-12-22T12-41-59-725Z.db and b/backups/backup_2025-12-29T19-15-04-246Z.db differ diff --git a/backups/backup_2025-12-29T19-15-04-246Z.db-wal b/backups/backup_2025-12-29T19-15-04-246Z.db-wal new file mode 100644 index 0000000..e69de29 diff --git a/data/taskmate.db b/data/taskmate.db index 08ea730..dfdeb0e 100644 Binary files a/data/taskmate.db and b/data/taskmate.db differ diff --git a/data/taskmate.db-shm b/data/taskmate.db-shm index dfaf176..fe9ac28 100644 Binary files a/data/taskmate.db-shm and b/data/taskmate.db-shm differ diff --git a/data/taskmate.db-wal b/data/taskmate.db-wal index 0ea1e5f..e69de29 100644 Binary files a/data/taskmate.db-wal and b/data/taskmate.db-wal differ diff --git a/frontend/sw.js b/frontend/sw.js index 5eb812c..f6bc174 100644 --- a/frontend/sw.js +++ b/frontend/sw.js @@ -4,7 +4,7 @@ * Offline support and caching */ -const CACHE_VERSION = '123'; +const CACHE_VERSION = '124'; const CACHE_NAME = 'taskmate-v' + CACHE_VERSION; const STATIC_CACHE_NAME = 'taskmate-static-v' + CACHE_VERSION; const DYNAMIC_CACHE_NAME = 'taskmate-dynamic-v' + CACHE_VERSION; diff --git a/logs/app.log b/logs/app.log index 1d20368..2bb1032 100644 --- a/logs/app.log +++ b/logs/app.log @@ -33039,3 +33039,229 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. [2025-12-29T19:02:02.690Z] [INFO] GET /api/git/commits/4?limit=10 304 78ms [2025-12-29T19:02:12.425Z] [INFO] GET /api/health 200 1ms [2025-12-29T19:02:42.342Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:02:44.857Z] [INFO] POST /api/git/commit/4 200 1972ms +[2025-12-29T19:02:45.290Z] [INFO] GET /api/git/status/4 200 426ms +[2025-12-29T19:02:45.395Z] [INFO] GET /api/git/branches/4 304 104ms +[2025-12-29T19:02:45.490Z] [INFO] GET /api/git/commits/4?limit=10 200 92ms +[2025-12-29T19:03:12.279Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:03:16.435Z] [INFO] GET / 304 0ms +[2025-12-29T19:03:16.459Z] [INFO] GET /css/base.css 304 0ms +[2025-12-29T19:03:16.457Z] [INFO] GET /css/variables.css 304 0ms +[2025-12-29T19:03:16.444Z] [INFO] Socket disconnected: HG (lmMYce_n_s9WEw8rAAAF) +[2025-12-29T19:03:16.463Z] [INFO] GET /css/board.css 304 1ms +[2025-12-29T19:03:16.462Z] [INFO] GET /css/components.css 304 1ms +[2025-12-29T19:03:16.465Z] [INFO] GET /css/admin.css 304 2ms +[2025-12-29T19:03:16.465Z] [INFO] GET /css/modal.css 304 1ms +[2025-12-29T19:03:16.485Z] [INFO] GET /css/gitea.css 304 16ms +[2025-12-29T19:03:16.486Z] [INFO] GET /css/calendar.css 304 21ms +[2025-12-29T19:03:16.485Z] [INFO] GET /css/list.css 304 12ms +[2025-12-29T19:03:16.466Z] [INFO] GET /css/notifications.css 304 2ms +[2025-12-29T19:03:16.486Z] [INFO] GET /js/app.js 304 11ms +[2025-12-29T19:03:16.487Z] [INFO] GET /css/responsive.css 304 14ms +[2025-12-29T19:03:16.486Z] [INFO] GET /css/proposals.css 304 11ms +[2025-12-29T19:03:16.517Z] [INFO] GET /js/store.js 304 3ms +[2025-12-29T19:03:16.519Z] [INFO] GET /js/sync.js 304 3ms +[2025-12-29T19:03:16.518Z] [INFO] GET /js/auth.js 304 3ms +[2025-12-29T19:03:16.519Z] [INFO] GET /js/offline.js 304 3ms +[2025-12-29T19:03:16.518Z] [INFO] GET /js/api.js 304 3ms +[2025-12-29T19:03:16.521Z] [INFO] GET /js/board.js 304 4ms +[2025-12-29T19:03:16.524Z] [INFO] GET /js/list.js 304 4ms +[2025-12-29T19:03:16.525Z] [INFO] GET /js/shortcuts.js 304 5ms +[2025-12-29T19:03:16.522Z] [INFO] GET /js/calendar.js 304 2ms +[2025-12-29T19:03:16.525Z] [INFO] GET /js/task-modal.js 304 4ms +[2025-12-29T19:03:16.526Z] [INFO] GET /js/undo.js 304 5ms +[2025-12-29T19:03:16.558Z] [INFO] GET /js/proposals.js 304 30ms +[2025-12-29T19:03:16.526Z] [INFO] GET /js/admin.js 304 5ms +[2025-12-29T19:03:16.557Z] [INFO] GET /js/notifications.js 304 29ms +[2025-12-29T19:03:16.558Z] [INFO] GET /js/utils.js 304 29ms +[2025-12-29T19:03:16.558Z] [INFO] GET /js/gitea.js 304 29ms +[2025-12-29T19:03:16.593Z] [INFO] GET /api/auth/users 304 4ms +[2025-12-29T19:03:16.618Z] [INFO] Socket connected: HG (ROU80ZtTv2FO3_2bAAAH) +[2025-12-29T19:03:16.593Z] [INFO] GET /assets/icons/task.svg 304 5ms +[2025-12-29T19:03:16.612Z] [INFO] GET /api/auth/users 304 4ms +[2025-12-29T19:03:16.652Z] [INFO] GET /api/columns/4 304 6ms +[2025-12-29T19:03:16.650Z] [INFO] GET /api/tasks/project/4 304 5ms +[2025-12-29T19:03:16.637Z] [INFO] GET /api/projects 304 17ms +[2025-12-29T19:03:16.657Z] [INFO] GET /api/stats/dashboard?projectId=4 304 10ms +[2025-12-29T19:03:16.660Z] [INFO] GET /api/labels/4 304 13ms +[2025-12-29T19:03:16.671Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 3ms +[2025-12-29T19:03:16.681Z] [INFO] GET /api/notifications 304 3ms +[2025-12-29T19:03:16.765Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:03:18.133Z] [INFO] GET /api/applications/4 200 4ms +[2025-12-29T19:03:18.554Z] [INFO] GET /api/git/status/4 304 416ms +[2025-12-29T19:03:18.638Z] [INFO] GET /api/git/branches/4 304 500ms +[2025-12-29T19:03:18.727Z] [INFO] GET /api/git/commits/4?limit=10 304 589ms +[2025-12-29T19:03:18.729Z] [INFO] GET /sw.js 304 1ms +[2025-12-29T19:03:42.195Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:04:12.134Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:04:42.088Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:05:12.026Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:05:41.937Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:06:11.811Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:06:41.747Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:07:11.672Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:07:41.589Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:08:11.501Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:08:41.413Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:09:11.346Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:09:41.227Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:10:11.158Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:10:41.086Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:11:10.998Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:11:40.928Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:11:41.925Z] [INFO] Socket disconnected: HG (ROU80ZtTv2FO3_2bAAAH) +[2025-12-29T19:12:10.861Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:12:40.816Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:13:10.744Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:14:04.502Z] [ERROR] Fehler beim Abrufen der Upload-Einstellungen: +[2025-12-29T19:14:04.557Z] [INFO] Datenbank-Tabellen erstellt +[2025-12-29T19:14:04.561Z] [INFO] Server läuft auf Port 3000 +[2025-12-29T19:14:04.559Z] [INFO] Datenbank initialisiert +[2025-12-29T19:14:04.561Z] [INFO] Umgebung: production +[2025-12-29T19:14:04.562Z] [INFO] Backup-Scheduler gestartet (alle 24 Stunden) +[2025-12-29T19:14:04.562Z] [INFO] Automatische Backups aktiviert +[2025-12-29T19:14:09.146Z] [INFO] GET /api/health 200 7ms +[2025-12-29T19:14:24.603Z] [INFO] GET / 304 2ms +[2025-12-29T19:14:24.637Z] [INFO] GET /css/variables.css 304 1ms +[2025-12-29T19:14:24.641Z] [INFO] GET /css/admin.css 304 0ms +[2025-12-29T19:14:24.640Z] [INFO] GET /css/calendar.css 304 1ms +[2025-12-29T19:14:24.643Z] [INFO] GET /css/components.css 304 1ms +[2025-12-29T19:14:24.653Z] [INFO] GET /css/notifications.css 304 6ms +[2025-12-29T19:14:24.658Z] [INFO] GET /css/responsive.css 304 3ms +[2025-12-29T19:14:24.658Z] [INFO] GET /css/gitea.css 304 4ms +[2025-12-29T19:14:24.650Z] [INFO] GET /css/proposals.css 304 3ms +[2025-12-29T19:14:24.659Z] [INFO] GET /css/base.css 304 3ms +[2025-12-29T19:14:24.659Z] [INFO] GET /css/list.css 304 3ms +[2025-12-29T19:14:24.660Z] [INFO] GET /css/modal.css 304 3ms +[2025-12-29T19:14:24.670Z] [INFO] GET /css/board.css 304 8ms +[2025-12-29T19:14:24.669Z] [INFO] GET /js/app.js 304 8ms +[2025-12-29T19:14:24.718Z] [INFO] GET /js/store.js 304 3ms +[2025-12-29T19:14:24.718Z] [INFO] GET /js/api.js 304 2ms +[2025-12-29T19:14:24.719Z] [INFO] GET /js/auth.js 304 3ms +[2025-12-29T19:14:24.719Z] [INFO] GET /js/sync.js 304 2ms +[2025-12-29T19:14:24.720Z] [INFO] GET /js/offline.js 304 3ms +[2025-12-29T19:14:24.722Z] [INFO] GET /js/list.js 304 2ms +[2025-12-29T19:14:24.721Z] [INFO] GET /js/calendar.js 304 1ms +[2025-12-29T19:14:24.722Z] [INFO] GET /js/shortcuts.js 304 1ms +[2025-12-29T19:14:24.731Z] [INFO] GET /js/board.js 304 9ms +[2025-12-29T19:14:24.732Z] [INFO] GET /js/task-modal.js 304 9ms +[2025-12-29T19:14:24.734Z] [INFO] GET /js/proposals.js 304 9ms +[2025-12-29T19:14:24.733Z] [INFO] GET /js/admin.js 304 10ms +[2025-12-29T19:14:24.734Z] [INFO] GET /js/notifications.js 304 9ms +[2025-12-29T19:14:24.740Z] [INFO] GET /js/undo.js 304 5ms +[2025-12-29T19:14:24.784Z] [INFO] GET /assets/icons/task.svg 304 10ms +[2025-12-29T19:14:24.783Z] [INFO] GET /api/auth/users 304 9ms +[2025-12-29T19:14:24.741Z] [INFO] GET /js/utils.js 304 6ms +[2025-12-29T19:14:24.740Z] [INFO] GET /js/gitea.js 304 5ms +[2025-12-29T19:14:24.804Z] [INFO] GET /api/auth/users 304 3ms +[2025-12-29T19:14:24.825Z] [INFO] Socket connected: HG (0KDPR_hsXNq4lFGkAAAB) +[2025-12-29T19:14:24.847Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:14:24.833Z] [INFO] GET /api/projects 304 6ms +[2025-12-29T19:14:24.857Z] [INFO] GET /api/stats/dashboard?projectId=4 304 11ms +[2025-12-29T19:14:24.863Z] [INFO] GET /api/columns/4 304 15ms +[2025-12-29T19:14:24.867Z] [INFO] GET /api/tasks/project/4 304 19ms +[2025-12-29T19:14:24.890Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 9ms +[2025-12-29T19:14:24.900Z] [INFO] GET /api/notifications 304 4ms +[2025-12-29T19:14:24.871Z] [INFO] GET /api/labels/4 304 22ms +[2025-12-29T19:14:26.471Z] [INFO] GET /sw.js 200 4ms +[2025-12-29T19:14:26.490Z] [INFO] GET /index.html 304 2ms +[2025-12-29T19:14:26.489Z] [INFO] GET /css/variables.css 304 1ms +[2025-12-29T19:14:26.489Z] [INFO] GET / 304 2ms +[2025-12-29T19:14:26.496Z] [INFO] GET /css/base.css 304 1ms +[2025-12-29T19:14:26.497Z] [INFO] GET /css/components.css 304 2ms +[2025-12-29T19:14:26.505Z] [INFO] GET /css/calendar.css 304 1ms +[2025-12-29T19:14:26.498Z] [INFO] GET /css/board.css 304 2ms +[2025-12-29T19:14:26.506Z] [INFO] GET /css/modal.css 304 2ms +[2025-12-29T19:14:26.516Z] [INFO] GET /js/api.js 304 3ms +[2025-12-29T19:14:26.515Z] [INFO] GET /js/app.js 304 3ms +[2025-12-29T19:14:26.506Z] [INFO] GET /css/responsive.css 304 1ms +[2025-12-29T19:14:26.516Z] [INFO] GET /js/utils.js 304 4ms +[2025-12-29T19:14:26.543Z] [INFO] GET /js/store.js 304 22ms +[2025-12-29T19:14:26.550Z] [INFO] GET /js/offline.js 304 2ms +[2025-12-29T19:14:26.544Z] [INFO] GET /js/sync.js 304 23ms +[2025-12-29T19:14:26.544Z] [INFO] GET /js/auth.js 304 24ms +[2025-12-29T19:14:26.561Z] [INFO] GET /js/shortcuts.js 304 2ms +[2025-12-29T19:14:26.560Z] [INFO] GET /js/list.js 304 1ms +[2025-12-29T19:14:26.551Z] [INFO] GET /js/board.js 304 2ms +[2025-12-29T19:14:26.552Z] [INFO] GET /js/task-modal.js 304 3ms +[2025-12-29T19:14:26.561Z] [INFO] GET /js/calendar.js 304 2ms +[2025-12-29T19:14:26.576Z] [INFO] GET /js/undo.js 304 8ms +[2025-12-29T19:14:26.583Z] [INFO] GET /js/notifications.js 304 1ms +[2025-12-29T19:14:26.577Z] [INFO] GET /js/admin.js 304 9ms +[2025-12-29T19:14:26.577Z] [INFO] GET /js/tour.js 304 10ms +[2025-12-29T19:14:26.583Z] [INFO] GET /js/proposals.js 304 1ms +[2025-12-29T19:14:26.604Z] [INFO] GET /js/gitea.js 304 20ms +[2025-12-29T19:14:26.612Z] [INFO] GET /css/proposals.css 304 2ms +[2025-12-29T19:14:26.613Z] [INFO] GET /css/notifications.css 304 3ms +[2025-12-29T19:14:26.605Z] [INFO] GET /css/admin.css 304 16ms +[2025-12-29T19:14:26.604Z] [INFO] GET /css/list.css 304 15ms +[2025-12-29T19:14:26.613Z] [INFO] GET /css/gitea.css 304 1ms +[2025-12-29T19:14:39.112Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:15:04.257Z] [INFO] Backup erstellt: backup_2025-12-29T19-15-04-246Z.db +[2025-12-29T19:15:04.268Z] [INFO] Altes Backup gelöscht: backup_2025-12-22T12-41-59-725Z.db +[2025-12-29T19:15:04.270Z] [INFO] Fälligkeits-Check für Benachrichtigungen gestartet +[2025-12-29T19:15:09.045Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:15:38.969Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:16:08.893Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:16:38.815Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:17:08.734Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:17:24.037Z] [INFO] GET /api/applications/4 200 5ms +[2025-12-29T19:17:24.557Z] [INFO] GET /api/git/status/4 200 513ms +[2025-12-29T19:17:24.653Z] [INFO] GET /api/git/branches/4 200 94ms +[2025-12-29T19:17:24.759Z] [INFO] GET /api/git/commits/4?limit=10 200 106ms +[2025-12-29T19:17:30.367Z] [INFO] GET / 200 8ms +[2025-12-29T19:17:30.395Z] [INFO] GET /css/base.css 200 4ms +[2025-12-29T19:17:30.393Z] [INFO] GET /css/variables.css 200 3ms +[2025-12-29T19:17:30.381Z] [INFO] Socket disconnected: HG (0KDPR_hsXNq4lFGkAAAB) +[2025-12-29T19:17:30.398Z] [INFO] GET /css/components.css 200 6ms +[2025-12-29T19:17:30.409Z] [INFO] GET /css/list.css 200 13ms +[2025-12-29T19:17:30.412Z] [INFO] GET /css/modal.css 200 13ms +[2025-12-29T19:17:30.416Z] [INFO] GET /css/admin.css 200 18ms +[2025-12-29T19:17:30.406Z] [INFO] GET /css/board.css 200 9ms +[2025-12-29T19:17:30.417Z] [INFO] GET /css/proposals.css 200 17ms +[2025-12-29T19:17:30.436Z] [INFO] GET /css/notifications.css 200 23ms +[2025-12-29T19:17:30.436Z] [INFO] GET /css/gitea.css 200 21ms +[2025-12-29T19:17:30.456Z] [INFO] GET /css/responsive.css 200 37ms +[2025-12-29T19:17:30.435Z] [INFO] GET /css/calendar.css 200 30ms +[2025-12-29T19:17:30.457Z] [INFO] GET /js/app.js 200 31ms +[2025-12-29T19:17:30.520Z] [INFO] GET /js/board.js 200 7ms +[2025-12-29T19:17:30.519Z] [INFO] GET /js/auth.js 200 6ms +[2025-12-29T19:17:30.512Z] [INFO] GET /js/store.js 200 3ms +[2025-12-29T19:17:30.519Z] [INFO] GET /js/api.js 200 7ms +[2025-12-29T19:17:30.522Z] [INFO] GET /js/offline.js 200 8ms +[2025-12-29T19:17:30.525Z] [INFO] GET /js/task-modal.js 200 9ms +[2025-12-29T19:17:30.522Z] [INFO] GET /js/sync.js 200 8ms +[2025-12-29T19:17:30.548Z] [INFO] GET /js/calendar.js 200 20ms +[2025-12-29T19:17:30.551Z] [INFO] GET /js/shortcuts.js 200 23ms +[2025-12-29T19:17:30.553Z] [INFO] GET /js/undo.js 200 25ms +[2025-12-29T19:17:30.554Z] [INFO] GET /js/admin.js 200 25ms +[2025-12-29T19:17:30.553Z] [INFO] GET /js/list.js 200 24ms +[2025-12-29T19:17:30.555Z] [INFO] GET /js/proposals.js 200 25ms +[2025-12-29T19:17:30.578Z] [INFO] GET /js/notifications.js 200 23ms +[2025-12-29T19:17:30.579Z] [INFO] GET /js/utils.js 200 22ms +[2025-12-29T19:17:30.578Z] [INFO] GET /js/gitea.js 200 23ms +[2025-12-29T19:17:30.625Z] [INFO] GET /api/auth/users 200 5ms +[2025-12-29T19:17:30.627Z] [INFO] GET /assets/icons/task.svg 200 8ms +[2025-12-29T19:17:30.642Z] [INFO] GET /api/auth/users 304 5ms +[2025-12-29T19:17:30.648Z] [INFO] Socket connected: HG (SBl_TOuyLp5B7BWvAAAD) +[2025-12-29T19:17:30.657Z] [INFO] GET /api/projects 200 6ms +[2025-12-29T19:17:30.681Z] [INFO] GET /api/tasks/project/4 200 13ms +[2025-12-29T19:17:30.677Z] [INFO] GET /api/columns/4 200 9ms +[2025-12-29T19:17:30.687Z] [INFO] GET /api/labels/4 200 19ms +[2025-12-29T19:17:30.674Z] [INFO] GET /api/stats/dashboard?projectId=4 200 7ms +[2025-12-29T19:17:30.705Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:17:30.700Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 200 3ms +[2025-12-29T19:17:30.711Z] [INFO] GET /api/notifications 200 4ms +[2025-12-29T19:17:31.424Z] [INFO] GET /api/applications/4 304 3ms +[2025-12-29T19:17:31.903Z] [INFO] GET /api/git/status/4 304 471ms +[2025-12-29T19:17:32.007Z] [INFO] GET /api/git/branches/4 304 575ms +[2025-12-29T19:17:32.106Z] [INFO] GET /api/git/commits/4?limit=10 304 672ms +[2025-12-29T19:17:32.280Z] [INFO] GET /sw.js 200 5ms +[2025-12-29T19:17:38.651Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:18:08.563Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:18:38.496Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:19:08.423Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:19:38.306Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:20:08.232Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:20:25.885Z] [INFO] CSRF: Token missing or not stored for user 1, generated new token +[2025-12-29T19:20:25.886Z] [INFO] POST /api/git/commit/4 403 5ms