# 审计 — 未设路径推送回退 /www/wwwroot

## 范围（文件清单）

| 文件 | 变更 |
|------|------|
| `server/utils/posix_paths.py` | `resolve_push_target_path`、默认 `/www/wwwroot` |
| `server/application/services/sync_engine_v2.py` | 推送/预览使用 resolve |
| `scripts/verify_push_elevation.py` | 验证脚本对齐 |
| `scripts/batch_detect_target_path.py` | 批量 detect-path |
| `scripts/batch_detect_target_path.sh` | 包装入口 |
| `tests/test_posix_paths.py` | unset UI 与 push 回退分离单测 |

## Step 3 规则扫描

| H | 规则 | 结论 |
|---|------|------|
| H1 | 未改 `is_unset_target_path` UI 判定 | PASS |
| H2 | 推送 override 仍优先 | PASS — resolve 先 override |
| H3 | 路径校验仍走 normalize_remote_abs_path | PASS |

## Closure

| H | 判定 | 依据 |
|---|------|------|
| H1 | PASS | is_unset_target_path 未动 |
| H2 | PASS | resolve_push_target_path |
| H3 | PASS | posix_paths.py |

## DoD

- [x] pytest test_posix_paths
- [x] changelog 2026-06-11-push-default-wwwroot.md
- [x] batch_detect_target_path.sh

## 验证

```bash
pytest tests/test_posix_paths.py -q
bash scripts/batch_detect_target_path.sh --unset-only --dry-run
```
