diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 8ae77d8..7c246cb 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,6 +1,30 @@
TASKMATE - CHANGELOG
====================
+================================================================================
+29.12.2025 - Gitea: Commits aus Anzeige ausblenden
+================================================================================
+
+FEATURE: COMMITS AUS ANZEIGE ENTFERNEN
+--------------------------------------------------------------------------------
+- X-Button bei jedem Commit zum Ausblenden (erscheint bei Hover)
+- "Alle ausblenden" Button in der Überschrift
+- Ausgeblendete Commits werden nur aus der UI entfernt, nicht aus Git
+- Anzeige zeigt "Alle Commits ausgeblendet" wenn Liste leer
+
+ÄNDERUNGEN
+--------------------------------------------------------------------------------
+- frontend/index.html: Commits-Header mit "Alle ausblenden" Button
+- frontend/css/gitea.css:
+ * .commits-header Style für Überschrift mit Button
+ * .commit-delete Button-Style (erscheint bei Hover)
+- frontend/js/gitea.js:
+ * hiddenCommits Set im Constructor
+ * renderCommits() filtert ausgeblendete Commits
+ * handleCommitListClick() für Event-Delegation
+ * hideCommit(), clearAllCommits() Methoden
+- frontend/sw.js: Cache-Version auf 125 erhöht
+
================================================================================
29.12.2025 - Gitea: Commit-Autor = eingeloggter Benutzer
================================================================================
diff --git a/backups/backup_2025-12-22T19-54-01-136Z.db-wal b/backups/backup_2025-12-22T19-54-01-136Z.db-wal
deleted file mode 100644
index 7373ca4..0000000
Binary files a/backups/backup_2025-12-22T19-54-01-136Z.db-wal and /dev/null differ
diff --git a/backups/backup_2025-12-22T19-54-01-136Z.db b/backups/backup_2025-12-29T19-30-20-564Z.db
similarity index 77%
rename from backups/backup_2025-12-22T19-54-01-136Z.db
rename to backups/backup_2025-12-29T19-30-20-564Z.db
index 0fdc965..dfdeb0e 100644
Binary files a/backups/backup_2025-12-22T19-54-01-136Z.db and b/backups/backup_2025-12-29T19-30-20-564Z.db differ
diff --git a/backups/backup_2025-12-29T19-30-20-564Z.db-wal b/backups/backup_2025-12-29T19-30-20-564Z.db-wal
new file mode 100644
index 0000000..4f0f992
Binary files /dev/null and b/backups/backup_2025-12-29T19-30-20-564Z.db-wal differ
diff --git a/data/taskmate.db-shm b/data/taskmate.db-shm
index fe9ac28..4b65144 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 e69de29..4f0f992 100644
Binary files a/data/taskmate.db-wal and b/data/taskmate.db-wal differ
diff --git a/frontend/css/gitea.css b/frontend/css/gitea.css
index 73cfdb4..c027cdf 100644
--- a/frontend/css/gitea.css
+++ b/frontend/css/gitea.css
@@ -391,6 +391,19 @@
COMMITS PANEL
============================================================================= */
+.commits-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: var(--spacing-3);
+}
+
+.commits-header h3 {
+ margin: 0;
+ font-size: var(--text-base);
+ color: var(--text-primary);
+}
+
.gitea-commits-panel h3 {
margin: 0 0 var(--spacing-3) 0;
font-size: var(--text-base);
@@ -452,6 +465,32 @@
color: var(--text-secondary);
}
+.commit-delete {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 24px;
+ height: 24px;
+ border: none;
+ background: transparent;
+ color: var(--text-tertiary);
+ cursor: pointer;
+ border-radius: var(--radius-sm);
+ opacity: 0;
+ transition: opacity 0.15s, color 0.15s, background 0.15s;
+ flex-shrink: 0;
+ align-self: center;
+}
+
+.commit-item:hover .commit-delete {
+ opacity: 1;
+}
+
+.commit-delete:hover {
+ color: var(--error);
+ background: rgba(239, 68, 68, 0.1);
+}
+
/* =============================================================================
EMPTY STATE
============================================================================= */
diff --git a/frontend/index.html b/frontend/index.html
index 431c872..88310d9 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -659,7 +659,12 @@
-
Letzte Commits
+
diff --git a/frontend/js/gitea.js b/frontend/js/gitea.js
index a7b81d3..decf542 100644
--- a/frontend/js/gitea.js
+++ b/frontend/js/gitea.js
@@ -19,6 +19,7 @@ class GiteaManager {
this.initialized = false;
this.refreshInterval = null;
this.isLoading = false;
+ this.hiddenCommits = new Set(); // Ausgeblendete Commits
}
async init() {
@@ -79,6 +80,10 @@ class GiteaManager {
// Branch umbenennen
$('#btn-rename-branch')?.addEventListener('click', () => this.openRenameBranchModal());
$('#git-rename-branch-form')?.addEventListener('submit', (e) => this.executeRenameBranch(e));
+
+ // Commits ausblenden
+ $('#btn-clear-commits')?.addEventListener('click', () => this.clearAllCommits());
+ $('#git-commits-list')?.addEventListener('click', (e) => this.handleCommitListClick(e));
}
subscribeToStore() {
@@ -775,24 +780,73 @@ class GiteaManager {
renderCommits() {
const listEl = $('#git-commits-list');
+ const clearBtn = $('#btn-clear-commits');
if (!listEl) return;
- if (this.commits.length === 0) {
- listEl.innerHTML = '
';
+ // Filtern: Ausgeblendete Commits nicht anzeigen
+ const visibleCommits = this.commits.filter(commit => {
+ const hash = commit.hash || commit.sha || commit.shortHash;
+ return !this.hiddenCommits.has(hash);
+ });
+
+ // Button-Text anpassen
+ if (clearBtn) {
+ clearBtn.style.display = visibleCommits.length > 0 ? '' : 'none';
+ }
+
+ if (visibleCommits.length === 0) {
+ const message = this.commits.length > 0
+ ? 'Alle Commits ausgeblendet'
+ : 'Keine Commits gefunden';
+ listEl.innerHTML = `
`;
return;
}
- listEl.innerHTML = this.commits.map(commit => `
-
-
${escapeHtml(commit.shortHash || commit.sha?.substring(0, 7))}
+ listEl.innerHTML = visibleCommits.map(commit => {
+ const hash = commit.hash || commit.sha || '';
+ const shortHash = commit.shortHash || hash.substring(0, 7);
+ return `
+
+
${escapeHtml(shortHash)}
${escapeHtml(commit.message?.split('\n')[0] || '')}
${escapeHtml(commit.author)} · ${this.formatDate(commit.date)}
+
- `).join('');
+ `}).join('');
+ }
+
+ handleCommitListClick(e) {
+ const deleteBtn = e.target.closest('.commit-delete');
+ if (deleteBtn) {
+ const hash = deleteBtn.dataset.hash;
+ if (hash) {
+ this.hideCommit(hash);
+ }
+ }
+ }
+
+ hideCommit(hash) {
+ this.hiddenCommits.add(hash);
+ this.renderCommits();
+ this.showToast('Commit ausgeblendet', 'info');
+ }
+
+ clearAllCommits() {
+ // Alle sichtbaren Commits ausblenden
+ this.commits.forEach(commit => {
+ const hash = commit.hash || commit.sha || commit.shortHash;
+ if (hash) {
+ this.hiddenCommits.add(hash);
+ }
+ });
+ this.renderCommits();
+ this.showToast('Alle Commits ausgeblendet', 'info');
}
renderChanges() {
diff --git a/frontend/sw.js b/frontend/sw.js
index f6bc174..42f66a3 100644
--- a/frontend/sw.js
+++ b/frontend/sw.js
@@ -4,7 +4,7 @@
* Offline support and caching
*/
-const CACHE_VERSION = '124';
+const CACHE_VERSION = '125';
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 2bb1032..35bfee4 100644
--- a/logs/app.log
+++ b/logs/app.log
@@ -33265,3 +33265,225 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
[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
+[2025-12-29T19:20:26.358Z] [INFO] Commit mit Autor: HG
+[2025-12-29T19:20:27.316Z] [INFO] POST /api/git/commit/4 200 1425ms
+[2025-12-29T19:20:27.832Z] [INFO] GET /api/git/status/4 200 510ms
+[2025-12-29T19:20:27.952Z] [INFO] GET /api/git/branches/4 304 119ms
+[2025-12-29T19:20:28.055Z] [INFO] GET /api/git/commits/4?limit=10 200 102ms
+[2025-12-29T19:20:38.170Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:21:08.088Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:21:35.656Z] [INFO] POST /api/git/push/4 200 2395ms
+[2025-12-29T19:21:36.140Z] [INFO] GET /api/git/status/4 200 477ms
+[2025-12-29T19:21:36.227Z] [INFO] GET /api/git/branches/4 304 86ms
+[2025-12-29T19:21:36.317Z] [INFO] GET /api/git/commits/4?limit=10 304 89ms
+[2025-12-29T19:21:38.001Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:22:07.921Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:22:37.844Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:23:07.716Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:23:37.640Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:24:07.579Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:24:37.087Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:25:07.038Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:25:32.215Z] [INFO] GET / 304 0ms
+[2025-12-29T19:25:32.223Z] [INFO] Socket disconnected: HG (SBl_TOuyLp5B7BWvAAAD)
+[2025-12-29T19:25:32.240Z] [INFO] GET /css/variables.css 304 0ms
+[2025-12-29T19:25:32.242Z] [INFO] GET /css/board.css 304 1ms
+[2025-12-29T19:25:32.244Z] [INFO] GET /css/base.css 304 1ms
+[2025-12-29T19:25:32.244Z] [INFO] GET /css/list.css 304 1ms
+[2025-12-29T19:25:32.265Z] [INFO] GET /css/admin.css 304 13ms
+[2025-12-29T19:25:32.263Z] [INFO] GET /css/proposals.css 304 18ms
+[2025-12-29T19:25:32.264Z] [INFO] GET /css/notifications.css 304 18ms
+[2025-12-29T19:25:32.264Z] [INFO] GET /css/components.css 304 19ms
+[2025-12-29T19:25:32.265Z] [INFO] GET /css/modal.css 304 17ms
+[2025-12-29T19:25:32.265Z] [INFO] GET /css/calendar.css 304 13ms
+[2025-12-29T19:25:32.287Z] [INFO] GET /css/responsive.css 304 21ms
+[2025-12-29T19:25:32.287Z] [INFO] GET /css/gitea.css 304 21ms
+[2025-12-29T19:25:32.288Z] [INFO] GET /js/app.js 304 21ms
+[2025-12-29T19:25:32.313Z] [INFO] GET /js/store.js 304 4ms
+[2025-12-29T19:25:32.314Z] [INFO] GET /js/api.js 304 5ms
+[2025-12-29T19:25:32.314Z] [INFO] GET /js/sync.js 304 4ms
+[2025-12-29T19:25:32.314Z] [INFO] GET /js/auth.js 304 4ms
+[2025-12-29T19:25:32.315Z] [INFO] GET /js/offline.js 304 4ms
+[2025-12-29T19:25:32.315Z] [INFO] GET /js/board.js 304 3ms
+[2025-12-29T19:25:32.348Z] [INFO] GET /js/calendar.js 304 33ms
+[2025-12-29T19:25:32.348Z] [INFO] GET /js/list.js 304 32ms
+[2025-12-29T19:25:32.349Z] [INFO] GET /js/shortcuts.js 304 33ms
+[2025-12-29T19:25:32.349Z] [INFO] GET /js/task-modal.js 304 33ms
+[2025-12-29T19:25:32.350Z] [INFO] GET /js/undo.js 304 34ms
+[2025-12-29T19:25:32.364Z] [INFO] GET /js/proposals.js 304 14ms
+[2025-12-29T19:25:32.365Z] [INFO] GET /js/notifications.js 304 15ms
+[2025-12-29T19:25:32.349Z] [INFO] GET /js/admin.js 304 32ms
+[2025-12-29T19:25:32.366Z] [INFO] GET /js/gitea.js 304 15ms
+[2025-12-29T19:25:32.366Z] [INFO] GET /js/utils.js 304 15ms
+[2025-12-29T19:25:32.404Z] [INFO] GET /assets/icons/task.svg 304 5ms
+[2025-12-29T19:25:32.404Z] [INFO] GET /api/auth/users 401 5ms
+[2025-12-29T19:25:33.885Z] [INFO] GET /sw.js 304 1ms
+[2025-12-29T19:25:36.953Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:25:37.493Z] [INFO] Login erfolgreich: hendrik_gebhardt@gmx.de
+[2025-12-29T19:25:37.494Z] [INFO] POST /api/auth/login 200 263ms
+[2025-12-29T19:25:37.518Z] [INFO] Socket connected: HG (rSVvS2Q1wUzOL2XNAAAG)
+[2025-12-29T19:25:37.509Z] [INFO] GET /api/auth/users 304 5ms
+[2025-12-29T19:25:37.521Z] [INFO] Socket connected: HG (nx3DzRtMh6-KdkM2AAAH)
+[2025-12-29T19:25:37.543Z] [INFO] GET /api/columns/4 304 8ms
+[2025-12-29T19:25:37.540Z] [INFO] GET /api/stats/dashboard?projectId=4 304 5ms
+[2025-12-29T19:25:37.526Z] [INFO] GET /api/projects 304 3ms
+[2025-12-29T19:25:37.532Z] [INFO] HG joined project:[object Object]
+[2025-12-29T19:25:37.548Z] [INFO] GET /api/tasks/project/4 304 12ms
+[2025-12-29T19:25:37.552Z] [INFO] GET /api/labels/4 304 16ms
+[2025-12-29T19:25:37.563Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 3ms
+[2025-12-29T19:25:37.573Z] [INFO] GET /api/notifications 304 3ms
+[2025-12-29T19:25:38.966Z] [INFO] GET /api/applications/4 200 3ms
+[2025-12-29T19:25:39.560Z] [INFO] GET /api/git/branches/4 304 588ms
+[2025-12-29T19:25:39.469Z] [INFO] GET /api/git/status/4 200 497ms
+[2025-12-29T19:25:39.647Z] [INFO] GET /api/git/commits/4?limit=10 304 674ms
+[2025-12-29T19:26:06.476Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:26:36.010Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:27:05.543Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:27:35.094Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:28:04.637Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:28:23.755Z] [INFO] SIGTERM empfangen, fahre herunter...
+[2025-12-29T19:29:21.591Z] [ERROR] Fehler beim Abrufen der Upload-Einstellungen:
+[2025-12-29T19:29:21.674Z] [INFO] Datenbank-Tabellen erstellt
+[2025-12-29T19:29:21.677Z] [INFO] Datenbank initialisiert
+[2025-12-29T19:29:21.680Z] [INFO] Umgebung: production
+[2025-12-29T19:29:21.680Z] [INFO] Server läuft auf Port 3000
+[2025-12-29T19:29:21.681Z] [INFO] Backup-Scheduler gestartet (alle 24 Stunden)
+[2025-12-29T19:29:21.681Z] [INFO] Automatische Backups aktiviert
+[2025-12-29T19:29:26.334Z] [INFO] GET /api/health 200 7ms
+[2025-12-29T19:29:26.809Z] [INFO] Socket connected: HG (VOKhbUt8p5y14j9pAAAB)
+[2025-12-29T19:29:26.823Z] [INFO] HG joined project:[object Object]
+[2025-12-29T19:29:31.009Z] [INFO] Socket connected: HG (wdUe3wl2kLUaKfuoAAAD)
+[2025-12-29T19:29:31.019Z] [INFO] HG joined project:[object Object]
+[2025-12-29T19:29:48.799Z] [INFO] GET / 200 5ms
+[2025-12-29T19:29:48.836Z] [INFO] GET /css/variables.css 304 1ms
+[2025-12-29T19:29:48.852Z] [INFO] GET /css/modal.css 304 0ms
+[2025-12-29T19:29:48.842Z] [INFO] GET /css/base.css 304 1ms
+[2025-12-29T19:29:48.855Z] [INFO] GET /css/proposals.css 304 2ms
+[2025-12-29T19:29:48.850Z] [INFO] GET /css/admin.css 304 4ms
+[2025-12-29T19:29:48.886Z] [INFO] GET /css/responsive.css 304 21ms
+[2025-12-29T19:29:48.884Z] [INFO] GET /css/notifications.css 304 23ms
+[2025-12-29T19:29:48.885Z] [INFO] GET /css/list.css 304 22ms
+[2025-12-29T19:29:48.856Z] [INFO] GET /css/calendar.css 304 1ms
+[2025-12-29T19:29:48.887Z] [INFO] GET /css/components.css 304 15ms
+[2025-12-29T19:29:48.890Z] [INFO] GET /css/board.css 304 21ms
+[2025-12-29T19:29:48.946Z] [INFO] GET /css/gitea.css 200 80ms
+[2025-12-29T19:29:48.940Z] [INFO] GET /js/app.js 304 49ms
+[2025-12-29T19:29:48.999Z] [INFO] GET /js/auth.js 304 17ms
+[2025-12-29T19:29:49.001Z] [INFO] GET /js/api.js 304 25ms
+[2025-12-29T19:29:49.002Z] [INFO] GET /js/sync.js 304 19ms
+[2025-12-29T19:29:49.004Z] [INFO] GET /js/offline.js 304 20ms
+[2025-12-29T19:29:49.007Z] [INFO] GET /js/board.js 304 22ms
+[2025-12-29T19:29:49.042Z] [INFO] GET /js/calendar.js 304 32ms
+[2025-12-29T19:29:49.041Z] [INFO] GET /js/task-modal.js 304 31ms
+[2025-12-29T19:29:49.042Z] [INFO] GET /js/list.js 304 32ms
+[2025-12-29T19:29:48.996Z] [INFO] GET /js/store.js 304 19ms
+[2025-12-29T19:29:49.044Z] [INFO] GET /js/admin.js 304 33ms
+[2025-12-29T19:29:49.043Z] [INFO] GET /js/undo.js 304 32ms
+[2025-12-29T19:29:49.043Z] [INFO] GET /js/shortcuts.js 304 32ms
+[2025-12-29T19:29:49.099Z] [INFO] GET /js/notifications.js 304 54ms
+[2025-12-29T19:29:49.099Z] [INFO] GET /js/utils.js 304 52ms
+[2025-12-29T19:29:49.098Z] [INFO] GET /js/proposals.js 304 53ms
+[2025-12-29T19:29:49.104Z] [INFO] GET /js/gitea.js 200 59ms
+[2025-12-29T19:29:49.162Z] [INFO] GET /api/auth/users 304 8ms
+[2025-12-29T19:29:49.169Z] [INFO] GET /assets/icons/task.svg 200 6ms
+[2025-12-29T19:29:49.180Z] [INFO] GET /api/auth/users 304 4ms
+[2025-12-29T19:29:49.203Z] [INFO] Socket connected: HG (WLX8rFFdGcDBaqlzAAAF)
+[2025-12-29T19:29:49.215Z] [INFO] GET /api/projects 304 10ms
+[2025-12-29T19:29:49.233Z] [INFO] HG joined project:[object Object]
+[2025-12-29T19:29:49.248Z] [INFO] GET /api/stats/dashboard?projectId=4 304 13ms
+[2025-12-29T19:29:49.252Z] [INFO] GET /api/columns/4 304 17ms
+[2025-12-29T19:29:49.258Z] [INFO] GET /api/labels/4 304 22ms
+[2025-12-29T19:29:49.261Z] [INFO] GET /api/tasks/project/4 304 25ms
+[2025-12-29T19:29:49.302Z] [INFO] GET /api/notifications 304 7ms
+[2025-12-29T19:29:49.282Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 9ms
+[2025-12-29T19:29:50.856Z] [INFO] GET /sw.js 200 7ms
+[2025-12-29T19:29:50.878Z] [INFO] GET / 304 2ms
+[2025-12-29T19:29:50.881Z] [INFO] GET /css/variables.css 304 4ms
+[2025-12-29T19:29:50.883Z] [INFO] GET /index.html 200 6ms
+[2025-12-29T19:29:50.886Z] [INFO] GET /css/components.css 304 0ms
+[2025-12-29T19:29:50.885Z] [INFO] GET /css/base.css 304 0ms
+[2025-12-29T19:29:50.899Z] [INFO] GET /css/modal.css 304 1ms
+[2025-12-29T19:29:50.887Z] [INFO] GET /css/board.css 304 0ms
+[2025-12-29T19:29:50.900Z] [INFO] GET /css/calendar.css 304 1ms
+[2025-12-29T19:29:50.900Z] [INFO] GET /css/responsive.css 304 1ms
+[2025-12-29T19:29:50.913Z] [INFO] GET /js/app.js 304 9ms
+[2025-12-29T19:29:50.913Z] [INFO] GET /js/utils.js 304 9ms
+[2025-12-29T19:29:50.914Z] [INFO] GET /js/api.js 304 9ms
+[2025-12-29T19:29:50.938Z] [INFO] GET /js/sync.js 304 16ms
+[2025-12-29T19:29:50.938Z] [INFO] GET /js/store.js 304 17ms
+[2025-12-29T19:29:50.937Z] [INFO] GET /js/auth.js 304 16ms
+[2025-12-29T19:29:50.948Z] [INFO] GET /js/board.js 304 1ms
+[2025-12-29T19:29:50.949Z] [INFO] GET /js/task-modal.js 304 1ms
+[2025-12-29T19:29:50.949Z] [INFO] GET /js/offline.js 304 1ms
+[2025-12-29T19:29:50.991Z] [INFO] GET /js/list.js 304 29ms
+[2025-12-29T19:29:50.990Z] [INFO] GET /js/calendar.js 304 28ms
+[2025-12-29T19:29:50.991Z] [INFO] GET /js/shortcuts.js 304 28ms
+[2025-12-29T19:29:51.036Z] [INFO] GET /js/tour.js 200 36ms
+[2025-12-29T19:29:51.038Z] [INFO] GET /js/proposals.js 304 0ms
+[2025-12-29T19:29:51.033Z] [INFO] GET /js/admin.js 304 32ms
+[2025-12-29T19:29:51.031Z] [INFO] GET /js/undo.js 304 35ms
+[2025-12-29T19:29:51.092Z] [INFO] GET /css/admin.css 304 2ms
+[2025-12-29T19:29:51.081Z] [INFO] GET /js/notifications.js 304 40ms
+[2025-12-29T19:29:51.080Z] [INFO] GET /js/gitea.js 304 33ms
+[2025-12-29T19:29:51.082Z] [INFO] GET /css/list.css 304 34ms
+[2025-12-29T19:29:51.093Z] [INFO] GET /css/proposals.css 304 2ms
+[2025-12-29T19:29:51.107Z] [INFO] GET /css/gitea.css 304 7ms
+[2025-12-29T19:29:51.092Z] [INFO] GET /css/notifications.css 304 1ms
+[2025-12-29T19:29:55.963Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:30:20.586Z] [INFO] Backup erstellt: backup_2025-12-29T19-30-20-564Z.db
+[2025-12-29T19:30:20.594Z] [INFO] Altes Backup gelöscht: backup_2025-12-22T19-54-01-136Z.db
+[2025-12-29T19:30:20.601Z] [INFO] Fälligkeits-Check für Benachrichtigungen gestartet
+[2025-12-29T19:30:25.515Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:30:55.018Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:31:24.576Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:31:53.968Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:32:23.509Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:32:52.954Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:33:22.389Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:33:51.920Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:34:21.306Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:34:50.200Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:35:19.652Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:35:49.096Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:36:18.493Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:36:47.938Z] [INFO] GET /api/health 200 6ms
+[2025-12-29T19:37:17.376Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:37:46.806Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:38:16.246Z] [INFO] GET /api/health 200 4ms
+[2025-12-29T19:38:45.667Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:39:15.056Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:39:44.500Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:40:13.943Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:40:43.402Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:41:12.846Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:41:42.287Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:42:11.718Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:42:41.075Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:43:10.518Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:43:39.949Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:44:09.375Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:44:38.799Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:45:08.198Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:45:37.621Z] [INFO] GET /api/health 200 2ms
+[2025-12-29T19:46:07.021Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:46:36.422Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:47:05.826Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:47:35.221Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:48:04.574Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:48:33.961Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:49:03.354Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:49:32.743Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:50:02.132Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:50:31.491Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:51:00.904Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:51:10.140Z] [INFO] GET /api/applications/4 304 10ms
+[2025-12-29T19:51:10.824Z] [INFO] GET /api/git/status/4 200 677ms
+[2025-12-29T19:51:10.984Z] [INFO] GET /api/git/branches/4 304 159ms
+[2025-12-29T19:51:11.087Z] [INFO] GET /api/git/commits/4?limit=10 304 102ms
+[2025-12-29T19:51:23.922Z] [INFO] Socket disconnected: HG (VOKhbUt8p5y14j9pAAAB)
+[2025-12-29T19:51:23.925Z] [INFO] Socket disconnected: HG (wdUe3wl2kLUaKfuoAAAD)
+[2025-12-29T19:51:30.247Z] [INFO] GET /api/health 200 0ms
+[2025-12-29T19:51:59.618Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:52:29.002Z] [INFO] GET /api/health 200 1ms
+[2025-12-29T19:52:34.672Z] [INFO] CSRF: Token missing or not stored for user 1, generated new token
+[2025-12-29T19:52:34.673Z] [INFO] POST /api/git/commit/4 403 5ms