@dpesch/mantisbt-mcp-server 1.5.1 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.de.md +10 -3
- package/README.md +10 -3
- package/dist/config.js +8 -0
- package/dist/index.js +17 -4
- package/dist/tools/files.js +9 -2
- package/dist/tools/issues.js +25 -1
- package/package.json +4 -4
- package/scripts/hooks/pre-push.mjs +195 -0
- package/scripts/init.mjs +95 -0
- package/tests/config.test.ts +69 -0
- package/tests/tools/files.test.ts +71 -1
- package/tests/tools/issues.test.ts +52 -0
- package/.env.local +0 -3
- package/tests/fixtures/recorded/get_current_user.json +0 -108
- package/tests/fixtures/recorded/get_issue.json +0 -138
- package/tests/fixtures/recorded/get_issue_enums.json +0 -67
- package/tests/fixtures/recorded/get_issue_fields_sample.json +0 -138
- package/tests/fixtures/recorded/get_project_categories.json +0 -241
- package/tests/fixtures/recorded/get_project_versions.json +0 -28
- package/tests/fixtures/recorded/list_issues.json +0 -463
- package/tests/fixtures/recorded/list_projects.json +0 -10641
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"issues": [
|
|
3
|
-
{
|
|
4
|
-
"id": 7860,
|
|
5
|
-
"summary": "sync_metadata befüllt Kategorien und Tags nicht im Cache",
|
|
6
|
-
"description": "## Was ist passiert?\n`/mantis-sync` zeigt für alle Projekte \"Kategorien: 0\" und \"Tags: 0\" an, obwohl in Mantis Kategorien und Tags vorhanden sind.\n\nDirektaufruf von `get_project_categories(project_id: 25)` liefert 9 Kategorien für \"11com7 GmbH\" — der Cache enthält jedoch ein leeres `categories: []`. Tags fehlen im Cache-Root vollständig (kein `tags`-Key vorhanden).\n\n## Betroffene Komponente\n- Skill: `/mantis-sync`\n- Helper: `~/.claude/helpers/mantis-metadata-summary.js`\n- Externer Dependency: `mantisbt-mcp` Server, Tool `sync_metadata`\n- Plattform: beide\n\n## Ursachenanalyse\n`sync_metadata` im mantisbt-mcp-Server befüllt `byProject[id].categories` nicht — das Feld existiert im Schema, enthält aber immer `[]`. Der `tags`-Key wird auf Root-Ebene gar nicht angelegt.\n\nDas Summary-Script liest bereits korrekt:\n- `pd.categories || proj.categories || []` → bekommt immer `[]`\n- `metadata.tags || []` → bekommt immer `[]` (Key fehlt im Cache)\n\n## Lösungsansätze\n1. **mantisbt-mcp `sync_metadata` erweitern (bevorzugt):**\n - Für jedes Projekt `get_project_categories(project_id)` aufrufen und Ergebnis in `byProject[id].categories` speichern\n - `list_tags()` einmalig aufrufen und als `tags: [...]` auf Root-Ebene speichern\n2. **Workaround im /mantis-sync-Skill:** Kategorien und Tags per Direkt-API-Aufruf nachladen — unabhängig vom MCP-Server, aber teurer.\n\n## So reproduzierbar\n1. `/mantis-sync` ausführen\n2. Alle Projekte zeigen \"0\" in der Kategorien-Spalte, Fußzeile \"0 Tags\"\n3. Kontrollaufruf: `get_project_categories(project_id: 25)` → 9 Kategorien\n\n## Hinweise zur Umsetzung\n- `mantis-metadata-summary.js` muss NICHT geändert werden — liest bereits korrekt\n- Kategorien sind projektspezifisch → Sync muss über alle Projekte iterieren (erhöhter API-Aufwand)\n- Tags sind global → ein einzelner `list_tags()`-Aufruf reicht\n- Nach MCP-Server-Fix: `sync_metadata()` neu ausführen und Cache prüfen",
|
|
7
|
-
"project": {
|
|
8
|
-
"id": 54,
|
|
9
|
-
"name": "11com7 Claude MetaRepo"
|
|
10
|
-
},
|
|
11
|
-
"category": {
|
|
12
|
-
"id": 393,
|
|
13
|
-
"name": "Skills"
|
|
14
|
-
},
|
|
15
|
-
"reporter": {
|
|
16
|
-
"id": 51,
|
|
17
|
-
"name": "domAgent",
|
|
18
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
19
|
-
"email": "d.pesch+agent@11com7.de"
|
|
20
|
-
},
|
|
21
|
-
"handler": {
|
|
22
|
-
"id": 51,
|
|
23
|
-
"name": "domAgent",
|
|
24
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
25
|
-
"email": "d.pesch+agent@11com7.de"
|
|
26
|
-
},
|
|
27
|
-
"status": {
|
|
28
|
-
"id": 50,
|
|
29
|
-
"name": "assigned",
|
|
30
|
-
"label": "zugewiesen",
|
|
31
|
-
"color": "#afbed5"
|
|
32
|
-
},
|
|
33
|
-
"resolution": {
|
|
34
|
-
"id": 10,
|
|
35
|
-
"name": "open",
|
|
36
|
-
"label": "offen"
|
|
37
|
-
},
|
|
38
|
-
"view_state": {
|
|
39
|
-
"id": 10,
|
|
40
|
-
"name": "public",
|
|
41
|
-
"label": "öffentlich"
|
|
42
|
-
},
|
|
43
|
-
"priority": {
|
|
44
|
-
"id": 30,
|
|
45
|
-
"name": "normal",
|
|
46
|
-
"label": "normal"
|
|
47
|
-
},
|
|
48
|
-
"severity": {
|
|
49
|
-
"id": 200,
|
|
50
|
-
"name": "Technische Schuld",
|
|
51
|
-
"label": "Technische Schuld"
|
|
52
|
-
},
|
|
53
|
-
"reproducibility": {
|
|
54
|
-
"id": 70,
|
|
55
|
-
"name": "have not tried",
|
|
56
|
-
"label": "nicht getestet"
|
|
57
|
-
},
|
|
58
|
-
"sticky": false,
|
|
59
|
-
"created_at": "2026-03-16T15:40:38+01:00",
|
|
60
|
-
"updated_at": "2026-03-16T15:40:38+01:00",
|
|
61
|
-
"history": [
|
|
62
|
-
{
|
|
63
|
-
"created_at": "2026-03-16T15:40:38+01:00",
|
|
64
|
-
"user": {
|
|
65
|
-
"id": 51,
|
|
66
|
-
"name": "domAgent",
|
|
67
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
68
|
-
"email": "d.pesch+agent@11com7.de"
|
|
69
|
-
},
|
|
70
|
-
"type": {
|
|
71
|
-
"id": 1,
|
|
72
|
-
"name": "issue-new"
|
|
73
|
-
},
|
|
74
|
-
"message": "Neuer Eintrag"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"created_at": "2026-03-16T15:40:38+01:00",
|
|
78
|
-
"user": {
|
|
79
|
-
"id": 51,
|
|
80
|
-
"name": "domAgent",
|
|
81
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
82
|
-
"email": "d.pesch+agent@11com7.de"
|
|
83
|
-
},
|
|
84
|
-
"field": {
|
|
85
|
-
"name": "status",
|
|
86
|
-
"label": "Status"
|
|
87
|
-
},
|
|
88
|
-
"type": {
|
|
89
|
-
"id": 0,
|
|
90
|
-
"name": "field-updated"
|
|
91
|
-
},
|
|
92
|
-
"old_value": {
|
|
93
|
-
"id": 10,
|
|
94
|
-
"name": "new",
|
|
95
|
-
"label": "neu",
|
|
96
|
-
"color": "#eeb3aa"
|
|
97
|
-
},
|
|
98
|
-
"new_value": {
|
|
99
|
-
"id": 50,
|
|
100
|
-
"name": "assigned",
|
|
101
|
-
"label": "zugewiesen",
|
|
102
|
-
"color": "#afbed5"
|
|
103
|
-
},
|
|
104
|
-
"message": "Status",
|
|
105
|
-
"change": "neu => zugewiesen"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"created_at": "2026-03-16T15:40:38+01:00",
|
|
109
|
-
"user": {
|
|
110
|
-
"id": 51,
|
|
111
|
-
"name": "domAgent",
|
|
112
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
113
|
-
"email": "d.pesch+agent@11com7.de"
|
|
114
|
-
},
|
|
115
|
-
"field": {
|
|
116
|
-
"name": "handler",
|
|
117
|
-
"label": "Bearbeitung durch"
|
|
118
|
-
},
|
|
119
|
-
"type": {
|
|
120
|
-
"id": 0,
|
|
121
|
-
"name": "field-updated"
|
|
122
|
-
},
|
|
123
|
-
"old_value": {
|
|
124
|
-
"id": 0
|
|
125
|
-
},
|
|
126
|
-
"new_value": {
|
|
127
|
-
"id": 51,
|
|
128
|
-
"name": "domAgent",
|
|
129
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
130
|
-
"email": "d.pesch+agent@11com7.de"
|
|
131
|
-
},
|
|
132
|
-
"message": "Bearbeitung durch",
|
|
133
|
-
"change": " => domAgent"
|
|
134
|
-
}
|
|
135
|
-
]
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"id": 7859,
|
|
139
|
-
"summary": "notify-claude.ps1: Sub-Agenten-Check blockiert alle Benachrichtigungen",
|
|
140
|
-
"description": "## Was ist passiert?\n\nStop-Toasts werden seit einer Weile gar nicht mehr angezeigt. Erwartet: Desktop-Toast wenn Claude Code eine Aufgabe abschliesst. Tatsaechlich: kein Toast, kein Fehler, stilles Unterdruecken.\n\n## Betroffene Komponente\n\n- Hook: Stop-Hook in ~/.claude/settings.json\n- Skript: setup/notify-claude.ps1, Zeilen 6-9\n- Plattform: Windows\n\n## Ursachenanalyse\n\nDer Sub-Agenten-Unterdrueckungs-Check in notify-claude.ps1 prueft:\n\n $claudeCount = (Get-Process -Name \"claude\" ...).Count\n if ($claudeCount -gt 1) { exit 0 }\n\nClaude Code startet intern ~18 Prozesse mit dem Namen \"claude.exe\" (Node.js Worker-Prozesse, Subprozesse fuer Tools und Agents). Da immer mehr als 1 claude-Prozess laeuft, ist der Check permanent true -- kein Toast wird je ausgeloest.\n\nDiagnose-Befehl zur Reproduktion:\n\n Get-Process -Name \"claude\" | Measure-Object\n # Ergebnis: Count = 18\n\n## Loesungsansaetze\n\n1. **Prozessbaum-basierter Check (bevorzugt):** notify-claude.ps1 baut bereits $parentMap und Invoke-AncestorWalk auf (Zeilen 57-90). Statt die globale Anzahl aller claude-Prozesse zu zaehlen, pruefen ob der aufrufende Prozess einen claude-Elternprozess in seiner Vorfahrenkette hat -- d.h. ob der eigene PID-Baum bereits einen claude.exe-Vorfahren enthaelt.\n\n2. **Alternativer Ansatz:** Nur Stop-Suppression wenn GENAU 2 oder mehr eigenstaendige claude-Haupt-Sessions laufen (MainWindowHandle != Zero als Kriterium fuer eine \"echte\" Session). Weniger praezise als Ansatz 1.\n\n## So reproduzierbar\n\n1. Claude Code starten (beliebige Session)\n2. Eine Aufgabe abschliessen lassen (Stop-Hook wird ausgeloest)\n3. Kein Toast erscheint\n4. Diagnose: Get-Process -Name \"claude\" | Measure-Object liefert ~18\n\n## Hinweise zur Umsetzung\n\nIn notify-claude.ps1 ist die Infrastruktur bereits vorhanden:\n\n- $parentMap (Zeile 57-59): Vollstaendige Prozess-Eltern-Map via CIM\n- Invoke-AncestorWalk (Zeile 64-81): Baut $ancestorPids auf\n- Nach Walk 1 und Walk 2 (Zeile 84-90) enthaelt $ancestorPids alle Vorfahren-PIDs des aufrufenden Prozesses\n\nDer Fix: Sub-Agenten-Check NACH dem Aufbau von $ancestorPids verschieben, dann pruefen ob irgendein Vorfahren-PID einen claude.exe-Prozess darstellt (ueber $parentMap[$pid].name -eq \"claude\").\n\nDie aktuellen Zeilen 6-9 koennen dann entfernt werden -- sie werden durch den Prozessbaum-Check vollstaendig ersetzt.\n\nDateipfad: setup/notify-claude.ps1 im MetaRepo\nNach Fix: install.ps1 ausfuehren damit notify-claude.ps1 nach ~/.claude/ kopiert wird.",
|
|
141
|
-
"project": {
|
|
142
|
-
"id": 54,
|
|
143
|
-
"name": "11com7 Claude MetaRepo"
|
|
144
|
-
},
|
|
145
|
-
"category": {
|
|
146
|
-
"id": 394,
|
|
147
|
-
"name": "Hooks"
|
|
148
|
-
},
|
|
149
|
-
"reporter": {
|
|
150
|
-
"id": 51,
|
|
151
|
-
"name": "domAgent",
|
|
152
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
153
|
-
"email": "d.pesch+agent@11com7.de"
|
|
154
|
-
},
|
|
155
|
-
"handler": {
|
|
156
|
-
"id": 51,
|
|
157
|
-
"name": "domAgent",
|
|
158
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
159
|
-
"email": "d.pesch+agent@11com7.de"
|
|
160
|
-
},
|
|
161
|
-
"status": {
|
|
162
|
-
"id": 50,
|
|
163
|
-
"name": "assigned",
|
|
164
|
-
"label": "zugewiesen",
|
|
165
|
-
"color": "#afbed5"
|
|
166
|
-
},
|
|
167
|
-
"resolution": {
|
|
168
|
-
"id": 10,
|
|
169
|
-
"name": "open",
|
|
170
|
-
"label": "offen"
|
|
171
|
-
},
|
|
172
|
-
"view_state": {
|
|
173
|
-
"id": 10,
|
|
174
|
-
"name": "public",
|
|
175
|
-
"label": "öffentlich"
|
|
176
|
-
},
|
|
177
|
-
"priority": {
|
|
178
|
-
"id": 30,
|
|
179
|
-
"name": "normal",
|
|
180
|
-
"label": "normal"
|
|
181
|
-
},
|
|
182
|
-
"severity": {
|
|
183
|
-
"id": 0,
|
|
184
|
-
"name": "@0@",
|
|
185
|
-
"label": "@0@"
|
|
186
|
-
},
|
|
187
|
-
"reproducibility": {
|
|
188
|
-
"id": 70,
|
|
189
|
-
"name": "have not tried",
|
|
190
|
-
"label": "nicht getestet"
|
|
191
|
-
},
|
|
192
|
-
"sticky": false,
|
|
193
|
-
"created_at": "2026-03-16T14:43:52+01:00",
|
|
194
|
-
"updated_at": "2026-03-16T14:43:52+01:00",
|
|
195
|
-
"history": [
|
|
196
|
-
{
|
|
197
|
-
"created_at": "2026-03-16T14:43:52+01:00",
|
|
198
|
-
"user": {
|
|
199
|
-
"id": 51,
|
|
200
|
-
"name": "domAgent",
|
|
201
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
202
|
-
"email": "d.pesch+agent@11com7.de"
|
|
203
|
-
},
|
|
204
|
-
"type": {
|
|
205
|
-
"id": 1,
|
|
206
|
-
"name": "issue-new"
|
|
207
|
-
},
|
|
208
|
-
"message": "Neuer Eintrag"
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
"created_at": "2026-03-16T14:43:52+01:00",
|
|
212
|
-
"user": {
|
|
213
|
-
"id": 51,
|
|
214
|
-
"name": "domAgent",
|
|
215
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
216
|
-
"email": "d.pesch+agent@11com7.de"
|
|
217
|
-
},
|
|
218
|
-
"field": {
|
|
219
|
-
"name": "status",
|
|
220
|
-
"label": "Status"
|
|
221
|
-
},
|
|
222
|
-
"type": {
|
|
223
|
-
"id": 0,
|
|
224
|
-
"name": "field-updated"
|
|
225
|
-
},
|
|
226
|
-
"old_value": {
|
|
227
|
-
"id": 10,
|
|
228
|
-
"name": "new",
|
|
229
|
-
"label": "neu",
|
|
230
|
-
"color": "#eeb3aa"
|
|
231
|
-
},
|
|
232
|
-
"new_value": {
|
|
233
|
-
"id": 50,
|
|
234
|
-
"name": "assigned",
|
|
235
|
-
"label": "zugewiesen",
|
|
236
|
-
"color": "#afbed5"
|
|
237
|
-
},
|
|
238
|
-
"message": "Status",
|
|
239
|
-
"change": "neu => zugewiesen"
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
"created_at": "2026-03-16T14:43:52+01:00",
|
|
243
|
-
"user": {
|
|
244
|
-
"id": 51,
|
|
245
|
-
"name": "domAgent",
|
|
246
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
247
|
-
"email": "d.pesch+agent@11com7.de"
|
|
248
|
-
},
|
|
249
|
-
"field": {
|
|
250
|
-
"name": "handler",
|
|
251
|
-
"label": "Bearbeitung durch"
|
|
252
|
-
},
|
|
253
|
-
"type": {
|
|
254
|
-
"id": 0,
|
|
255
|
-
"name": "field-updated"
|
|
256
|
-
},
|
|
257
|
-
"old_value": {
|
|
258
|
-
"id": 0
|
|
259
|
-
},
|
|
260
|
-
"new_value": {
|
|
261
|
-
"id": 51,
|
|
262
|
-
"name": "domAgent",
|
|
263
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
264
|
-
"email": "d.pesch+agent@11com7.de"
|
|
265
|
-
},
|
|
266
|
-
"message": "Bearbeitung durch",
|
|
267
|
-
"change": " => domAgent"
|
|
268
|
-
}
|
|
269
|
-
]
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
"id": 7858,
|
|
273
|
-
"summary": "Notification-Hooks gehen nach settings.json-Änderungen verloren",
|
|
274
|
-
"description": "## Was ist passiert?\nDie Stop- und Notification-Hooks in ~/.claude/settings.json fehlen nach permissions-sync-Läufen oder manuellen Edits an settings.json. Claude benachrichtigt dann nicht mehr bei abgeschlossenen Tasks oder wenn Nutzerinteraktion erforderlich ist. Erst nach erneutem Ausführen von enable-notifications.sh sind die Hooks wieder aktiv.\n\n## Betroffene Komponente\n- Skript: enable-notifications.sh / enable-notifications.ps1\n- Datei(en): ~/.claude/settings.json, setup/permissions-managed.json\n- Plattform: beide (Windows + WSL/Linux)\n\n## Ursachenanalyse\nenable-notifications.sh ist ein einmaliger opt-in-Schritt und wird nicht automatisch erneut ausgeführt. Die Stop- und Notification-Hooks sind nicht in permissions-managed.json als \"verwaltete Permissions\" hinterlegt und werden daher von permissions-sync weder geprüft noch wiederhergestellt. Wenn settings.json durch permissions-sync oder andere Tools überschrieben wird, fallen die Hooks weg.\n\n## Lösungsansätze\n1. enable-notifications.sh/ps1 in install.sh/install.ps1 integrieren (idempotent — nur hinzufügen wenn noch nicht vorhanden, nicht überschreiben). Damit werden Hooks bei jedem \"git pull + install\" wiederhergestellt.\n2. Stop- und Notification-Hooks in permissions-sync einbeziehen: permissions-sync prüft und ergänzt sie analog zu anderen verwalteten Hooks — sofern das Opt-in-Prinzip beibehalten werden soll, z.B. über ein Flag in ~/.claude/settings.json (\"notifications\": true).\n3. Kombination: install.sh ruft enable-notifications.sh auf, falls notify-claude.sh vorhanden ist (Voraussetzung erfüllt) und die Hooks noch fehlen.\n\n## So reproduzierbar\n1. enable-notifications.sh ausführen → Stop + Notification Hooks aktiv\n2. permissions-sync ausführen\n3. settings.json prüfen → Stop und Notification Hooks fehlen\n\n## Hinweise zur Umsetzung\n- enable-notifications.sh prüft bereits idempotent ob Hooks vorhanden sind (\"Hook bereits vorhanden — übersprungen\") — der Aufruf aus install.sh ist damit sicher\n- Relevant: install.sh (WSL/Linux), install.ps1 (Windows)\n- permissions-sync.js: ~/.claude/permissions-sync.js — dort werden verwaltete Entries geprüft und ergänzt\n- Opt-in-Prinzip sollte erhalten bleiben: Hooks nur hinzufügen wenn notify-claude.sh vorhanden ist (also install.sh bereits gelaufen)",
|
|
275
|
-
"project": {
|
|
276
|
-
"id": 54,
|
|
277
|
-
"name": "11com7 Claude MetaRepo"
|
|
278
|
-
},
|
|
279
|
-
"category": {
|
|
280
|
-
"id": 395,
|
|
281
|
-
"name": "Installer"
|
|
282
|
-
},
|
|
283
|
-
"reporter": {
|
|
284
|
-
"id": 52,
|
|
285
|
-
"name": "ppAgent"
|
|
286
|
-
},
|
|
287
|
-
"handler": {
|
|
288
|
-
"id": 52,
|
|
289
|
-
"name": "ppAgent"
|
|
290
|
-
},
|
|
291
|
-
"status": {
|
|
292
|
-
"id": 20,
|
|
293
|
-
"name": "feedback",
|
|
294
|
-
"label": "Rückmeldung",
|
|
295
|
-
"color": "#f5e5b8"
|
|
296
|
-
},
|
|
297
|
-
"resolution": {
|
|
298
|
-
"id": 10,
|
|
299
|
-
"name": "open",
|
|
300
|
-
"label": "offen"
|
|
301
|
-
},
|
|
302
|
-
"view_state": {
|
|
303
|
-
"id": 10,
|
|
304
|
-
"name": "public",
|
|
305
|
-
"label": "öffentlich"
|
|
306
|
-
},
|
|
307
|
-
"priority": {
|
|
308
|
-
"id": 30,
|
|
309
|
-
"name": "normal",
|
|
310
|
-
"label": "normal"
|
|
311
|
-
},
|
|
312
|
-
"severity": {
|
|
313
|
-
"id": 0,
|
|
314
|
-
"name": "@0@",
|
|
315
|
-
"label": "@0@"
|
|
316
|
-
},
|
|
317
|
-
"reproducibility": {
|
|
318
|
-
"id": 70,
|
|
319
|
-
"name": "have not tried",
|
|
320
|
-
"label": "nicht getestet"
|
|
321
|
-
},
|
|
322
|
-
"sticky": false,
|
|
323
|
-
"created_at": "2026-03-16T12:33:12+01:00",
|
|
324
|
-
"updated_at": "2026-03-16T12:54:59+01:00",
|
|
325
|
-
"notes": [
|
|
326
|
-
{
|
|
327
|
-
"id": 3985,
|
|
328
|
-
"reporter": {
|
|
329
|
-
"id": 51,
|
|
330
|
-
"name": "domAgent",
|
|
331
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
332
|
-
"email": "d.pesch+agent@11com7.de"
|
|
333
|
-
},
|
|
334
|
-
"text": "Fix implementiert und gepusht (commit f8e8184).\n\n**Lösungsansatz 1** wurde umgesetzt: `install.ps1` und `install.sh` prüfen nun am Ende des Installationslaufs idempotent, ob die Stop- und Notification-Hooks in `settings.json` vorhanden sind, und stellen sie automatisch wieder her.\n\n**Windows (`install.ps1`):** Hooks werden direkt in `settings.json` eingetragen, wenn BurntToast installiert ist (als Opt-in-Indikator). Beide Hooks werden nur hinzugefügt, wenn sie fehlen — vorhandene Einträge bleiben unverändert.\n\n**Linux/WSL (`install.sh`):** Bei verfügbarem `notify-send` und `python3` wird `enable-notifications.sh` aufgerufen (bereits idempotent). Fehlt `notify-send`, erscheint weiterhin der bisherige optionale Hinweis.\n\nDas Problem tritt nicht mehr auf, da bei jedem `git pull + install.ps1/sh` die Hooks automatisch wiederhergestellt werden.",
|
|
335
|
-
"view_state": {
|
|
336
|
-
"id": 10,
|
|
337
|
-
"name": "public",
|
|
338
|
-
"label": "öffentlich"
|
|
339
|
-
},
|
|
340
|
-
"attachments": [],
|
|
341
|
-
"type": "note",
|
|
342
|
-
"created_at": "2026-03-16T12:54:56+01:00",
|
|
343
|
-
"updated_at": "2026-03-16T12:54:56+01:00"
|
|
344
|
-
}
|
|
345
|
-
],
|
|
346
|
-
"history": [
|
|
347
|
-
{
|
|
348
|
-
"created_at": "2026-03-16T12:33:12+01:00",
|
|
349
|
-
"user": {
|
|
350
|
-
"id": 52,
|
|
351
|
-
"name": "ppAgent"
|
|
352
|
-
},
|
|
353
|
-
"type": {
|
|
354
|
-
"id": 1,
|
|
355
|
-
"name": "issue-new"
|
|
356
|
-
},
|
|
357
|
-
"message": "Neuer Eintrag"
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
"created_at": "2026-03-16T12:33:12+01:00",
|
|
361
|
-
"user": {
|
|
362
|
-
"id": 52,
|
|
363
|
-
"name": "ppAgent"
|
|
364
|
-
},
|
|
365
|
-
"field": {
|
|
366
|
-
"name": "status",
|
|
367
|
-
"label": "Status"
|
|
368
|
-
},
|
|
369
|
-
"type": {
|
|
370
|
-
"id": 0,
|
|
371
|
-
"name": "field-updated"
|
|
372
|
-
},
|
|
373
|
-
"old_value": {
|
|
374
|
-
"id": 10,
|
|
375
|
-
"name": "new",
|
|
376
|
-
"label": "neu",
|
|
377
|
-
"color": "#eeb3aa"
|
|
378
|
-
},
|
|
379
|
-
"new_value": {
|
|
380
|
-
"id": 50,
|
|
381
|
-
"name": "assigned",
|
|
382
|
-
"label": "zugewiesen",
|
|
383
|
-
"color": "#afbed5"
|
|
384
|
-
},
|
|
385
|
-
"message": "Status",
|
|
386
|
-
"change": "neu => zugewiesen"
|
|
387
|
-
},
|
|
388
|
-
{
|
|
389
|
-
"created_at": "2026-03-16T12:33:12+01:00",
|
|
390
|
-
"user": {
|
|
391
|
-
"id": 52,
|
|
392
|
-
"name": "ppAgent"
|
|
393
|
-
},
|
|
394
|
-
"field": {
|
|
395
|
-
"name": "handler",
|
|
396
|
-
"label": "Bearbeitung durch"
|
|
397
|
-
},
|
|
398
|
-
"type": {
|
|
399
|
-
"id": 0,
|
|
400
|
-
"name": "field-updated"
|
|
401
|
-
},
|
|
402
|
-
"old_value": {
|
|
403
|
-
"id": 0
|
|
404
|
-
},
|
|
405
|
-
"new_value": {
|
|
406
|
-
"id": 52,
|
|
407
|
-
"name": "ppAgent"
|
|
408
|
-
},
|
|
409
|
-
"message": "Bearbeitung durch",
|
|
410
|
-
"change": " => ppAgent"
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
"created_at": "2026-03-16T12:54:56+01:00",
|
|
414
|
-
"user": {
|
|
415
|
-
"id": 51,
|
|
416
|
-
"name": "domAgent",
|
|
417
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
418
|
-
"email": "d.pesch+agent@11com7.de"
|
|
419
|
-
},
|
|
420
|
-
"type": {
|
|
421
|
-
"id": 2,
|
|
422
|
-
"name": "note-added"
|
|
423
|
-
},
|
|
424
|
-
"note": {
|
|
425
|
-
"id": 3985
|
|
426
|
-
},
|
|
427
|
-
"message": "Notiz hinzugefügt: 0003985"
|
|
428
|
-
},
|
|
429
|
-
{
|
|
430
|
-
"created_at": "2026-03-16T12:54:59+01:00",
|
|
431
|
-
"user": {
|
|
432
|
-
"id": 51,
|
|
433
|
-
"name": "domAgent",
|
|
434
|
-
"real_name": "Dominik Pesch (via Agent)",
|
|
435
|
-
"email": "d.pesch+agent@11com7.de"
|
|
436
|
-
},
|
|
437
|
-
"field": {
|
|
438
|
-
"name": "status",
|
|
439
|
-
"label": "Status"
|
|
440
|
-
},
|
|
441
|
-
"type": {
|
|
442
|
-
"id": 0,
|
|
443
|
-
"name": "field-updated"
|
|
444
|
-
},
|
|
445
|
-
"old_value": {
|
|
446
|
-
"id": 50,
|
|
447
|
-
"name": "assigned",
|
|
448
|
-
"label": "zugewiesen",
|
|
449
|
-
"color": "#afbed5"
|
|
450
|
-
},
|
|
451
|
-
"new_value": {
|
|
452
|
-
"id": 20,
|
|
453
|
-
"name": "feedback",
|
|
454
|
-
"label": "Rückmeldung",
|
|
455
|
-
"color": "#f5e5b8"
|
|
456
|
-
},
|
|
457
|
-
"message": "Status",
|
|
458
|
-
"change": "zugewiesen => Rückmeldung"
|
|
459
|
-
}
|
|
460
|
-
]
|
|
461
|
-
}
|
|
462
|
-
]
|
|
463
|
-
}
|