# Pre-Pass Audit Checklist (2026-07-13 练塘璞石+环保袋实战)

When Doro asks to "审查workflow修改" before pass, use this checklist.

## Step 1: Identify WB vs Original Revisions

```python
# In delivered docx:
for ins in root.iter(f'{{{W}}}ins'):
    author = ins.get(f'{{{W}}}author')
    # WB = workflow's modifications (audit these)
    # Others (WB-1, 86187, 杨丽, etc.) = original file revisions (leave alone)
```

## Step 2: Format Audit (per WB INS run)

| Check | How | Common Fail |
|-------|-----|-------------|
| rFonts extra attrs | Compare WB INS rFonts with same-para orig run | hAnsi/cs/hint added by workflow |
| sz mismatch | Compare sz values | Usually OK if same as orig |
| pStyle on new headings | Compare with adjacent original headings | Style15 instead of Heading4 |
| Heading spacing/ind | Must match original heading paragraphs | Missing before/after=0, ind |
| Bold | If orig headings not bold, new ones shouldn't be | Usually OK |
| Title space | "第七条转包" vs "第七条 转包" | Workflow adds space |

## Step 3: Content/Numbering Audit

| Check | How | Common Fail |
|-------|-----|-------------|
| Sub-numbering顺延 | If 第七条→第八条, check 7.1→8.1 etc. | Workflow only changes chapter heading, forgets sub-numbers |
| 赔偿上限20% | Bilateral caps limit our client's recovery | Workflow misses bilateral cap deletion |
| Content dedup | Check if INS保密存续 duplicates existing text | Original may already have "义务不因...终止而免除" |
| 编号冲突 | Original may already have duplicate numbers | Don't fix original numbering bugs (per rules) |

## Step 4: Global Checks

- [ ] 脚注"法律顾问修订版" exists AND is in tracked change format (w:ins author=WB)
- [ ] File naming: 【修】+ original filename unchanged
- [ ] Read full accepted text for WB-introduced grammar issues
- [ ] Original revisions (other authors) untouched

## Fix Patterns

### Sub-numbering (split across runs: "7" + ".1  ")
Only need to DEL/INS the first digit run. Don't touch ".1  " run.

### Precise text deletion (P49 pattern)
When deleting middle of a single large run:
1. Split run into: before_text | DEL_text | after_text
2. Create 3 elements: normal_run(before) + del_elem(middle) + normal_run(after)
3. Insert at original position

### Footer tracked change
1. Add footer text via python-docx
2. Re-open with zipfile, find footer XML
3. Wrap the text run in `<w:ins id="..." author="WB" date="...">`
