149 lines
4.8 KiB
Markdown
149 lines
4.8 KiB
Markdown
# /review — Structured Content Review
|
|
|
|
Run four-dimensional content review on drafts in `03-review/`.
|
|
|
|
## Usage
|
|
|
|
```
|
|
/review [slug]
|
|
```
|
|
|
|
- `slug` (optional): Specific article to review. If omitted, reviews the most recent article in `03-review/`.
|
|
|
|
## Workflow
|
|
|
|
### Step 1: Load Article
|
|
|
|
```bash
|
|
cd /home/kang/apps/content-forge/content-forge
|
|
obsidian read path="03-review/YYYY-MM-DD-<slug>.md"
|
|
```
|
|
|
|
### Step 2: Four-Dimensional Review
|
|
|
|
Run structured review against each dimension:
|
|
|
|
#### 2.1 Structure Review (结构审)
|
|
|
|
- **Logic Flow**: Opening hook → Main argument → Conclusion
|
|
- **Paragraph Structure**: Single idea per paragraph, clear topic sentences
|
|
- **Information Hierarchy**: Headings reflect content, visual elements support structure
|
|
|
|
**Issue Format**: `S{id}` — e.g., S1, S2
|
|
|
|
#### 2.2 Factual Review (事实审)
|
|
|
|
- **Data Accuracy**: All statistics have sources, no fabricated data
|
|
- **Reference Quality**: Source URLs accessible, quotes accurate
|
|
- **Technical Accuracy**: Technical terms correct, code examples work
|
|
|
|
**Issue Format**: `F{id}` — e.g., F1, F2
|
|
|
|
#### 2.3 Style Review (文风审)
|
|
|
|
- **Audience Match**: Tone matches `audience` field, jargon explained
|
|
- **Voice Consistency**: Active voice preferred, tense/POV consistent
|
|
- **Readability**: Clear sentences, no wordiness, complex ideas explained
|
|
|
|
**Issue Format**: `ST{id}` — e.g., ST1, ST2
|
|
|
|
#### 2.4 Format Review (格式审)
|
|
|
|
- **Markdown Compliance**: Proper heading hierarchy, code blocks with language
|
|
- **Frontmatter Integrity**: All required fields present, valid YAML
|
|
- **Asset References**: Images have alt text, paths are vault-relative
|
|
|
|
**Issue Format**: `FM{id}` — e.g., FM1, FM2
|
|
|
|
### Step 3: Issue Classification
|
|
|
|
| Severity | Definition | Action |
|
|
|----------|------------|--------|
|
|
| **Critical** | Blocks publication | Must fix immediately |
|
|
| **High** | Strong impact on quality | Should fix before polish |
|
|
| **Medium** | Noticeable issue | Should consider fixing |
|
|
| **Low** | Minor polish | Nice to have |
|
|
|
|
### Step 4: Pass/Fail Decision
|
|
|
|
**Pass Criteria**: Critical = 0 AND High ≤ 1
|
|
|
|
```
|
|
┌─────────────────────────────────────┐
|
|
│ Review Decision │
|
|
├─────────────────────────────────────┤
|
|
│ Critical = 0, High ≤ 1 │
|
|
│ → PASSED → polish │
|
|
├─────────────────────────────────────┤
|
|
│ Critical ≥ 1 OR High > 1 │
|
|
│ → FAILED → revision │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
### Step 5: Update Frontmatter
|
|
|
|
#### If PASSED
|
|
|
|
```bash
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="review_status" value="passed"
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="review_passed_at" value="$(date -Iseconds)"
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="status" value="polish"
|
|
```
|
|
|
|
#### If FAILED
|
|
|
|
```bash
|
|
# Check revision count
|
|
current_count=$(obsidian read path="03-review/YYYY-MM-DD-<slug>.md" | grep "revision_count:" | awk '{print $2}')
|
|
new_count=$((current_count + 1))
|
|
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="review_status" value="failed"
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="status" value="revision"
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="revision_count" value="$new_count"
|
|
|
|
# If revision_count > 3, block
|
|
if [ $new_count -gt 3 ]; then
|
|
obsidian property:set path="03-review/YYYY-MM-DD-<slug>.md" name="status" value="blocked"
|
|
echo "WARNING: Revision limit exceeded. Article blocked for human decision."
|
|
fi
|
|
```
|
|
|
|
### Step 6: Output Review Report
|
|
|
|
```markdown
|
|
# Review Report: {title}
|
|
|
|
## Summary
|
|
|
|
| Dimension | Critical | High | Medium | Low |
|
|
|-----------|----------|------|--------|-----|
|
|
| Structure | {n} | {n} | {n} | {n} |
|
|
| Factual | {n} | {n} | {n} | {n} |
|
|
| Style | {n} | {n} | {n} | {n} |
|
|
| Format | {n} | {n} | {n} | {n} |
|
|
| **Total** | **{n}** | **{n}** | **{n}** | **{n}** |
|
|
|
|
## Decision: PASSED / FAILED
|
|
|
|
## Issues
|
|
|
|
{List all issues with id, severity, description}
|
|
|
|
## Next Steps
|
|
|
|
{If PASSED}: Proceed to polish phase
|
|
{If FAILED}: Fix issues and resubmit for review (revision {n}/3)
|
|
```
|
|
|
|
## Integration
|
|
|
|
- **`/multi-review`**: Run parallel review with multiple AI providers
|
|
- **`/challenge`**: Pressure-test key claims against vault history
|
|
- **Review Checklist Template**: `content-forge/templates/review-checklist.md`
|
|
|
|
## Constraints
|
|
|
|
- **READ-ONLY**: Does not modify article content, only frontmatter
|
|
- **Golden Rule**: Agents Read, Humans Write — issues are reported, not auto-fixed
|
|
- **Revision Limit**: Max 3 revision cycles per article
|