// "Master catchup for David. Use at SESSION START, when user says 'catchup', 'was hab ich verpasst', 'was ist los', 'check status', 'zeig blocked', or before Daily Sync. Shows Marius activity, blocked/waiting issues with context. (project)"
| name | accountability-check |
| description | Master catchup for David. Use at SESSION START, when user says 'catchup', 'was hab ich verpasst', 'was ist los', 'check status', 'zeig blocked', or before Daily Sync. Shows Marius activity, blocked/waiting issues with context. (project) |
| allowed-tools | Bash(gh:*), Task, mcp__google_workspace__* |
| version | 3.5.0 |
Kontext ist alles. Nicht nur "Issue #4 ist blocked" sondern:
WICHTIG: 3 Pages holen um alle Marius Comments zu kriegen (Bots verdrängen sonst echte Comments)
# Page 1 (neueste)
gh api "repos/DaveX2001/deliverable-tracking/issues/comments?per_page=100&sort=created&direction=desc&page=1" \
--jq '[.[] | select(.user.login == "MariusWilsch")] | .[0:20] | .[] | "#\(.issue_url | split("/") | .[-1]) [\(.created_at | split("T")[0])]: \(.body[0:120])..."'
# Page 2 (falls Page 1 wenig Marius hat)
gh api "repos/DaveX2001/deliverable-tracking/issues/comments?per_page=100&sort=created&direction=desc&page=2" \
--jq '[.[] | select(.user.login == "MariusWilsch")] | .[0:15] | .[] | "#\(.issue_url | split("/") | .[-1]) [\(.created_at | split("T")[0])]: \(.body[0:120])..."'
# Page 3 (für ältere Comments)
gh api "repos/DaveX2001/deliverable-tracking/issues/comments?per_page=100&sort=created&direction=desc&page=3" \
--jq '[.[] | select(.user.login == "MariusWilsch")] | .[0:10] | .[] | "#\(.issue_url | split("/") | .[-1]) [\(.created_at | split("T")[0])]: \(.body[0:120])..."'
Ziel: ~45 Marius Comments aus 300 totalen Comments (Bots rausgefiltert durch .user.login == "MariusWilsch")
gh api "repos/DaveX2001/deliverable-tracking/issues/events?per_page=100" \
--jq '[.[] | select(.actor.login == "MariusWilsch") | select(.event == "labeled" or .event == "unlabeled")] | .[0:10] | .[] | "#\(.issue.number) - \(.event): \(.label.name) [\(.created_at | split("T")[0])]"'
gh issue list --repo DaveX2001/deliverable-tracking --author MariusWilsch --state all --limit 15 \
--json number,title,createdAt,labels \
--jq '.[] | "#\(.number): \(.title) [\([.labels[].name] | join(", "))]"'
KRITISCH: Für jedes Issue den LATEST COMMENT holen!
# 1. Get blocked issues
gh issue list --repo DaveX2001/deliverable-tracking --state open --label "blocked" \
--json number,title,labels,updatedAt
# 2. For EACH blocked issue, get latest comment:
gh api repos/DaveX2001/deliverable-tracking/issues/ISSUE_NR/comments \
--jq 'if length > 0 then .[-1] | "[\(.created_at | split("T")[0])] \(.user.login): \(.body[0:150])" else "Kein Kommentar" end'
# Get backlog issues count
gh issue list --repo DaveX2001/deliverable-tracking --state open --label "backlog" \
--json number --jq 'length'
Note: Backlog is for ungroomed items. Check during grooming sessions.
# 1. Get in-progress issues
gh issue list --repo DaveX2001/deliverable-tracking --state open --label "in-progress" \
--json number,title,labels,updatedAt
# 2. For EACH, get latest comment
# 3. Flag if no update in 3+ days
Statt einzelne API-Calls, alle Comments auf einmal holen und lokal filtern:
# Get 300 recent comments (3 pages), filter out bots, group by issue
for page in 1 2 3; do
gh api "repos/DaveX2001/deliverable-tracking/issues/comments?per_page=100&sort=created&direction=desc&page=$page" \
--jq '.[] | select(.user.login != "github-actions[bot]")'
done | jq -s 'group_by(.issue_url | split("/") | .[-1]) | .[] | {issue: .[0].issue_url | split("/") | .[-1], latest: .[0] | "[\(.created_at | split("T")[0])] \(.user.login): \(.body[0:100])"}'
Zeige nur wenn:
blocked LabelMoney-Signale:
# Get blocked issues WITHOUT milestone
gh issue list --repo DaveX2001/deliverable-tracking --state open --label "blocked" \
--json number,title,body,milestone \
--jq '.[] | select(.milestone == null) | {number: .number, title: .title, body: .body}'
Dann für jedes: Check body + letzten Comment auf Money-Signale.
Output (nur wenn Matches gefunden):
💰 POTENTIAL GATEKEEPERS (kein Milestone)
#3 Rohdex - "Final approval + invoice"
💬 Latest: "signNow an Roland gesendet"
→ Milestone erstellen?
#111 IITR - "€2,880 Festpreis"
💬 Latest: "Roman confirmed via WhatsApp"
→ Milestone erstellen?
NICHT nerven:
gh issue list --repo DaveX2001/deliverable-tracking --state open \
--json number,title,labels,updatedAt \
--jq '[.[] | select(.updatedAt < (now - 604800 | strftime("%Y-%m-%dT%H:%M:%SZ")))] | .[] | "#\(.number): \(.title) - Letztes Update: \(.updatedAt | split("T")[0])"'
gh issue list --repo DaveX2001/deliverable-tracking --state open --label "to-do" \
--json number,title,createdAt \
--jq '[.[] | select(.createdAt < (now - 1209600 | strftime("%Y-%m-%dT%H:%M:%SZ")))] | .[] | "#\(.number): \(.title) - Erstellt: \(.createdAt | split("T")[0])"'
# Issues closed in last 7 days
gh issue list --repo DaveX2001/deliverable-tracking --state closed --limit 10 \
--json number,title,closedAt \
--jq '.[] | "#\(.number): \(.title) - Closed: \(.closedAt | split("T")[0])"'
# For each: check if last comment has proof (link, commit, screenshot)
Nur ausführen wenn explizit angefragt oder bei Weekly Review.
Skill: email-sync
"Scan last 7 days, match to issues, report gaps"
Skill: transcript-sync
"Process recent transcripts, update issues"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 ACCOUNTABILITY CHECK - [DATE]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
👤 MARIUS ACTIVITY (48h)
Comments: X | Label Changes: X | New Issues: X
Recent:
• #35 [02.12]: "Video Truncation Root Cause..."
• #7 [02.12]: "Token Passthrough verified working"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚫 BLOCKED (X)
#4 Network State: Decide start date
🏷️ NETWORK-STATE | ⏱️ Blocked seit: 02.12 (2 Tage)
💬 [02.12] MariusWilsch: "Waiting for NS to confirm..."
→ Action: Follow up mit Network State
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 BACKLOG (X Items)
→ Grooming needed: Pick items for next sprint
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔄 IN-PROGRESS (X) - Nur wenn 3+ Tage ohne Update
#15 Archibus: Define POC Extension Scope
🏷️ ARCHIBUS | Letztes Update: heute ✅
💬 [04.12] MariusWilsch: "Started scoping..."
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ FLAGS
• Stale (7+ Tage): None ✅
• Stuck To-Do (14+ Tage): None ✅
• Done without proof: Check #XX
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 DAVID's ACTION ITEMS
1. #4 - Network State: Jan oder Feb entscheiden?
2. #3 - Rohdex: Roland's Antwort checken
3. #20 - Archibus: Follow up auf ISO Policies
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Der Latest Comment ist der wichtigste Kontext!
Ohne: "Issue #4 ist blocked" → David weiß nicht warum Mit: "Issue #4 blocked - Marius: Waiting for NS to confirm Jan date" → David weiß genau was los ist
gh api repos/DaveX2001/deliverable-tracking/issues/ISSUE_NR/comments \
--jq 'if length > 0 then .[-1] | "[\(.created_at | split("T")[0])] \(.user.login): \(.body[0:150])" else "Kein Kommentar" end'
Das letzte Kommentar = aktueller Stand der Dinge.
.[-1] = IMMER das allerletzteNEU nach ALT - neueste Comments OBEN!
# RICHTIG: sort=created, direction=desc → neueste zuerst
gh api "repos/DaveX2001/deliverable-tracking/issues/comments?per_page=100&sort=created&direction=desc" \
--jq '[.[] | select(.user.login == "MariusWilsch")] | .[0:30] | .[] | "#\(.issue_url | split("/") | .[-1]) [\(.created_at | split("T")[0])]: \(.body[0:120])..."'
#10 Abtmayr: E-Bike Karte
💬 Latest [04.12] DaveX2001: "Bitte prüfen!..."
REGEL: .[-1] für letzten Comment. Keine Ausnahmen. Keine Filter nach User.
| Check | Threshold |
|---|---|
| Stale | 7+ Tage ohne Update |
| Blocked attention | 3+ Tage |
| Backlog grooming | 50+ Items = too many |
| Stuck to-do | 14+ Tage |
| In-progress flag | 3+ Tage ohne Update |
DaveX2001/deliverable-trackingmarius@wilsch-ai.comKontext. Kontext. Kontext. Latest Comment für jedes Issue.