docx-diff-comment · git:20260908.e0ff678 · 2026-09-08 · sha256 fc862e73ddad6220

docx-diff-comment git:20260908.e0ff678A

Immutable. This exact content is served forever at /api/v1/blob/fc862e73ddad6220.

---
name: docx-diff-comment
description: Compare two Word documents to find new features in V2, add comments to the V2 document for each new feature, and generate a requirements table with effort estimation in person-days. Invoke when user asks to compare two docx documents, add comments for new features, or generate a requirements diff table.
---

# Docx Diff & Comment

## Description

This skill compares two versions of a Word document (V1 and V2), identifies new features added in V2, adds Word comments (annotations) to the V2 document at each new feature location, and generates a standalone requirements table sorted by development effort (person-days).

## Prerequisites

The following tools are required:

- **pandoc**: Convert docx to markdown for text extraction and comparison
- **python-docx**: Generate the requirements table as a Word document
- **docx unpack/pack utilities**: Helper scripts (`unpack.py`, `comment.py`, `pack.py`, `sanitize.py`) to manipulate the OOXML structure of docx files (these scripts are typically available in docx-processing toolkits)

## Usage Scenario

- Comparing two versions of a requirements document or project plan
- Annotating new features in a revised document
- Generating a development effort estimation table for new requirements

## Instructions

### Step 1: Extract Text & Compare

1. Use `pandoc` to convert both docx files to markdown:
   ```
   pandoc v1.docx -o v1_content.md
   pandoc v2.docx -o v2_content.md
   ```
2. Read both md files, compare paragraph by paragraph, identify new features, chapters, and sub-modules in V2
3. For each new item, record: feature name, module, description

### Step 2: Add Comments to V2 Document

1. Unpack V2 docx:
   ```
   python scripts/unpack.py v2.docx v2_unpacked/
   ```
2. Read `v2_unpacked/word/document.xml`, locate the `<w:r>...</w:r>` block containing each new feature text
3. Create comments using `comment.py`. Use a consistent comment template and author:
   ```
   python scripts/comment.py v2_unpacked/ <comment_id> "V2 new feature: <module> / <feature>. Not present in V1, added in V2."
   ```
   - Comment author should be set to "AI Assistant"
   - `comment_id` starts from 0 and increments for each new feature
4. Insert comment markers into document.xml:
   - Before the target `<w:r>`: `<w:commentRangeStart w:id="N"/>`
   - After `</w:r>`: `<w:commentRangeEnd w:id="N"/><w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="N"/></w:r>`
   - Markers must be direct children of `<w:p>`, never inside `<w:r>`
   - Insert from the end backward to avoid position offset
5. Pack the annotated document:
   ```
   python scripts/pack.py v2_unpacked/ v2_annotated.docx --original v2.docx
   ```
6. Run `sanitize.py` to clean up any malformed XML or orphaned comment references

### Step 3: Generate Requirements Table

Use `python-docx` to generate a Word table with these columns:

| Column | Description |
|--------|-------------|
| No. | Sorted by effort descending |
| Feature Name | Name of the new feature |
| Module | Functional module |
| Description | Brief description |
| Development Content | Specific dev work |
| Effort (person-days) | Estimated days |

Append summary row with total feature count and total person-days.

## Effort Estimation Reference

The following table provides reference effort ranges for common feature types. Final estimates should be adjusted based on actual complexity, team size, and technology stack.

| Feature Type | Reference Range (person-days) | Description | Example |
|-------------|------------------------------|-------------|---------|
| Brand-new independent module (with algorithm/model) | 6–10 | Module introduces new technical capability; may involve ML/NLP components | AI measurement, NLP parsing, rule engine |
| Visualization component integration | 4–6 | Integrate third-party or self-built visualization widgets | GIS map dashboard, chart library, data timeline |
| Interactive feature development | 3–5 | New user interactions on existing pages | Area selection query, layer toggle, drag-and-drop |
| Data storage / export enhancement | 2–3 | Extend existing data workflows | Save & download, Excel export, file upload |
| Statistics / classification function | 1–2 | Add or refine counting/categorical logic | Project status statistics, report breakdown by dimension |
| Documentation / process design | 1 | Non-code work items | API doc writing, mechanism design, acceptance plan |

> **Note**: These are reference values only. Always document assumptions in the table footer.

## Notes

1. **Comparison scope**: Focus on structural differences — new modules, sub-features, chapters. Ignore wording tweaks, typo fixes, and formatting changes.
2. **Cleanup**: Delete temporary files (`.md`, unpacked directories) after completion. Only keep the final deliverables.
3. **Deliverable naming convention**:
   - `{DocumentName}_V2_with_comments.docx` — Annotated V2 document with all new features highlighted
   - `V2_New_Requirements_Table.docx` — Requirements table sorted by effort (person-days), with summary row
4. **Batch comment insertion**: When inserting multiple comment markers in `document.xml`, always process from the **end of the file backward** to avoid position offsets.

## Examples

### Input
User provides two docx files:
- `Platform_V1.docx` (old version)
- `Platform_V2.docx` (new version)

### Output
1. `Platform_V2_annotated.docx` — V2 document with comments on all new features
2. `V2_new_requirements_table.docx` — Requirements table sorted by effort, e.g.:

| No. | Feature | Module | Effort (days) |
|-----|---------|--------|---------------|
| 1 | AI Calculation | Investment | 8 |
| 2 | Map Visualization | Dashboard | 5 |
| 3 | Infrastructure Dashboard | Dashboard | 5 |
| ... | ... | ... | ... |
| Total | | | 34 |