name: narrative-review description: "Score and review existing narrative files against story arc quality gates. This skill should be used when the user asks to 'review a narrative', 'score a narrative', 'check narrative quality', 'validate narrative', 'audit narrative', 'grade a narrative', 'evaluate narrative quality', 'narrative scorecard', 'rate my narrative', 'run quality gates on a narrative', or when the narrative-reviewer agent evaluates a generated narrative." allowed-tools: Read, Write, Edit, Glob, Grep
Narrative Review
Purpose
Evaluate an existing narrative markdown file against the cogni-narrative quality gates. Produce a structured scorecard with pass/warn/fail per gate, an overall score (0-100), and the top 3 actionable improvement suggestions.
When to Use
- Review a narrative after generation to assess quality
- Audit an existing insight summary for arc compliance
- Compare narrative quality before and after edits
- Score narratives for quality tracking across projects
Not for:
- Generating new narratives (use
cogni-narrative:narrativeskill instead) - Editing or rewriting narratives (use copywriter skill instead)
- Adapting narratives to other formats (use
cogni-narrative:narrative-adaptskill instead)
Parameters
| Parameter | Required | Description |
|---|---|---|
--source-path |
Yes | Path to the narrative .md file to review |
--arc-id |
No | Override arc detection (uses frontmatter arc_id by default) |
--language |
No | Override language detection (uses frontmatter language by default) |
Output
Two outputs:
- Markdown scorecard written to
{source-dir}/narrative-review.md - JSON summary returned on completion
JSON Summary
{
"success": true,
"source_path": "insight-summary.md",
"arc_id": "corporate-visions",
"overall_score": 82,
"grade": "B",
"gates": {
"structural": "pass",
"critical": "pass",
"evidence": "warn",
"structure": "pass",
"language": "pass"
},
"top_improvements": [
"Add 3 more citations to reach minimum 15 (currently 12)",
"Expand 'Why Now' section by ~40 words to meet its 21% element allocation (~299 words at default T=1675)",
"Add citation to uncited quantitative claim in paragraph 3 of 'Why Change'"
]
}
Grading Scale
| Score | Grade | Meaning |
|---|---|---|
| 90-100 | A | Publication-ready, all gates pass |
| 80-89 | B | Strong, minor improvements possible |
| 70-79 | C | Acceptable, several improvements needed |
| 60-69 | D | Below standard, significant rework needed |
| 0-59 | F | Fails critical gates, major rework required |
Execution Protocol
Step 1: Load Narrative
- Read the narrative file from
--source-path - Extract YAML frontmatter fields:
title,subtitle,arc_id,arc_display_name,target_length,word_count,language,date_created,source_file_count - If frontmatter is missing or incomplete, flag as critical issue
- Determine
arc_idfrom: explicit parameter > frontmatter > detection failure - Determine
languagefrom: explicit parameter > frontmatter > defaulten
Step 2: Load Arc Standards
Read the arc definition to know expected element names, word targets, and quality gates:
- Read:
../narrative/references/story-arc/arc-registry.md-- for arc metadata - Read:
../narrative/references/story-arc/{arc_id}/arc-definition.md-- for element definitions and word targets - Read:
../narrative/references/language-templates.md-- for localized header names
Store the expected element names, proportions, and citation requirements. Read target_length from the narrative's frontmatter to compute expected word ranges. If target_length is absent (legacy narratives), default to 1675. Compute total_lower = target_length * 0.85, total_upper = target_length * 1.15, then per-element ranges: [proportion * total_lower, proportion * total_upper].
Step 3: Run Quality Gates
Evaluate the narrative against each gate category. Use the scoring rubric in references/scoring-rubric.md.
Gate evaluation order (matches narrative skill Phase 5):
- Structural Gate (30 points max)
- Critical Gate (25 points max)
- Evidence Gate (25 points max)
- Structure Gate (10 points max)
- Language Gate (10 points max)
For each gate:
- Count specific pass/fail criteria
- Assign points based on rubric
- Determine gate status:
pass/warn/fail
Step 4: Generate Scorecard
Write narrative-review.md to the same directory as the source file:
---
type: narrative-review
source: "{source filename}"
arc_id: "{arc_id}"
overall_score: {0-100}
grade: "{A-F}"
date_reviewed: "{ISO 8601}"
---
# Narrative Review: {source filename}
**Arc:** {arc_display_name} | **Score:** {score}/100 ({grade}) | **Language:** {language}
---
## Gate Results
| Gate | Status | Score | Details |
|------|--------|-------|---------|
| Structural | {pass/warn/fail} | {x}/30 | {summary} |
| Critical | {pass/warn/fail} | {x}/25 | {summary} |
| Evidence | {pass/warn/fail} | {x}/25 | {summary} |
| Structure | {pass/warn/fail} | {x}/10 | {summary} |
| Language | {pass/warn/fail} | {x}/10 | {summary} |
| **Total** | | **{total}/100** | |
---
## Top 3 Improvements
1. {Most impactful improvement with specific action}
2. {Second improvement with specific action}
3. {Third improvement with specific action}
---
## Detailed Analysis
### Structural Gate ({x}/30)
{Detailed findings for each structural criterion}
### Critical Gate ({x}/25)
{Detailed findings for each critical criterion}
### Evidence Gate ({x}/25)
{Detailed findings for each evidence criterion}
### Structure Gate ({x}/10)
{Detailed findings for each structure criterion}
### Language Gate ({x}/10)
{Detailed findings for each language criterion}
Step 5: Return JSON Summary
Return the JSON summary (see Output section above).
Gate Evaluation Details
For detailed scoring criteria per gate -- including partial credit rules, counting methods, and edge cases -- load references/scoring-rubric.md.
Gate summary: Structural (30 pts) | Critical (25 pts) | Evidence (25 pts) | Structure (10 pts) | Language (10 pts)
Constraints
- DO NOT modify the narrative file -- this is a read-only review
- DO NOT fabricate or assume quality issues -- only report what is measurably found
- ALWAYS compute expected word ranges from arc proportions x target length for scoring
- ALWAYS check against the language-specific header names
Bundled Resources
| File | Purpose | Load When |
|---|---|---|
references/scoring-rubric.md |
Detailed scoring weights and edge cases | Step 3 |
Cross-skill dependencies (files owned by the narrative skill):
| File | Purpose | Load When |
|---|---|---|
../narrative/references/story-arc/arc-registry.md |
Arc metadata and detection algorithm | Step 2 |
../narrative/references/story-arc/{arc_id}/arc-definition.md |
Element names and word targets | Step 2 |
../narrative/references/language-templates.md |
Localized header names per arc | Step 2 |