name: meeting-schema-validation description: Use when processing meeting transcripts - validates YAML frontmatter has required fields (date, type, customer, participants) and proper naming convention allowed-tools: Read, Grep
Meeting Schema Validation
Purpose
Ensure all meeting transcripts maintain consistent schema for:
- Reliable meeting synthesis
- Accurate customer attribution
- Proper temporal filtering
- Searchable meeting archives
When to Use This Skill
Activate automatically when:
- Processing new meeting transcripts
meeting-synthesisskill loads meeting files- User adds meetings to
datasets/meetings/ - Validating meeting data integrity
- Any workflow depends on meeting transcript structure
Required Schema
YAML Frontmatter Requirements
All meetings must begin with:
---
date: "YYYY-MM-DD"
type: "sales" | "product" | "customersuccess" | "onboarding" | "strategy" | "ops" | "marketing" | "general"
customer: "Company Name" # Primary customer/company
companies: ["Company A", "Company B"] # All companies involved
participants: ["Person Name", "Another Person"]
granola_folder: "Sales" | "Product" | "CustomerSuccess" | etc.
granola_url: "https://app.granola.so/notes/..."
meeting_note_id: "uuid-format-string"
tags: ["2025Q3", "keyword", "topic"]
---
Required fields:
date: ISO format YYYY-MM-DDtype: One of the defined meeting typescustomer: Primary customer/company namecompanies: Array of all involved companiesparticipants: Array of participant names
Optional but recommended:
granola_folder: Source folder (for tracking)granola_url: Link to original notesmeeting_note_id: Unique identifier (UUID)tags: Searchable keywords and quarters
File Naming Convention
Required format:
YYYY-MM-DD_{type}_{titleSlug}_{companyOrFunctionSlug}_{participantsSlug}.md
Examples:
2025-10-15_sales_discovery-call_prettyboy_jenna-mike.md
2025-10-14_product_feature-planning_internal_jay-sarah.md
2025-10-13_customersuccess_qbr_compoundstudio_alex.md
Components:
YYYY-MM-DD: Meeting date (matches frontmatterdatefield){type}: Meeting type (matches frontmattertypefield){titleSlug}: Kebab-case title describing meeting topic{companyOrFunctionSlug}: Company name or internal function (kebab-case){participantsSlug}: Key participants (kebab-case, abbreviated)
Required Content Sections
All meetings must contain these sections:
## ⬇️ AI Summary
[Executive summary of key points and outcomes]
## ⬇️ Action Items
- [ ] Action item 1
- [ ] Action item 2
## ⬇️ Full Transcript
[Raw transcript or detailed notes]
## ⬇️ Links
- [Link to related resource]
Section order is standardized (aids parsing and synthesis)
Directory Structure
Meetings organized by:
datasets/meetings/
├── Customers/
│ └── {CustomerName}/
│ └── {YYYY}/
│ └── MM-DD_{type}_{title}_{customer}_{participants}.md
└── Internal/
└── {Function}/ # Product, CS, Sales, Marketing, Ops
└── {YYYY}/
└── MM-DD_{type}_{title}_{function}_{participants}.md
Examples:
datasets/meetings/Customers/PrettyBoy/2025/10-15_sales_discovery-call_prettyboy_jenna-mike.md
datasets/meetings/Internal/Product/2025/10-14_product_feature-planning_internal_jay-sarah.md
Validation Process
1. Load Meeting File
Read meeting from:
datasets/meetings/Customers/{Customer}/{YYYY}/{filename}.md, ORdatasets/meetings/Internal/{Function}/{YYYY}/{filename}.md
2. Validate YAML Frontmatter
Check required fields exist:
✓ date present and format YYYY-MM-DD?
✓ type present and valid value?
✓ customer present (non-empty string)?
✓ companies present and array?
✓ participants present and array?
Validate field formats:
date: Regex^\d{4}-\d{2}-\d{2}$type: Must be one of: sales, product, customersuccess, onboarding, strategy, ops, marketing, generalcustomer: Non-empty stringcompanies: Array with at least one entryparticipants: Array with at least one entrytags: Array (if present)meeting_note_id: UUID format (if present)granola_url: Valid URL (if present)
3. Validate File Naming
Extract components from filename:
^(\d{4}-\d{2}-\d{2})_([a-z]+)_([a-z0-9-]+)_([a-z0-9-]+)_([a-z0-9-]+)\.md$
Validate consistency:
- Date in filename matches frontmatter
date? - Type in filename matches frontmatter
type? - Filename uses kebab-case throughout?
- Filename follows YYYY-MM-DD prefix pattern?
4. Validate Content Sections
Check required sections exist:
✓ ## ⬇️ AI Summary
✓ ## ⬇️ Action Items
✓ ## ⬇️ Full Transcript
✓ ## ⬇️ Links
Validation method:
grep -q "## ⬇️ AI Summary" meeting.md
grep -q "## ⬇️ Action Items" meeting.md
grep -q "## ⬇️ Full Transcript" meeting.md
grep -q "## ⬇️ Links" meeting.md
5. Validate Directory Placement
Check file is in correct directory:
- Customer meetings →
datasets/meetings/Customers/{CustomerName}/{YYYY}/ - Internal meetings →
datasets/meetings/Internal/{Function}/{YYYY}/
Consistency checks:
- Directory customer name matches frontmatter
customer? - Directory year matches frontmatter
dateyear? - Directory function matches meeting context (for internal meetings)?
6. Generate Report
If all pass:
# Meeting Schema Validation: PASS
**File**: 2025-10-15_sales_discovery-call_prettyboy_jenna-mike.md
✓ YAML frontmatter complete: All required fields present
✓ Field formats valid:
- date: 2025-10-15 (valid ISO format)
- type: sales (valid type)
- customer: PrettyBoy (present)
- companies: ["PrettyBoy"] (array, 1 entry)
- participants: ["Jenna Smith", "Mike Johnson"] (array, 2 entries)
✓ Filename format valid: YYYY-MM-DD_{type}_{title}_{customer}_{participants}.md
✓ Filename consistency: Date and type match frontmatter
✓ Required sections present: AI Summary, Action Items, Full Transcript, Links
✓ Directory placement valid: Customers/PrettyBoy/2025/
**Status**: Meeting schema validated
If any fail:
# Meeting Schema Validation: FAIL
**File**: 2025-10-15_discovery_prettyboy.md
✗ YAML frontmatter incomplete:
- Missing field: `participants`
- Missing field: `companies`
✗ Filename format invalid:
- Expected: YYYY-MM-DD_{type}_{title}_{customer}_{participants}.md
- Actual: 2025-10-15_discovery_prettyboy.md
- Missing: {participants} component
✗ Required sections missing:
- Missing: ## ⬇️ Action Items
✗ Directory placement incorrect:
- File location: datasets/meetings/2025-10-15_discovery_prettyboy.md
- Expected: datasets/meetings/Customers/PrettyBoy/2025/
**Required fixes**:
1. Add missing frontmatter fields: participants, companies
2. Rename file to include all components
3. Add missing section: ## ⬇️ Action Items
4. Move file to correct directory: Customers/PrettyBoy/2025/
**Status**: NEEDS_FIX
7. Block or Approve
If PASS:
- Meeting can be used in synthesis workflows
- Schema integrity confirmed
- Ready for processing
If FAIL:
- Meeting blocked from synthesis
- Workflows depending on this meeting flagged
- Must address violations before use
Integration with Workflows
Meeting Synthesis Integration
Invoked by:
meeting-synthesisskill (before processing meetings)product-planningworkflow (validates meetings in time window)cs-prepworkflow (validates customer meeting collection)
Blocking behavior:
- If schema validation fails → meeting skipped from synthesis
- User notified of schema violations
- Invalid meetings logged for manual review
Manual Validation
Direct usage: User can validate existing meetings:
"Validate meeting schema for datasets/meetings/Customers/PrettyBoy/2025/10-15_sales_discovery-call_prettyboy_jenna-mike.md"
Auto-Correction
For minor issues, offer auto-correction:
Correctable issues:
- Missing
companiesarray: Auto-populate fromcustomerfield - Missing
tagsarray: Auto-generate fromdate(e.g., "2025Q3") andtype - Incorrect directory: Suggest correct path and offer to move
Non-correctable issues:
- Missing required fields (
date,type,customer,participants) - Invalid field formats
- Missing required sections → These require manual fixes
Success Criteria
Meeting schema validated when:
- All required frontmatter fields present and valid
- Filename follows naming convention
- Filename consistent with frontmatter
- All required sections present
- File in correct directory
- Validation report shows PASS status
Common Mistakes
| Mistake | Fix |
|---|---|
Missing participants field | Add array of participant names |
Invalid type value | Use one of defined types (sales, product, etc.) |
| Date format "10/15/2025" | Use ISO format: "2025-10-15" |
| Filename missing components | Include all: date_type_title_customer_participants |
| Wrong directory | Move to Customers/{Name}/{YYYY}/ or Internal/{Function}/{YYYY}/ |
Related Skills
- meeting-synthesis: Uses validated meetings for signal extraction
- source-integrity: Complementary validation for other source types
- product-planning: Depends on valid meeting schema
Anti-Rationalization Blocks
Common excuses that are explicitly rejected:
| Rationalization | Reality |
|---|---|
| "Missing field is optional" | Required fields are mandatory. |
| "Close enough" on naming | Follow convention exactly. |
| "Will fix schema later" | Fix now or skip from synthesis. |
| "Manual meetings don't need schema" | All meetings follow schema. |