# Meeting Schema Validation

> Use when processing meeting transcripts - validates YAML frontmatter has required fields (date, type, customer, participants) and proper naming convention

- Skill: `majiayu000/meeting-schema-validation` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/meeting-schema-validation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/meeting-schema-validation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/meeting-schema-validation

---


# 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-synthesis` skill 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:**

```yaml
---
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-DD
- `type`: One of the defined meeting types
- `customer`: Primary customer/company name
- `companies`: Array of all involved companies
- `participants`: Array of participant names

**Optional but recommended:**
- `granola_folder`: Source folder (for tracking)
- `granola_url`: Link to original notes
- `meeting_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:**
1. `YYYY-MM-DD`: Meeting date (matches frontmatter `date` field)
2. `{type}`: Meeting type (matches frontmatter `type` field)
3. `{titleSlug}`: Kebab-case title describing meeting topic
4. `{companyOrFunctionSlug}`: Company name or internal function (kebab-case)
5. `{participantsSlug}`: Key participants (kebab-case, abbreviated)

### Required Content Sections

**All meetings must contain these sections:**

```markdown
## ⬇️ 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`, OR
- `datasets/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, general
- `customer`: Non-empty string
- `companies`: Array with at least one entry
- `participants`: Array with at least one entry
- `tags`: Array (if present)
- `meeting_note_id`: UUID format (if present)
- `granola_url`: Valid URL (if present)

### 3. Validate File Naming

**Extract components from filename:**
```regex
^(\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:**
```bash
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 `date` year?
- Directory function matches meeting context (for internal meetings)?

### 6. Generate Report

**If all pass:**
```markdown
# 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:**
```markdown
# 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-synthesis` skill (before processing meetings)
- `product-planning` workflow (validates meetings in time window)
- `cs-prep` workflow (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 `companies` array: Auto-populate from `customer` field
- Missing `tags` array: Auto-generate from `date` (e.g., "2025Q3") and `type`
- 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. |

