diff options
| -rw-r--r-- | .ai/workflows/process-meeting-transcript.org | 73 | ||||
| -rw-r--r-- | claude-templates/.ai/workflows/process-meeting-transcript.org | 73 |
2 files changed, 84 insertions, 62 deletions
diff --git a/.ai/workflows/process-meeting-transcript.org b/.ai/workflows/process-meeting-transcript.org index 07f8f3e..4dd340f 100644 --- a/.ai/workflows/process-meeting-transcript.org +++ b/.ai/workflows/process-meeting-transcript.org @@ -23,26 +23,22 @@ Trigger this workflow when: * The Workflow -** Step 1: Identify Engagement and Write Session Context +** Step 1: Set Up Session Context and Engagement Homes Before starting transcript processing: -1. *Identify which engagement this meeting belongs to:* - - DeepSat (default for current work) - - Vineti (historical) - - Salesforce (historical) - - If unclear, ask Craig - -2. *Set destination paths based on engagement:* +1. *Note the destination homes for files that classify as this project's* (classification itself is per file, in Step 2): - Assets: ~{engagement}/assets/~ (e.g., ~deepsat/assets/~) - Meetings: ~{engagement}/meetings/~ (e.g., ~deepsat/meetings/~) - Knowledge: ~{engagement}/knowledge.org~ for reference -3. Update .ai/session-context.org with current status: +2. Update .ai/session-context.org with current status: - Note that we're about to process a meeting transcript - Get meeting name by checking ~/.emacs.d/data/*cal.org (match date/time to transcript timestamp) - If meeting not found in calendar, ask Craig for the meeting title +Classification is per recording, not per session — a single run can carry this-project, cross-project, and personal recordings (the 2026-06-10 run had a kit-project recording alongside two DeepSat ones), so no session-level engagement default exists. + ** Step 2: Find Recording Files Find and match recording files with calendar events. *Run sub-steps 1 and 3 (recording list + calendar dump) as a single parallel batch* — they're independent. Sub-step 2 (parse timestamps) and sub-step 4 (matching) work from those two outputs in-memory, so they're sequential after the batch. @@ -60,16 +56,22 @@ Find and match recording files with calendar events. *Run sub-steps 1 and 3 (rec cat ~/.emacs.d/data/dcal.org | grep -A2 "YYYY-MM-DD" #+end_src -4. **Present selection table to Craig:** - | Filename | Meeting / Date-Time | - |-----------------------------+--------------------------------| - | 2026-02-03_10-00-00.mkv | DeepSat Standup (from calendar)| - | 2026-02-03_14-30-00.mkv | 2026-02-03 14:30 (no match) | +4. **Classify every file, then present the selection table to Craig.** Classification happens BEFORE transcription, from the calendar match and attendees. Three values: this project / another .ai project (name it) / personal. No file proceeds unclassified — an unmatchable file is a question for Craig, not a default. + + | Filename | Meeting / Date-Time | Engagement | + |-----------------------------+---------------------------------+------------------------| + | 2026-02-03_10-00-00.mkv | DeepSat Standup (from calendar) | this project (DeepSat) | + | 2026-06-10_15-00-00.m4a | Arusyak sync (from calendar) | kit | + | 2026-02-03_14-30-00.mkv | 2026-02-03 14:30 (no match) | ASK CRAIG | 5. **Craig selects files:** One, several, or all files to process 6. **Queue for processing:** Selected files ordered oldest → newest for serial processing +*** Cross-project routing (files classified as another project's) + +Per =cross-project.md=: transcribe and label here, then deliver the *labeled transcript PLUS an outcome note* via =inbox-send <project> --file ...=, and copy the recording to the owning project's =meetings/= dir. File NOTHING in this project's assets. The outcome note carries the same extraction Step 11 requires (summary, decisions, the owner's owed actions) so the receiving project can fold it without re-reading the transcript. Worked example: kit's =2026-06-10-1554-from-work-handoff-arusyak-sync-outcome.org=. Personal recordings route the same way to the personal project that owns the topic. + ** Step 3: Extract Audio (video recordings only) *Skip this step for .m4a files* — they are already audio and can go directly to transcription. @@ -206,7 +208,18 @@ Add a meeting summary section to .ai/session-context.org including: 5. **New Contacts** - People to add to notes.org -** Step 11: Write Session Context File +** Step 11: Analyze and Extract (mandatory) + +Per transcript, after speaker labeling and filing. This is the step that forces analysis into durable homes — the workflow's old defect was ending at file hygiene with nothing landing in todo.org or knowledge.org. + +1. *Action items → todo.org.* Every action item gets an owner. Craig-owed items become tasks (or dated folds into the existing task they advance) per =todo-format.md=; teammate-owned items are recorded in the relevant task body as expectations, not as Craig tasks. Link the transcript from every task it feeds. +2. *Decisions + new ground truth → knowledge.org* (or the engagement's knowledge home): partner/vendor signals, architecture decisions, capability states, cost signals. +3. *Architecture-relevant meetings* → offer the =fold-meeting-into-architecture= workflow (project-specific where present). +4. *Cross-project transcripts* → the same extraction goes into the inbox-send outcome note instead of local files. + +This mirrors meeting-prep.org Phase 6 (post-meeting action-item extraction) — the same discipline, now also covering recordings processed in bulk rather than meetings that had a prep doc. + +** Step 12: Write Session Context File Update .ai/session-context.org with: - Files created this session (transcript, recording) @@ -230,9 +243,9 @@ When processing multiple recordings in a queue: - Resume at correct position in queue - Avoid reprocessing already-completed files -** Step 12: Clean Up Source Files +** Step 13: Clean Up Source Files (gated — see the Exit Gate) -After successful completion of all previous steps, delete the source files from ~/sync/recordings/: +Only after the Exit Gate below passes, delete the source files from ~/sync/recordings/: 1. **Delete the original recording:** #+begin_src bash @@ -286,21 +299,19 @@ Keep this list updated as new patterns emerge: 5. **Note new learnings** - Update engagement knowledge.org with new contacts, corrections, or context after processing -* Validation Checklist +* Exit Gate (hard contract) + +The workflow is not complete, and Step 13 (delete sources) MUST NOT run, until every line below holds. Deleting recordings is the irreversible step, so it stays last and gated. A skipped step must be impossible to mistake for a completed one — the same principle as the triage engine's SCAN FAILED rule. -- [ ] Engagement identified and destination paths set +- [ ] Every recording is classified (this project / named other project / personal) — none defaulted - [ ] Session context written before starting -- [ ] Recording files listed and matched with calendar -- [ ] Craig selected files to process -- [ ] Audio extracted to .m4a (mono, 96k AAC) -- [ ] AssemblyAI transcription completed -- [ ] Intermediate .m4a file deleted -- [ ] Transcript file verified -- [ ] All speakers identified -- [ ] Speaker identifications confirmed with Craig -- [ ] Transcript corrected and saved to {engagement}/assets/ -- [ ] Recording copied to {engagement}/meetings/ with proper name -- [ ] Session context updated with meeting summary +- [ ] Recording files listed and matched with calendar; Craig selected files +- [ ] Audio extracted, AssemblyAI transcription completed, intermediate .m4a deleted +- [ ] All speakers identified and confirmed with Craig +- [ ] This-project transcripts corrected and saved to {engagement}/assets/; recordings copied to {engagement}/meetings/ +- [ ] Cross-project files delivered: labeled transcript + outcome note via inbox-send, recording copied to the owning project's meetings/, nothing filed in this project's assets +- [ ] Step 11 ran per transcript: every extracted action item written to todo.org (or the outcome note) with an owner; decisions and ground truth written to knowledge.org (or the outcome note) +- [ ] Session context updated with the meeting summary AND the session log records the extraction - [ ] New contacts/info flagged for {engagement}/knowledge.org update - [ ] (If multiple files) Queue position tracked in session context -- [ ] Source files deleted from ~/sync/recordings/ +- [ ] Only then: source files deleted from ~/sync/recordings/ diff --git a/claude-templates/.ai/workflows/process-meeting-transcript.org b/claude-templates/.ai/workflows/process-meeting-transcript.org index 07f8f3e..4dd340f 100644 --- a/claude-templates/.ai/workflows/process-meeting-transcript.org +++ b/claude-templates/.ai/workflows/process-meeting-transcript.org @@ -23,26 +23,22 @@ Trigger this workflow when: * The Workflow -** Step 1: Identify Engagement and Write Session Context +** Step 1: Set Up Session Context and Engagement Homes Before starting transcript processing: -1. *Identify which engagement this meeting belongs to:* - - DeepSat (default for current work) - - Vineti (historical) - - Salesforce (historical) - - If unclear, ask Craig - -2. *Set destination paths based on engagement:* +1. *Note the destination homes for files that classify as this project's* (classification itself is per file, in Step 2): - Assets: ~{engagement}/assets/~ (e.g., ~deepsat/assets/~) - Meetings: ~{engagement}/meetings/~ (e.g., ~deepsat/meetings/~) - Knowledge: ~{engagement}/knowledge.org~ for reference -3. Update .ai/session-context.org with current status: +2. Update .ai/session-context.org with current status: - Note that we're about to process a meeting transcript - Get meeting name by checking ~/.emacs.d/data/*cal.org (match date/time to transcript timestamp) - If meeting not found in calendar, ask Craig for the meeting title +Classification is per recording, not per session — a single run can carry this-project, cross-project, and personal recordings (the 2026-06-10 run had a kit-project recording alongside two DeepSat ones), so no session-level engagement default exists. + ** Step 2: Find Recording Files Find and match recording files with calendar events. *Run sub-steps 1 and 3 (recording list + calendar dump) as a single parallel batch* — they're independent. Sub-step 2 (parse timestamps) and sub-step 4 (matching) work from those two outputs in-memory, so they're sequential after the batch. @@ -60,16 +56,22 @@ Find and match recording files with calendar events. *Run sub-steps 1 and 3 (rec cat ~/.emacs.d/data/dcal.org | grep -A2 "YYYY-MM-DD" #+end_src -4. **Present selection table to Craig:** - | Filename | Meeting / Date-Time | - |-----------------------------+--------------------------------| - | 2026-02-03_10-00-00.mkv | DeepSat Standup (from calendar)| - | 2026-02-03_14-30-00.mkv | 2026-02-03 14:30 (no match) | +4. **Classify every file, then present the selection table to Craig.** Classification happens BEFORE transcription, from the calendar match and attendees. Three values: this project / another .ai project (name it) / personal. No file proceeds unclassified — an unmatchable file is a question for Craig, not a default. + + | Filename | Meeting / Date-Time | Engagement | + |-----------------------------+---------------------------------+------------------------| + | 2026-02-03_10-00-00.mkv | DeepSat Standup (from calendar) | this project (DeepSat) | + | 2026-06-10_15-00-00.m4a | Arusyak sync (from calendar) | kit | + | 2026-02-03_14-30-00.mkv | 2026-02-03 14:30 (no match) | ASK CRAIG | 5. **Craig selects files:** One, several, or all files to process 6. **Queue for processing:** Selected files ordered oldest → newest for serial processing +*** Cross-project routing (files classified as another project's) + +Per =cross-project.md=: transcribe and label here, then deliver the *labeled transcript PLUS an outcome note* via =inbox-send <project> --file ...=, and copy the recording to the owning project's =meetings/= dir. File NOTHING in this project's assets. The outcome note carries the same extraction Step 11 requires (summary, decisions, the owner's owed actions) so the receiving project can fold it without re-reading the transcript. Worked example: kit's =2026-06-10-1554-from-work-handoff-arusyak-sync-outcome.org=. Personal recordings route the same way to the personal project that owns the topic. + ** Step 3: Extract Audio (video recordings only) *Skip this step for .m4a files* — they are already audio and can go directly to transcription. @@ -206,7 +208,18 @@ Add a meeting summary section to .ai/session-context.org including: 5. **New Contacts** - People to add to notes.org -** Step 11: Write Session Context File +** Step 11: Analyze and Extract (mandatory) + +Per transcript, after speaker labeling and filing. This is the step that forces analysis into durable homes — the workflow's old defect was ending at file hygiene with nothing landing in todo.org or knowledge.org. + +1. *Action items → todo.org.* Every action item gets an owner. Craig-owed items become tasks (or dated folds into the existing task they advance) per =todo-format.md=; teammate-owned items are recorded in the relevant task body as expectations, not as Craig tasks. Link the transcript from every task it feeds. +2. *Decisions + new ground truth → knowledge.org* (or the engagement's knowledge home): partner/vendor signals, architecture decisions, capability states, cost signals. +3. *Architecture-relevant meetings* → offer the =fold-meeting-into-architecture= workflow (project-specific where present). +4. *Cross-project transcripts* → the same extraction goes into the inbox-send outcome note instead of local files. + +This mirrors meeting-prep.org Phase 6 (post-meeting action-item extraction) — the same discipline, now also covering recordings processed in bulk rather than meetings that had a prep doc. + +** Step 12: Write Session Context File Update .ai/session-context.org with: - Files created this session (transcript, recording) @@ -230,9 +243,9 @@ When processing multiple recordings in a queue: - Resume at correct position in queue - Avoid reprocessing already-completed files -** Step 12: Clean Up Source Files +** Step 13: Clean Up Source Files (gated — see the Exit Gate) -After successful completion of all previous steps, delete the source files from ~/sync/recordings/: +Only after the Exit Gate below passes, delete the source files from ~/sync/recordings/: 1. **Delete the original recording:** #+begin_src bash @@ -286,21 +299,19 @@ Keep this list updated as new patterns emerge: 5. **Note new learnings** - Update engagement knowledge.org with new contacts, corrections, or context after processing -* Validation Checklist +* Exit Gate (hard contract) + +The workflow is not complete, and Step 13 (delete sources) MUST NOT run, until every line below holds. Deleting recordings is the irreversible step, so it stays last and gated. A skipped step must be impossible to mistake for a completed one — the same principle as the triage engine's SCAN FAILED rule. -- [ ] Engagement identified and destination paths set +- [ ] Every recording is classified (this project / named other project / personal) — none defaulted - [ ] Session context written before starting -- [ ] Recording files listed and matched with calendar -- [ ] Craig selected files to process -- [ ] Audio extracted to .m4a (mono, 96k AAC) -- [ ] AssemblyAI transcription completed -- [ ] Intermediate .m4a file deleted -- [ ] Transcript file verified -- [ ] All speakers identified -- [ ] Speaker identifications confirmed with Craig -- [ ] Transcript corrected and saved to {engagement}/assets/ -- [ ] Recording copied to {engagement}/meetings/ with proper name -- [ ] Session context updated with meeting summary +- [ ] Recording files listed and matched with calendar; Craig selected files +- [ ] Audio extracted, AssemblyAI transcription completed, intermediate .m4a deleted +- [ ] All speakers identified and confirmed with Craig +- [ ] This-project transcripts corrected and saved to {engagement}/assets/; recordings copied to {engagement}/meetings/ +- [ ] Cross-project files delivered: labeled transcript + outcome note via inbox-send, recording copied to the owning project's meetings/, nothing filed in this project's assets +- [ ] Step 11 ran per transcript: every extracted action item written to todo.org (or the outcome note) with an owner; decisions and ground truth written to knowledge.org (or the outcome note) +- [ ] Session context updated with the meeting summary AND the session log records the extraction - [ ] New contacts/info flagged for {engagement}/knowledge.org update - [ ] (If multiple files) Queue position tracked in session context -- [ ] Source files deleted from ~/sync/recordings/ +- [ ] Only then: source files deleted from ~/sync/recordings/ |
