Files
mailadler/PROJEKT_MANAGEMENT_SYSTEM.md
2026-02-04 02:47:35 +01:00

791 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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!**