vt-c-project-updates¶
Analyze PO-Weekly meeting transcripts and generate Asana project status updates. Orchestrates a 7-stage pipeline: parse transcript, segment by project, match to Asana projects, extract status updates, interactive review, write to Asana, generate summary report.
Plugin: project-updates
Category: Other
Command: /vt-c-project-updates
PO-Weekly Project Updates¶
Analyze a PO-Weekly meeting transcript and generate Asana project status updates automatically. High-confidence updates are applied directly; uncertain ones are presented for interactive review.
Prerequisites¶
Before running the pipeline, verify the environment:
- Check that
ASANA_PATis set: -
If
patis empty: display this error and stop: -
Resolve the transcript file:
- If a transcript path was provided as argument: use it directly
- If no argument: search
00-Inbox/in the current working directory for files matching*Transcript*PO-Weekly*.md, sorted by modification date descending - If exactly one match: confirm with AskUserQuestion — "Found transcript: [filename]. Use this file?"
- If multiple matches: present the list via AskUserQuestion for selection
-
If no matches: display error and stop:
-
Resolve the config file:
- Look for
TOOLKIT_ROOT/configs/project-config.yaml - If missing: run Stage 3 (seed from Asana API) before proceeding
- If present: validate basic structure (must have
portfolioskey)
Stage 1: Parse Transcript (SPEC-061)¶
Purpose: Parse the markdown transcript into structured speaker segments.
Input: Raw markdown transcript file (Granola/Teams format with **[MM:SS] Speaker Name:** pattern)
Output: List of {timestamp, speaker, text} segments
Script: TOOLKIT_ROOT/scripts/parse_transcript.py
Implemented by SPEC-061
Stage 2: Segment by Project (SPEC-062)¶
Purpose: Group speaker segments into project-level sections by detecting moderator project announcements.
Input: Parsed speaker segments from Stage 1
Output: List of {project_name_spoken, segments[], speakers[]} project sections
Script: TOOLKIT_ROOT/scripts/segment_projects.py
Implemented by SPEC-062
Stage 3: Load Project Config (SPEC-063)¶
Purpose: Load or seed the persistent project-to-Asana mapping configuration.
Input: Asana API access (via ASANA_PAT)
Output: Loaded project-config.yaml with all portfolios and projects
Script: TOOLKIT_ROOT/scripts/seed_config.py
If configs/project-config.yaml does not exist, this script pulls all portfolios and projects from Asana and creates the initial config. If it exists, the script validates and returns the existing config.
Implemented by SPEC-063
Stage 4: Match to Asana Projects (SPEC-064)¶
Purpose: Match spoken project names from transcript segments against the config using fuzzy matching and alias lookup.
Input: Project sections from Stage 2 + project config from Stage 3
Output: Matched sections with asana_project_gid and asana_project_name resolved. Unmatched projects flagged for review.
Script: TOOLKIT_ROOT/scripts/match_projects.py
When a fuzzy match is confirmed by the user during interactive review (Stage 6), the spoken name is added to aliases in the config for future runs.
Implemented by SPEC-064
Stage 5: Extract Status Updates (SPEC-065)¶
Purpose: For each matched project section, extract structured status information using LLM analysis.
Input: Matched project sections with transcript text
Output: List of {project_gid, was_passiert, was_kommt, status_farbe, konfidenz, konfidenz_grund, quellen[]}
This stage uses Claude's LLM capabilities inline (no external script) to analyze the German-language transcript and extract:
- was_passiert: What happened this week
- was_kommt: What's coming next
- status_farbe: One of planmaessig, gefaehrdet, unplanmaessig, zurueckgestellt, erledigt, verworfen
- konfidenz: hoch, mittel, or niedrig
- konfidenz_grund: Why this confidence level was assigned
- quellen: Relevant quotes from the transcript
Implemented by SPEC-065
Stage 6: Interactive Review (SPEC-066)¶
Purpose: Present uncertain updates for user confirmation and flag projects not mentioned in the meeting.
Input: Extracted status updates from Stage 5 + full project list from config Output: Confirmed/corrected status updates ready for Asana
Flow:
1. Auto-apply updates with konfidenz: hoch (show count)
2. Present each konfidenz: mittel or niedrig update via AskUserQuestion:
- Show project name, proposed status, confidence reason, and source quotes
- Options: Confirm / Edit / Skip
3. List projects from config that were not mentioned in the transcript:
- "These N projects were not discussed. Keep current status?"
- Allow user to update individual ones
Implemented by SPEC-066
Stage 7: Write to Asana & Report (SPEC-067, SPEC-068)¶
Purpose: Write confirmed status updates to Asana via API and generate a summary report.
Input: Confirmed status updates from Stage 6 Output: Asana status updates created + summary report displayed
Asana API calls (per project):
POST /projects/{project_gid}/status_updates
{
"text": "{was_passiert}\n\nNächste Schritte:\n{was_kommt}",
"color": "{mapped_status_color}"
}
Status color mapping (German enum to Asana API color):
- planmaessig → green
- gefaehrdet → yellow
- unplanmaessig → red
- zurueckgestellt → blue
- erledigt → complete
- verworfen → red
Summary report displayed after all writes:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PO-Weekly Status Update — [date]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
X updates auto-applied (high confidence)
Y updates reviewed and confirmed
Z projects not discussed (status unchanged)
W updates failed (see errors below)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Archiving: Move the processed transcript to 02-Knowledge/04-Dokumente/ with date prefix.
Implemented by SPEC-067 (Asana write) and SPEC-068 (report + archiving)
Config File Format¶
The persistent project configuration lives at TOOLKIT_ROOT/configs/project-config.yaml:
generated_from_asana: "2026-03-13"
portfolios:
- name: "VisiTrans"
asana_portfolio_gid: "1234567890"
projects:
- asana_gid: "9876543210"
asana_name: "V004-VisiTrans Handbuch ist erstellt und aktuell"
sort_order: 4
aliases:
- "Handbuch Rolf"
- "Handbuch"
last_updated: "2026-03-13"
See plugins/project-updates/skills/project-updates/config/README.md for the full schema documentation.