Run multi-stage quality assurance on marketing assets with channel-specific validation and approval-ready reports
Scanned 9/3/2026
Install to Claude Code
npx -y skills add jmagly/aiwg --skill qa-protocol --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Qa Protocol?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jmagly-qa-protocol-ff6b9c9e)More formats (shields.io, HTML) on the badges page.
---
namespace: aiwg
name: qa-protocol
platforms: [all]
description: Run multi-stage quality assurance on marketing assets with channel-specific validation and approval-ready reports
---
# qa-protocol
Multi-stage quality assurance protocol for marketing assets with channel-specific validation.
## Triggers
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
- "launch checklist" / "pre-flight check" → pre-launch validation
- "content QA" → quality assurance shorthand
## Purpose
This skill implements comprehensive quality assurance across marketing deliverables by:
- Running channel-specific validation rules
- Checking technical specifications
- Validating content accuracy
- Ensuring brand compliance
- Generating approval-ready reports
## Behavior
When triggered, this skill:
1. **Identifies asset type and channel**:
- Parse asset metadata
- Determine target channel(s)
- Load channel-specific QA rules
2. **Runs technical validation**:
- File format and dimensions
- Resolution and color space
- File size limits
- Naming conventions
3. **Validates content**:
- Copy accuracy and spelling
- Link verification
- CTA presence and clarity
- Legal requirements
4. **Checks brand compliance**:
- Invoke brand-compliance skill
- Visual identity validation
- Tone consistency
5. **Applies channel rules**:
- Platform-specific requirements
- Character limits
- Aspect ratios
- File type requirements
6. **Generates QA report**:
- Pass/fail per criterion
- Blocking vs advisory issues
- Remediation guidance
- Approval recommendation
## Channel Specifications
### Social Media
```yaml
social_channels:
instagram:
feed_post:
aspect_ratios: [1:1, 4:5, 1.91:1]
max_video_duration: 60s
max_carousel: 10
caption_limit: 2200
hashtag_limit: 30
story:
aspect_ratio: 9:16
max_duration: 15s
dimensions: 1080x1920
reel:
aspect_ratio: 9:16
max_duration: 90s
dimensions: 1080x1920
linkedin:
post:
image_ratio: [1.91:1, 1:1, 4:5]
video_duration: [3s, 10min]
text_limit: 3000
hashtag_limit: 5
article:
header_image: 1200x627
min_words: 500
twitter:
tweet:
text_limit: 280
image_ratio: [16:9, 1:1]
max_images: 4
video_duration: [0.5s, 140s]
thread:
max_tweets: 25
facebook:
post:
text_limit: 63206
image_ratio: [1.91:1, 1:1, 4:5]
video_duration: [1s, 240min]
ad:
primary_text: 125
headline: 40
description: 30
image_ratio: 1.91:1
```
### Email
```yaml
email_specs:
general:
max_width: 600px
max_file_size: 100KB per image
total_size: 1MB recommended
subject_line: 50 chars optimal
preheader: 85-100 chars
images:
formats: [jpg, png, gif]
max_dimensions: 600x1200
alt_text: required
background_colors: required (image blocking)
links:
tracking: required
utm_params: required
unsubscribe: required
physical_address: required
testing:
clients: [gmail, outlook, apple_mail, yahoo]
dark_mode: required
mobile_responsive: required
```
### Digital Ads
```yaml
ad_specs:
google_display:
formats:
- {size: "300x250", name: "medium_rectangle"}
- {size: "336x280", name: "large_rectangle"}
- {size: "728x90", name: "leaderboard"}
- {size: "300x600", name: "half_page"}
- {size: "320x50", name: "mobile_leaderboard"}
max_file_size: 150KB
formats: [jpg, png, gif, html5]
animation_length: 30s max
meta_ads:
image:
ratio: 1.91:1
min_resolution: 1080x1080
text_overlay: <20% recommended
video:
ratio: [1:1, 4:5, 9:16]
duration: [1s, 241min]
max_file_size: 4GB
carousel:
cards: [2, 10]
ratio: 1:1
```
### Print
```yaml
print_specs:
general:
color_space: CMYK
resolution: 300dpi minimum
bleed: 0.125in (3mm)
safe_zone: 0.25in from trim
formats:
letter: 8.5x11in
a4: 210x297mm
business_card: 3.5x2in
brochure_trifold: 8.5x11in folded
preflight:
fonts_embedded: required
images_linked: check
overprint: verify
transparency: flatten for offset
```
## QA Checklist Categories
### Content Validation
```yaml
content_checks:
copy:
- spelling_grammar: Run spell check
- brand_terminology: Use approved terms
- cta_present: Clear call-to-action
- value_proposition: Key message present
- tone_voice: Matches brand voice
accuracy:
- dates_times: Verify all dates
- prices_offers: Confirm pricing
- contact_info: Validate phone/email
- links_urls: Test all links
- legal_claims: Substantiation check
localization:
- translations: Accuracy check
- cultural_sensitivity: Review imagery
- regional_compliance: Local regulations
```
### Technical Validation
```yaml
technical_checks:
files:
- naming_convention: Follows standard
- file_format: Correct for channel
- file_size: Within limits
- resolution: Meets minimum
layout:
- safe_zones: Content within bounds
- bleed_setup: Correct for print
- aspect_ratio: Matches spec
- responsive: Mobile optimized
accessibility:
- alt_text: Present and descriptive
- contrast_ratio: WCAG compliant
- font_size: Minimum 14px
- color_independence: Not color-only
```
### Brand Validation
```yaml
brand_checks:
visual:
- logo_usage: Correct version and placement
- color_palette: On-brand colors only
- typography: Approved fonts
- imagery_style: Matches guidelines
verbal:
- tone: Consistent with brand voice
- messaging: Key messages present
- tagline: Correct usage
- terminology: Approved glossary
```
## QA Report Format
```markdown
# Quality Assurance Report
**Asset**: Holiday Email Campaign - Hero Banner
**Channel**: Email
**Date**: 2025-12-08
**QA Specialist**: qa-protocol skill
## Summary
| Category | Checks | Passed | Failed | Warnings |
|----------|--------|--------|--------|----------|
| Content | 12 | 11 | 0 | 1 |
| Technical | 8 | 8 | 0 | 0 |
| Brand | 6 | 5 | 1 | 0 |
| Channel | 10 | 9 | 1 | 0 |
| **Total** | **36** | **33** | **2** | **1** |
## Status: CONDITIONAL PASS
Asset may proceed after addressing 2 blocking issues.
## Blocking Issues
### BLK-001: Missing Alt Text
- **Category**: Channel (Email)
- **Element**: Hero image
- **Requirement**: Alt text required for email images
- **Fix**: Add descriptive alt text: "Holiday sale - 30% off all products"
### BLK-002: Off-Brand Color
- **Category**: Brand
- **Element**: CTA button
- **Current**: #FF6B6B (coral)
- **Required**: #0066CC (brand blue) or #00AA55 (brand green)
- **Fix**: Update button color to brand palette
## Warnings
### WARN-001: Subject Line Length
- **Category**: Content
- **Current**: 62 characters
- **Recommended**: 50 characters optimal
- **Note**: May truncate on mobile devices
- **Suggestion**: "Holiday Sale: 30% Off Everything" (35 chars)
## Passed Checks
### Content
- [x] Spelling and grammar verified
- [x] CTA present and clear ("Shop Now")
- [x] Value proposition stated (30% off)
- [x] Dates accurate (Dec 15-25)
- [x] Links functional (3 tested)
- [x] Unsubscribe link present
- [x] Physical address included
- [x] Price claims verified
- [x] Terms link present
- [x] Preheader text present
- [x] Tone matches brand voice
### Technical
- [x] File size: 450KB (under 1MB limit)
- [x] Image resolution: 600x400 (correct)
- [x] Format: HTML with inline CSS
- [x] Width: 600px (correct)
- [x] Images have fallback colors
- [x] Mobile responsive
- [x] Dark mode compatible
- [x] Client tested (Gmail, Outlook, Apple Mail)
### Brand
- [x] Logo: Correct horizontal version
- [x] Typography: Inter font family
- [x] Imagery: On-brand photography style
- [x] Tone: Friendly professional
- [x] Tagline: Correct usage
### Channel (Email)
- [x] Subject line present
- [x] Preheader configured
- [x] UTM parameters present
- [x] Tracking pixels configured
- [x] List-unsubscribe header
- [x] SPF/DKIM configured
- [x] Preview text optimized
- [x] Footer compliant
- [x] Mobile preview checked
## Approval Recommendation
**Status**: CONDITIONAL
Asset is ready for approval pending:
1. Add alt text to hero image
2. Update CTA button to brand color
Estimated fix time: 15 minutes
## Sign-off
- [ ] Content Owner: _____________
- [ ] Brand Manager: _____________
- [ ] Legal (if applicable): _____________
- [ ] Final Approver: _____________
```
## Usage Examples
### Full QA Check
```
User: "QA this email campaign"
Skill executes:
1. Detect asset type: Email campaign
2. Load email QA rules
3. Run content validation
4. Run technical checks
5. Run brand compliance
6. Apply email-specific rules
7. Generate report
Output:
"QA Complete: CONDITIONAL PASS
36 checks run:
- Passed: 33
- Failed: 2
- Warnings: 1
Blocking Issues:
1. Missing alt text on hero image
2. CTA button uses off-brand color
Report: .aiwg/marketing/qa/email-holiday-qa-report.md"
```
### Channel-Specific Check
```
User: "Validate for Instagram"
Skill focuses on:
- Instagram feed/story/reel specs
- Aspect ratio validation
- Caption length check
- Hashtag count
Output:
"Instagram Validation: PASS
All checks passed:
- Aspect ratio: 1:1 (correct for feed)
- Resolution: 1080x1080 (meets minimum)
- Caption: 180 chars (under 2200 limit)
- Hashtags: 12 (under 30 limit)
Ready for posting."
```
### Pre-Flight Check
```
User: "Pre-flight check for print"
Skill validates:
- CMYK color space
- 300dpi resolution
- Bleed setup
- Font embedding
- Linked images
Output:
"Print Pre-flight: FAIL
Critical issues:
1. Color space: RGB (need CMYK)
2. Resolution: 150dpi (need 300dpi)
3. Bleed: Not set (need 0.125in)
Must fix before sending to printer."
```
## Integration
This skill uses:
- `brand-compliance`: For brand validation dimension
- `project-awareness`: For detecting asset context
- `artifact-metadata`: For tracking QA status
## Agent Orchestration
```yaml
agents:
content_review:
agent: editor
focus: Copy accuracy, spelling, grammar
brand_review:
agent: brand-guardian
focus: Visual and verbal brand compliance
technical_review:
agent: quality-controller
focus: Specs, formats, technical requirements
legal_review:
agent: legal-reviewer
focus: Claims, disclosures, compliance
condition: has_claims == true
```
## Configuration
### Channel Rules Location
```yaml
qa_config:
channel_specs: .aiwg/marketing/config/channel-specs.yaml
brand_rules: .aiwg/marketing/brand/
qa_templates: templates/governance/qa-checklist.md
```
### Severity Levels
```yaml
severity:
blocking:
- missing_legal_disclosure
- broken_link
- wrong_price
- missing_alt_text
- off_brand_logo
warning:
- suboptimal_length
- minor_typo
- style_preference
advisory:
- optimization_suggestion
- best_practice_note
```
## Output Locations
- QA reports: `.aiwg/marketing/qa/{asset}-qa-report.md`
- Checklists: `.aiwg/marketing/qa/checklists/`
- Approval records: `.aiwg/marketing/approvals/`
## References
- Channel specifications: .aiwg/marketing/config/channel-specs.yaml
- Brand guidelines: .aiwg/marketing/brand/
- QA templates: templates/governance/qa-checklist.md
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!