791 lines
25 KiB
Markdown
791 lines
25 KiB
Markdown
# Mail-Adler Projekt-Management System
|
||
|
||
## 1. Überblick: Task Lifecycle (PRAGMATISCH - KEINE Zeitplanung!)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Task erstellen (von wem auch immer!) │
|
||
│ ├─ Title + Beschreibung │
|
||
│ ├─ Priorität: 1 (niedrig) bis 5 (höchst) │
|
||
│ └─ [Externe Task?] Fertigstellungsdatum │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ Duplikat-Check │
|
||
│ └─ System warnt: "Ähnliche Task existiert schon" │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ Task wartet (offen) │
|
||
│ └─ Nach Dringlichkeit sortiert in Daily Mail │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ AUTO-ASSIGN: Georg/Developer übernimmt │
|
||
│ ├─ Status → "In Arbeit" │
|
||
│ └─ (Wenn eine Task fertig wird → nächste dringste) │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ Task fertig │
|
||
│ ├─ Status → "Erledigt" │
|
||
│ ├─ AUTO-ASSIGN nächste dringste Task │
|
||
│ └─ Tägliche Mail zeigt Updates │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**WICHTIG: KEINE Zeitplanung! Nur nach Prio arbeiten!**
|
||
|
||
---
|
||
|
||
## 2. Task-Eingabe Template (Wie man gute Aufgaben stellt)
|
||
|
||
### Checklist für gute Task-Beschreibung
|
||
|
||
```
|
||
TITEL (kurz, prägnant)
|
||
└─ Max 10 Wörter
|
||
└─ Beispiel: "IMAP Login mit 2FA implementieren"
|
||
|
||
BESCHREIBUNG (strukturiert)
|
||
├─ Was: Kurze Zusammenfassung (2-3 Sätze)
|
||
├─ Warum: Geschäftliche Begründung
|
||
├─ Anforderungen:
|
||
│ ├─ [ ] Spezifische Anforderung 1
|
||
│ ├─ [ ] Spezifische Anforderung 2
|
||
│ └─ [ ] Spezifische Anforderung 3
|
||
├─ Akzeptanzkriterien:
|
||
│ ├─ [ ] Funktioniert mit GMX
|
||
│ ├─ [ ] Funktioniert mit Web.de
|
||
│ ├─ [ ] Tests grün
|
||
│ └─ [ ] Code-Review bestanden
|
||
├─ Links & Kontext:
|
||
│ ├─ GitHub Issue: #123
|
||
│ ├─ Design-Doc: link
|
||
│ └─ Abhängigkeiten: Task #456
|
||
├─ Geschätzte Dauer: 8h / 1 Tag / 1 Woche
|
||
├─ Labels: bug, feature, documentation, critical
|
||
└─ Dringlichkeit: Heute / Diese Woche / Später
|
||
|
||
BEISPIEL (GUTE Task):
|
||
───────────────────────────────
|
||
IMAP Login mit 2FA implementieren
|
||
|
||
WAS:
|
||
Füge Two-Factor Authentication zu IMAP-Login hinzu für GMX & Telekom-Konten
|
||
|
||
WARUM:
|
||
Benutzer mit 2FA können sich sonst nicht anmelden → Frustration
|
||
|
||
ANFORDERUNGEN:
|
||
- [ ] Support für: GMX, Telekom (Google später - Phase D)
|
||
- [ ] IMAP-Authentifizierung mit App-Passwort
|
||
- [ ] Fehlerbehandlung: Falsche Kredentiale
|
||
- [ ] Security: Passwörter verschlüsselt speichern
|
||
|
||
AKZEPTANZKRITERIEN:
|
||
- [ ] Benutzer mit 2FA kann sich anmelden
|
||
- [ ] Fehlermeldung bei falschen Daten klar
|
||
- [ ] App-Passwort wird korrekt in Keychain gespeichert
|
||
- [ ] Tests bestanden (unit + integration)
|
||
- [ ] Code-Review ok
|
||
|
||
LINKS:
|
||
- Abhängig: Task #340 (IMAP Core)
|
||
- Design: https://github.com/georg0480/mailadler/wiki/2FA
|
||
- Dokument: docs/2fa-implementation.md
|
||
|
||
DAUER: 16 Stunden (2 Arbeitstage)
|
||
LABELS: feature, security
|
||
DRINGLICHKEIT: Diese Woche
|
||
|
||
───────────────────────────────
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Duplikat-Prevention System
|
||
|
||
### Automatische Duplikat-Erkennung
|
||
|
||
```python
|
||
#!/usr/bin/env python3
|
||
# tools/task_duplicate_checker.py
|
||
|
||
import difflib
|
||
from database import Database
|
||
|
||
class TaskDuplicateChecker:
|
||
def __init__(self):
|
||
self.db = Database()
|
||
|
||
def check_duplicate(self, new_title: str, new_description: str) -> dict:
|
||
"""
|
||
Prüfe ob Task ähnlich existiert
|
||
Return: {"is_duplicate": bool, "similar_tasks": [...]}
|
||
"""
|
||
|
||
existing_tasks = self.db.get_open_tasks()
|
||
|
||
similar_tasks = []
|
||
|
||
for task in existing_tasks:
|
||
# Title Similarity (80%+)
|
||
title_ratio = difflib.SequenceMatcher(
|
||
None,
|
||
new_title.lower(),
|
||
task['title'].lower()
|
||
).ratio()
|
||
|
||
# Description Similarity (70%+)
|
||
desc_ratio = difflib.SequenceMatcher(
|
||
None,
|
||
new_description.lower(),
|
||
task['description'].lower()
|
||
).ratio()
|
||
|
||
if title_ratio > 0.80 or desc_ratio > 0.70:
|
||
similar_tasks.append({
|
||
"id": task['id'],
|
||
"title": task['title'],
|
||
"status": task['status'],
|
||
"similarity": max(title_ratio, desc_ratio),
|
||
"assigned_to": task['assigned_to']
|
||
})
|
||
|
||
return {
|
||
"is_duplicate": len(similar_tasks) > 0,
|
||
"similar_tasks": sorted(
|
||
similar_tasks,
|
||
key=lambda x: x['similarity'],
|
||
reverse=True
|
||
)[:3] # Top 3 ähnliche
|
||
}
|
||
|
||
def warn_before_create(self, new_title: str, new_description: str):
|
||
"""
|
||
Vor Task-Erstellung warnen
|
||
"""
|
||
result = self.check_duplicate(new_title, new_description)
|
||
|
||
if result['is_duplicate']:
|
||
print("\n⚠️ WARNUNG: Ähnliche Tasks existieren bereits!\n")
|
||
|
||
for task in result['similar_tasks']:
|
||
print(f"Task #{task['id']}: {task['title']}")
|
||
print(f" Status: {task['status']}")
|
||
print(f" Ähnlichkeit: {task['similarity']*100:.0f}%")
|
||
print(f" Zugeordnet: {task['assigned_to'] or 'Niemand'}\n")
|
||
|
||
response = input("Trotzdem neue Task erstellen? (ja/nein): ")
|
||
return response.lower() == 'ja'
|
||
|
||
return True
|
||
```
|
||
|
||
### UI: Duplikat-Warnung
|
||
|
||
```
|
||
Neue Task eintippen:
|
||
|
||
Titel: "IMAP Login implementieren"
|
||
↓
|
||
System prüft Duplikate...
|
||
↓
|
||
⚠️ ÄHNLICHE TASKS GEFUNDEN:
|
||
|
||
[1] Task #456: "IMAP-Verbindung implementieren"
|
||
Status: In Arbeit (Developer: Alice)
|
||
Ähnlichkeit: 85%
|
||
|
||
[2] Task #389: "IMAP Authentifizierung"
|
||
Status: Code-Review (Developer: Bob)
|
||
Ähnlichkeit: 72%
|
||
|
||
💡 Tipp: Vielleicht schon eine Task für dein Anliegen offen?
|
||
|
||
[Trotzdem erstellen] [Task #456 anschauen]
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Auto-Assign System (AUTOMATISCH nächste dringste Task!)
|
||
|
||
### Wie es funktioniert:
|
||
|
||
```python
|
||
# tools/auto_assign.py
|
||
class AutoAssign:
|
||
def on_task_completed(self, task_id: str):
|
||
"""
|
||
Wenn Task fertig → nächste dringste AUTO-ASSIGN!
|
||
"""
|
||
|
||
# 1. Mark Task als DONE
|
||
self.db.update_task(task_id, status="DONE")
|
||
|
||
# 2. Finde Developer der diese Task hatte
|
||
developer = self.db.get_task_assignee(task_id)
|
||
|
||
# 3. Finde nächste dringste offene Task
|
||
next_task = self.db.get_highest_priority_open_task()
|
||
|
||
if next_task:
|
||
# 4. AUTO-ASSIGN an selben Developer
|
||
self.db.assign_task(next_task['id'], developer)
|
||
|
||
# 5. Mail an Developer
|
||
self.send_mail(developer,
|
||
f"Neue Task #{next_task['id']} auto-assigned: {next_task['title']}")
|
||
|
||
# 6. Mail an alle (täglich email wird aktualisiert)
|
||
return True
|
||
|
||
return False
|
||
```
|
||
|
||
### Workflow:
|
||
|
||
```
|
||
Georg arbeitet an Task #501 (Prio 5)
|
||
↓
|
||
Georg: "DONE #501" (Reply zu Daily Mail)
|
||
↓
|
||
System:
|
||
1. Task #501 → Status DONE
|
||
2. Finde nächste dringste: Task #512 (Prio 5, offen)
|
||
3. AUTO-ASSIGN #512 → Georg
|
||
4. Mail: "Georg, neue Task #512 assigned!"
|
||
5. Morgen Daily Mail zeigt: Georg arbeitet an #512
|
||
```
|
||
|
||
**WICHTIG: MAX 1 Task pro Developer gleichzeitig!**
|
||
|
||
---
|
||
|
||
## 5. Dringlichkeits-Verarbeitung (Task-Reihenfolge)
|
||
|
||
### Sortierungs-Algorithmus
|
||
|
||
```python
|
||
def get_tasks_by_urgency(self) -> list:
|
||
"""
|
||
Sortiere Tasks nach Dringlichkeit
|
||
|
||
Priorität:
|
||
1. Tasks mit Deadline heute (CRITICAL)
|
||
2. Tasks mit Deadline diese Woche (HIGH)
|
||
3. Tasks ohne Deadline (NORMAL)
|
||
4. In gleicher Kategorie: Nach Erstellungsdatum (älter zuerst)
|
||
5. Gleiches Datum: Nach Stimmen/Upvotes (mehr = höher)
|
||
"""
|
||
|
||
tasks = self.db.get_open_tasks()
|
||
|
||
def priority_score(task):
|
||
days_until = (task['deadline'] - datetime.now()).days
|
||
|
||
# Basis-Score nach Deadline
|
||
if days_until == 0:
|
||
base_score = 1000 # HEUTE = höchste Priorität
|
||
elif days_until <= 7:
|
||
base_score = 500 # Diese Woche
|
||
elif days_until <= 30:
|
||
base_score = 100 # Diesen Monat
|
||
else:
|
||
base_score = 10 # Später
|
||
|
||
# Zusatz-Punkte: Upvotes/Stimmen
|
||
upvotes = len(task.get('upvoted_by', []))
|
||
upvote_bonus = upvotes * 5
|
||
|
||
# Zusatz-Punkte: Alter (älter = wichtiger)
|
||
days_old = (datetime.now() - task['created_at']).days
|
||
age_bonus = days_old * 0.1
|
||
|
||
# Zusatz-Punkte: Label "CRITICAL"
|
||
label_bonus = 100 if 'critical' in task.get('labels', []) else 0
|
||
|
||
return base_score + upvote_bonus + age_bonus + label_bonus
|
||
|
||
# Sortiere nach Score
|
||
return sorted(tasks, key=priority_score, reverse=True)
|
||
```
|
||
|
||
### Gleiche Dringlichkeit: Team-Abstimmung
|
||
|
||
```
|
||
Task #456: IMAP Login [DEADLINE: Morgen]
|
||
Task #389: 2FA Support [DEADLINE: Morgen]
|
||
|
||
Beide EQUAL dringend!
|
||
|
||
🎯 TEAM-ABSTIMMUNG:
|
||
├─ Alice: 👍 (Task #456)
|
||
├─ Bob: 👍 (Task #456)
|
||
└─ Charlie: 👍 (Task #389)
|
||
|
||
→ Task #456 gewinnt (2 Stimmen)
|
||
→ Task #389 wird 2. Priorität
|
||
|
||
Alle Developer können **einmal** pro Task abstimmen
|
||
```
|
||
|
||
---
|
||
|
||
## 6. External Developer: Onboarding & Feedback
|
||
|
||
### Guter Onboarding (Schnelle Einarbeitung)
|
||
|
||
```markdown
|
||
# EXTERNAL DEVELOPER ONBOARDING
|
||
|
||
## Willkommen! 🎉
|
||
|
||
Du hast Task #456: "IMAP Login" übernommen?
|
||
Hier alles was du brauchst:
|
||
|
||
### 1️⃣ SETUP (15 Min)
|
||
- [ ] Repository geklont
|
||
- [ ] Abhängigkeiten: `pip install -r requirements.txt`
|
||
- [ ] Tests: `pytest src/` → Alle grün?
|
||
- [ ] Local Run: `python main.py`
|
||
|
||
### 2️⃣ CODE-KONTEXT (30 Min)
|
||
- Relevant Files:
|
||
* `src/imap/client.py` - IMAP Core
|
||
* `src/auth/login.py` - Login Flow
|
||
* `src/security/credentials.py` - Secure Speicherung
|
||
|
||
- Design Docs:
|
||
* https://github.com/.../wiki/IMAP-Architecture
|
||
* https://github.com/.../docs/2fa-implementation.md
|
||
|
||
- Video (5 Min): https://youtube.com/watch?v=... "IMAP Login Walkthrough"
|
||
|
||
### 3️⃣ ANFORDERUNGEN CHECKLIST
|
||
- [ ] Support GMX & Web.de
|
||
- [ ] 2FA mit App-Passwort
|
||
- [ ] Error Handling klar
|
||
- [ ] Tests schreiben
|
||
- [ ] Code-Review bestehen
|
||
|
||
### 4️⃣ QUESTIONS?
|
||
- Slack: @Georg (aufpassen, bin oft busy!)
|
||
- Email: georg.dahmen@proton.me
|
||
- GitHub Discussions: github.com/.../discussions
|
||
- TRY FIRST: Suche nach ähnlichen Issues
|
||
|
||
### 5️⃣ WHEN DONE
|
||
- Push zu Branch: `feature/imap-login-2fa`
|
||
- Create Pull Request (schreibe gute Description!)
|
||
- Antworte auf Code-Review Kommentare
|
||
|
||
---
|
||
|
||
## Success Path 🚀
|
||
|
||
Wenn alles läuft:
|
||
1. Du behältst **positives Feedback** für dein Profil
|
||
2. Wir können dich für **weitere Tasks** anfragen
|
||
3. Du wirst **Community Contributor**
|
||
4. Long-term: Vielleicht Team-Member?
|
||
|
||
---
|
||
|
||
### Still Stuck?
|
||
- GitHub Issue erstellen: https://github.com/.../issues/new
|
||
- Tag @Georg in Discussions
|
||
- Wir helfen! 💪
|
||
```
|
||
|
||
---
|
||
|
||
## 7. Developer Deadline Reminders (Automatisch)
|
||
|
||
### Email Sequenz
|
||
|
||
```
|
||
DAY 0: Developer übernimmt Task
|
||
────────────────────────────
|
||
Hallo Alice! 👋
|
||
|
||
Du hast gerade Task #456 übernommen:
|
||
"IMAP Login mit 2FA"
|
||
|
||
Deadline: 28 Tage (4 Wochen)
|
||
Fällig: 2025-03-03
|
||
|
||
Viel Erfolg! 💪
|
||
|
||
|
||
DAY 14: Erinnerung 1
|
||
────────────────────
|
||
Hallo Alice!
|
||
|
||
⏰ ERINNERUNG: Task #456 läuft noch...
|
||
|
||
Task: "IMAP Login mit 2FA"
|
||
Status: In Arbeit (seit 14 Tagen)
|
||
Deadline: 2025-03-03 (noch 14 Tage)
|
||
|
||
💡 Falls du Hilfe brauchst:
|
||
- Slack @Georg
|
||
- GitHub Discussions
|
||
|
||
Weiter so! 👍
|
||
|
||
|
||
DAY 21: Erinnerung 2
|
||
────────────────────
|
||
Hallo Alice!
|
||
|
||
⏰ WICHTIG: Task #456 läuft noch...
|
||
|
||
Task: "IMAP Login mit 2FA"
|
||
Status: In Arbeit (seit 21 Tagen)
|
||
Deadline: 2025-03-03 (noch 7 Tage!)
|
||
|
||
Du brauchst wahrscheinlich Hilfe? Sag Bescheid!
|
||
|
||
Sonst wird die Task am 2025-03-03 freigegeben.
|
||
|
||
|
||
DAY 28: Task Deadline erreicht
|
||
────────────────────────────────
|
||
Hallo Alice,
|
||
|
||
⚠️ TASK DEADLINE ERREICHT!
|
||
|
||
Task #456: "IMAP Login mit 2FA"
|
||
Status: IN ARBEIT → FREIGEGEBEN (Deadline überschritten)
|
||
|
||
Die Task wird jetzt wieder für andere Developer verfügbar.
|
||
|
||
Was ist passiert?
|
||
- Zu komplex?
|
||
- Andere Prioritäten?
|
||
- Blockiert?
|
||
|
||
Schreib uns! Wir helfen. 💪
|
||
|
||
Falls du die Task weitermachen willst:
|
||
→ Schreib Comment in GitHub Issue
|
||
→ Oder übernehme Task erneut
|
||
```
|
||
|
||
---
|
||
|
||
## 8. Tägliche Mail (09:00 CET) - DEIN exaktes Format!
|
||
|
||
### Template: Externe + Interne Tasks nach Prio sortiert
|
||
|
||
```
|
||
Betreff: Mail-Adler Daily Tasks - 2025-02-03
|
||
|
||
Hallo Team! 📨
|
||
|
||
═══════════════════════════════════════════════
|
||
|
||
📤 EXTERNE TASKS (Fertigstellungsdatum sortiert - früheste ZUERST!)
|
||
|
||
#501 [Prio 5⭐⭐⭐⭐⭐] IMAP Login 2FA
|
||
Status: IN ARBEIT (Georg)
|
||
Fertig: 2025-02-05 (MORGEN!) 🔴
|
||
────────────────────────────
|
||
|
||
#450 [Prio 4⭐⭐⭐⭐] Kalender Integration
|
||
Status: OFFEN (Nächste Auto-Assign!)
|
||
Fertig: 2025-02-07
|
||
────────────────────────────
|
||
|
||
#499 [Prio 3⭐⭐⭐] Bug: Timeout bei Sync
|
||
Status: OFFEN
|
||
Fertig: 2025-02-10
|
||
────────────────────────────
|
||
|
||
═══════════════════════════════════════════════
|
||
|
||
📥 INTERNE TASKS (Nach Prio, dann Dringlichkeit)
|
||
|
||
#512 [Prio 5⭐⭐⭐⭐⭐] Refactor IMAP Client
|
||
Status: OFFEN
|
||
Dringlichkeit: HOCH
|
||
────────────────────────────
|
||
|
||
#445 [Prio 4⭐⭐⭐⭐] Unit Tests schreiben
|
||
Status: OFFEN
|
||
Dringlichkeit: MITTEL
|
||
────────────────────────────
|
||
|
||
#200 [Prio 2⭐⭐] Dokumentation updaten
|
||
Status: OFFEN
|
||
Dringlichkeit: NIEDRIG
|
||
────────────────────────────
|
||
|
||
═══════════════════════════════════════════════
|
||
|
||
🚫 SPAM-FILTER (neue Adressen seit gestern)
|
||
|
||
Diese Adressen wurden in SPAM übernommen:
|
||
scammer@evil.com,
|
||
spambot@bulk.ru,
|
||
phishing@fake.de
|
||
|
||
📌 WICHTIG: Diese werden bei Empfang DIREKT in dein Spam-Ordner
|
||
sortiert, damit nicht mehrere Leute sie bekommen!
|
||
|
||
═══════════════════════════════════════════════
|
||
|
||
💬 REPLY ZU DIESER EMAIL - Du kannst:
|
||
• Neue Task: "NEW: [Title] [Prio 1-5] [Description]"
|
||
• Prio ändern: "PRIO #501 -> 3" (Prio 5 auf 3 senken)
|
||
• Task fertig: "DONE #501"
|
||
|
||
Beispiele:
|
||
────────────────────────────────────────────────
|
||
NEW: Database backup system Prio 4 Implement automated daily backups for PostgreSQL
|
||
PRIO #450 -> 5
|
||
DONE #501
|
||
────────────────────────────────────────────────
|
||
|
||
---
|
||
|
||
Automatisch gesendet täglich 09:00 CET
|
||
KEINE Zeitplanung - nur Prio!
|
||
Mail-Adler Task Management System
|
||
```
|
||
|
||
---
|
||
|
||
## 9. Task-History: Automatische Kontext-Anzeige
|
||
|
||
### Problem
|
||
Wenn du eine Task öffnest, weißt du nicht ob es dazu schon frühere Diskussionen, Issues oder Commits gab. Das führt zu:
|
||
- Doppelter Arbeit
|
||
- Verlorener Kontext
|
||
- Unnötiger Suche
|
||
|
||
### Lösung: Automatische History-Anzeige
|
||
|
||
```python
|
||
# tools/task_history.py
|
||
class TaskHistory:
|
||
def get_related_context(self, task_title: str, task_description: str) -> dict:
|
||
"""
|
||
Finde automatisch relevante Historie zu einer Task
|
||
"""
|
||
keywords = self.extract_keywords(task_title + " " + task_description)
|
||
|
||
results = {
|
||
"github_issues": [],
|
||
"github_commits": [],
|
||
"previous_tasks": [],
|
||
"amp_threads": []
|
||
}
|
||
|
||
# 1. GitHub Issues durchsuchen
|
||
for issue in self.github.search_issues(keywords):
|
||
results["github_issues"].append({
|
||
"number": issue.number,
|
||
"title": issue.title,
|
||
"state": issue.state,
|
||
"url": issue.html_url,
|
||
"relevance": self.calculate_relevance(issue, keywords)
|
||
})
|
||
|
||
# 2. GitHub Commits durchsuchen
|
||
for commit in self.github.search_commits(keywords):
|
||
results["github_commits"].append({
|
||
"sha": commit.sha[:7],
|
||
"message": commit.message,
|
||
"date": commit.date,
|
||
"url": commit.html_url,
|
||
"files": commit.files
|
||
})
|
||
|
||
# 3. Frühere Tasks durchsuchen
|
||
for task in self.db.search_tasks(keywords):
|
||
results["previous_tasks"].append({
|
||
"id": task.id,
|
||
"title": task.title,
|
||
"status": task.status,
|
||
"notes": task.notes
|
||
})
|
||
|
||
# 4. Amp-Threads durchsuchen (falls vorhanden)
|
||
for thread in self.search_amp_threads(keywords):
|
||
results["amp_threads"].append({
|
||
"id": thread.id,
|
||
"summary": thread.summary,
|
||
"date": thread.date
|
||
})
|
||
|
||
return results
|
||
```
|
||
|
||
### UI: History-Panel bei Task-Ansicht
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────┐
|
||
│ Task #512: IMAP Login mit 2FA │
|
||
├────────────────────────────────────────────────────────┤
|
||
│ Status: OFFEN | Prio: 5 | Erstellt: 2025-02-01 │
|
||
├────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ Beschreibung: │
|
||
│ Implementiere 2FA Support für GMX und Telekom... │
|
||
│ │
|
||
├────────────────────────────────────────────────────────┤
|
||
│ 📜 RELEVANTE HISTORIE (automatisch gefunden) │
|
||
│ │
|
||
│ GitHub Issues: │
|
||
│ ├─ #234 "2FA Login funktioniert nicht" (closed) │
|
||
│ │ └─ Lösung: App-Passwort statt normales PW │
|
||
│ └─ #189 "GMX IMAP Authentifizierung" (closed) │
|
||
│ └─ Enthält: Server-Einstellungen für GMX │
|
||
│ │
|
||
│ Commits: │
|
||
│ ├─ a3f82d1 "Add IMAP auth handler" (2025-01-15) │
|
||
│ └─ 9c4e2b7 "Fix GMX login timeout" (2025-01-20) │
|
||
│ │
|
||
│ Frühere Tasks: │
|
||
│ └─ #340 "IMAP Core implementieren" (DONE) │
|
||
│ └─ Basis für diese Task │
|
||
│ │
|
||
│ Amp-Threads: │
|
||
│ └─ T-019c2360... "IMAP Implementation besprochen" │
|
||
│ │
|
||
│ [Alle anzeigen] [History ausblenden] │
|
||
└────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### Implementierung: GitHub API
|
||
|
||
```python
|
||
# tools/github_history.py
|
||
import requests
|
||
|
||
class GitHubHistory:
|
||
def __init__(self, repo: str, token: str):
|
||
self.repo = repo # "georg0480/mailadler"
|
||
self.token = token
|
||
self.headers = {"Authorization": f"token {token}"}
|
||
|
||
def search_issues(self, keywords: list, limit: int = 5) -> list:
|
||
"""
|
||
Suche GitHub Issues nach Keywords
|
||
"""
|
||
query = " ".join(keywords) + f" repo:{self.repo}"
|
||
url = f"https://api.github.com/search/issues?q={query}&per_page={limit}"
|
||
|
||
response = requests.get(url, headers=self.headers)
|
||
return response.json().get("items", [])
|
||
|
||
def search_commits(self, keywords: list, limit: int = 5) -> list:
|
||
"""
|
||
Suche Commits nach Keywords in Message
|
||
"""
|
||
# Commits API durchsuchen
|
||
url = f"https://api.github.com/repos/{self.repo}/commits"
|
||
response = requests.get(url, headers=self.headers)
|
||
|
||
commits = response.json()
|
||
matched = []
|
||
|
||
for commit in commits:
|
||
message = commit["commit"]["message"].lower()
|
||
if any(kw.lower() in message for kw in keywords):
|
||
matched.append(commit)
|
||
if len(matched) >= limit:
|
||
break
|
||
|
||
return matched
|
||
```
|
||
|
||
### Öffentlich für alle
|
||
|
||
Die Task-History ist **für alle sichtbar** - nicht nur für den zugewiesenen Developer:
|
||
- Jeder kann den Kontext sehen
|
||
- Wissen wird geteilt
|
||
- Keine doppelte Arbeit
|
||
|
||
---
|
||
|
||
## 10. Frustration-Reduktion: Was Fehlt Noch?
|
||
|
||
### Häufige Probleme & Lösungen
|
||
|
||
| Problem | Aktuell | Lösung |
|
||
|---------|---------|--------|
|
||
| **Task-Spam** | Keine | Max 1 gleichzeitig, Task-Liste täglich |
|
||
| **Verlorene Aufgaben** | Ja | Duplikat-Check, Suchbar |
|
||
| **Deadline-Überraschungen** | Ja | 3 Reminders (Tag 14, 21, 28) |
|
||
| **Externe Developer verloren** | Ja | Gute Onboarding + Video |
|
||
| **Keine Feedback** | Ja | Positives Feedback speichern |
|
||
| **Keine Priorisierer** | Ja | Developer können selbst priorisieren |
|
||
| **Zu viele offene Tasks** | Ja | Dringlichkeits-Sortierung |
|
||
| **Status unklar** | Ja | Tägliche Spam + Status in UI |
|
||
| **Dev hängt fest** | Ja | Erinnerungen + "Braucht Hilfe?" |
|
||
| **Viele kleine Aufgaben** | ? | Labels, Grouping, Filter |
|
||
|
||
---
|
||
|
||
## 11. Implementation Plan
|
||
|
||
### MVP (Must-Have)
|
||
|
||
```
|
||
Phase 1 (Woche 1):
|
||
├─ Task CRUD (Create, Read, Update, Delete)
|
||
├─ Status Tracker (Open, In Progress, Done)
|
||
├─ Developer Assignment (max 1 gleichzeitig)
|
||
└─ Duplikat-Checker
|
||
|
||
Phase 2 (Woche 2):
|
||
├─ Deadline Reminders (Day 14, 21, 28)
|
||
├─ Priority Sorting (nach Dringlichkeit)
|
||
├─ Daily Status Email (09:00 CET)
|
||
└─ Developer Priorisierung
|
||
|
||
Phase 3 (Woche 3):
|
||
├─ External Developer Onboarding
|
||
├─ Positive Feedback speichern
|
||
├─ Team-Abstimmung für gleiche Dringlichkeit
|
||
└─ GitHub Integration (Issue ↔ Task)
|
||
```
|
||
|
||
---
|
||
|
||
## 12. Zusammenfassung: Dein Task-Management System (PRAGMATISCH!)
|
||
|
||
```
|
||
✅ AUTOMATISCH (NO ZEITPLANUNG!):
|
||
• Duplikat-Prüfung vor Erstellung
|
||
• Tägliche Mail (09:00 CET)
|
||
• AUTO-ASSIGN nächste dringste Task
|
||
• Externe Tasks nach Fertigstellungsdatum sortiert
|
||
• Interne Tasks nach Prio sortiert
|
||
• Spam-Filter Auto-Übernehmen (verhindert Duplikate)
|
||
|
||
✅ JEDER KANN MACHEN (via Daily Mail Reply):
|
||
• Neue Task erstellen: "NEW: [Title] Prio [1-5] [Description]"
|
||
• Prio ändern: "PRIO #501 -> 3"
|
||
• Task als fertig: "DONE #501"
|
||
• Nicht nur Developer!
|
||
|
||
✅ DATENBANK STRUKTUR:
|
||
• Task: title, description, priority (1-5)
|
||
• Externe Tasks: fertigstellungsdatum
|
||
• Status: OFFEN, IN_ARBEIT, DONE
|
||
• Spam-Adressen: Auto-Übernehmen bei Empfang
|
||
|
||
✅ FUNKTIONIERT PRAKTISCH:
|
||
• Keine theoretische Zeitplanung
|
||
• Einfache Prio-Nummern (1-5)
|
||
• Daily Mail zeigt STATUS klar
|
||
• Auto-Assign verhindert Vergessen
|
||
• Spam-Handling verhindert Duplikate
|
||
• Reply-Interface: SUPER einfach
|
||
|
||
ERGEBNIS:
|
||
- Georg: Weiß täglich was kritisch ist
|
||
- Developer: Immer genau 1 Task
|
||
- Team: Keine Duplikate, keine Verwirrung
|
||
- Spam: Automatisch gefiltert, niemand wird doppelt belästigt
|
||
```
|
||
|
||
**Dein System ist PRAGMATISCH - es funktioniert im echten Leben!** ✅
|