Commit-Ausblendung (für UI) implementiert

Dieser Commit ist enthalten in:
HG
2025-12-29 19:52:35 +00:00
committet von Claude Project Manager
Ursprung dad07c7879
Commit 50da44aabc
11 geänderte Dateien mit 352 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -1,6 +1,30 @@
TASKMATE - CHANGELOG 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 29.12.2025 - Gitea: Commit-Autor = eingeloggter Benutzer
================================================================================ ================================================================================

Binäre Datei nicht angezeigt.

Binäre Datei nicht angezeigt.

Binäre Datei nicht angezeigt.

Datei anzeigen

@ -391,6 +391,19 @@
COMMITS PANEL 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 { .gitea-commits-panel h3 {
margin: 0 0 var(--spacing-3) 0; margin: 0 0 var(--spacing-3) 0;
font-size: var(--text-base); font-size: var(--text-base);
@ -452,6 +465,32 @@
color: var(--text-secondary); 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 EMPTY STATE
============================================================================= */ ============================================================================= */

Datei anzeigen

@ -659,7 +659,12 @@
<!-- Commit-Historie --> <!-- Commit-Historie -->
<div id="gitea-commits-section" class="gitea-commits-panel"> <div id="gitea-commits-section" class="gitea-commits-panel">
<h3>Letzte Commits</h3> <div class="commits-header">
<h3>Letzte Commits</h3>
<button id="btn-clear-commits" class="btn btn-small btn-secondary" title="Alle aus Anzeige entfernen">
Alle ausblenden
</button>
</div>
<div id="git-commits-list" class="commits-list"> <div id="git-commits-list" class="commits-list">
<!-- Dynamisch gefüllt --> <!-- Dynamisch gefüllt -->
</div> </div>

Datei anzeigen

@ -19,6 +19,7 @@ class GiteaManager {
this.initialized = false; this.initialized = false;
this.refreshInterval = null; this.refreshInterval = null;
this.isLoading = false; this.isLoading = false;
this.hiddenCommits = new Set(); // Ausgeblendete Commits
} }
async init() { async init() {
@ -79,6 +80,10 @@ class GiteaManager {
// Branch umbenennen // Branch umbenennen
$('#btn-rename-branch')?.addEventListener('click', () => this.openRenameBranchModal()); $('#btn-rename-branch')?.addEventListener('click', () => this.openRenameBranchModal());
$('#git-rename-branch-form')?.addEventListener('submit', (e) => this.executeRenameBranch(e)); $('#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() { subscribeToStore() {
@ -775,24 +780,73 @@ class GiteaManager {
renderCommits() { renderCommits() {
const listEl = $('#git-commits-list'); const listEl = $('#git-commits-list');
const clearBtn = $('#btn-clear-commits');
if (!listEl) return; if (!listEl) return;
if (this.commits.length === 0) { // Filtern: Ausgeblendete Commits nicht anzeigen
listEl.innerHTML = '<div class="gitea-empty-state" style="padding: var(--spacing-4);"><p>Keine Commits gefunden</p></div>'; 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 = `<div class="gitea-empty-state" style="padding: var(--spacing-4);"><p>${message}</p></div>`;
return; return;
} }
listEl.innerHTML = this.commits.map(commit => ` listEl.innerHTML = visibleCommits.map(commit => {
<div class="commit-item"> const hash = commit.hash || commit.sha || '';
<span class="commit-hash">${escapeHtml(commit.shortHash || commit.sha?.substring(0, 7))}</span> const shortHash = commit.shortHash || hash.substring(0, 7);
return `
<div class="commit-item" data-hash="${escapeHtml(hash)}">
<span class="commit-hash">${escapeHtml(shortHash)}</span>
<div class="commit-info"> <div class="commit-info">
<div class="commit-message">${escapeHtml(commit.message?.split('\n')[0] || '')}</div> <div class="commit-message">${escapeHtml(commit.message?.split('\n')[0] || '')}</div>
<div class="commit-meta"> <div class="commit-meta">
<span class="author">${escapeHtml(commit.author)}</span> · ${this.formatDate(commit.date)} <span class="author">${escapeHtml(commit.author)}</span> · ${this.formatDate(commit.date)}
</div> </div>
</div> </div>
<button class="commit-delete" title="Ausblenden" data-hash="${escapeHtml(hash)}">
<svg viewBox="0 0 24 24" width="16" height="16"><path d="M18 6L6 18M6 6l12 12" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/></svg>
</button>
</div> </div>
`).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() { renderChanges() {

Datei anzeigen

@ -4,7 +4,7 @@
* Offline support and caching * Offline support and caching
*/ */
const CACHE_VERSION = '124'; const CACHE_VERSION = '125';
const CACHE_NAME = 'taskmate-v' + CACHE_VERSION; const CACHE_NAME = 'taskmate-v' + CACHE_VERSION;
const STATIC_CACHE_NAME = 'taskmate-static-v' + CACHE_VERSION; const STATIC_CACHE_NAME = 'taskmate-static-v' + CACHE_VERSION;
const DYNAMIC_CACHE_NAME = 'taskmate-dynamic-v' + CACHE_VERSION; const DYNAMIC_CACHE_NAME = 'taskmate-dynamic-v' + CACHE_VERSION;

Datei anzeigen

@ -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: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.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:25.886Z] [INFO] POST /api/git/commit/4 403 5ms
[2025-12-29T19:20:26.358Z] [INFO] Commit mit Autor: HG <hg@taskmate.local>
[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