# Nexus 主待办长计划(文件管理 · POSIX · 部署 · 审计) | 项 | 内容 | |----|------| | 创建日期 | 2026-06-01 | | 状态 | **活跃** — 新会话接续本文任务 ID | | 范围 | 2026-06-01 会话内已实现代码的验证/部署/审计 + 全站遗留验收 | | 关联 SSOT | [development-acceptance-standard.md](./development-acceptance-standard.md) · [AI-HANDOFF-2026-05-23.md](./AI-HANDOFF-2026-05-23.md) | --- ## 如何使用 1. 按 **阶段(Phase)** 顺序执行;阶段内任务可并行标 `∥`。 2. 每完成一项:将 `[ ]` 改为 `[x]`,并在对应 changelog/audit 留痕。 3. 宣称「可部署/可上线」前:至少完成 **Phase D(门控)** + 相关 **Phase C/E** 验证任务。 4. 任务 ID 格式:`{域}-{序号}`,便于 PR/commit 引用(例:`DEP-03`)。 **图例** | 标记 | 含义 | |------|------| | `[x]` | 代码/文档已完成(2026-06-01 会话) | | `[ ]` | 待做 | | `🔍` | 需人工/生产环境 | | `⚠` | 阻塞部署或上线 | --- ## 总览路线图 ```mermaid flowchart LR subgraph done [已实现代码] A1[POSIX 批次 1-7] A2[文件管理 P1-P5] A3[二期递归+提示] end subgraph next [待执行] B[Phase A 单测与门控] C[Phase B 部署] D[Phase C 浏览器与 L1-L4] E[Phase D 正式审计 8 步] F[Phase E POSIX 批次 13+] G[Phase F 全站回归 T1-T5] H[Phase G 增强与风险] end done --> B --> C --> D D --> E E --> F F --> G G --> H ``` --- ## Phase A — 本地验证与程序门控(未部署前必做) | ID | 任务 | 状态 | 验收标准 | |----|------|------|----------| | A-01 | 跑 POSIX 单测套件 | [x] | 44 passed(含 schema/file 套件) | | A-02 | 跑文件管理单测套件 | [x] | 同上 | | A-03 | 跑全量 API 测试(有 `.env`) | [x] | `python tests/test_api.py`(门控方式);pytest 0 收集(已修复函数名) | | A-04 | ruff `server/` 零错误 | [x] | | | A-05 | import 冒烟 | [x] | | | A-06 | bandit 无 HIGH/MEDIUM | [x] | 门控仅 HIGH;0 HIGH | | A-07 | 7 门预检脚本 | [ ] | 生产需重启后重跑;已修 `DEPLOY_DIR` 默认仓库根 | | A-08 | 合并 changelog(本次主题) | [x] | 见 `docs/changelog/2026-06-01-*.md` 系列(posix / files / phase5 / phase2 / capability) | | A-09 | WSL 集成 smoke(若环境可用) | [ ] | `wsl_integration_smoke.sh` 或项目等价脚本 | **Phase A 完成定义**:A-01~A-07 全 `[x]`(A-09 可选但推荐)。 --- ## Phase B — 生产部署(后端 + 前端) | ID | 任务 | 状态 | 验收标准 | |----|------|------|----------| | DEP-01 | `git push origin main` | [x] | d93c518 | | DEP-02 | 生产 `git fetch && reset --hard origin/main` | [x] | | | DEP-03 | `supervisorctl restart nexus` | [ ] | 待 gate 通过后执行 | | DEP-04 | 健康检查 | [x] | 拉取前已 ok;重启后待复验 | | DEP-05 | 前端 `deploy/deploy-frontend.sh` | [ ] | `web/app/index.html` + `assets/` 已更新 | | DEP-06 | 浏览器 `/app/` HTTP 200 | [ ] | 非旧 Tailwind 静态页 | | DEP-07 | 记录部署日期到本文 | [ ] | 在 §部署记录 填一行 | **依赖**:Phase A 的 A-07 通过。 **路径 SSOT**:`/www/wwwroot/api.synaglobal.vip/` · SSH 别名 `nexus` · 端口 `8600`。 ### 部署记录 | 日期 | 操作人 | DEP-01~06 | 备注 | |------|--------|------------|------| | | | | | --- ## Phase C — 文件管理功能验收(设计文档 L1~L4) > 设计:[2026-06-01-files-root-ownership-ui-design.md](../design/specs/2026-06-01-files-root-ownership-ui-design.md) §7 > 代码状态:Phase 1~5 + 二期 **已实现**;本节全部为 **🔍 生产/浏览器验证**。 ### C1 — L1 提权 | ID | 任务 | 状态 | 步骤 / 预期 | |----|------|------|-------------| | FM-L1-01 | deploy + `nexus-files.sudoers` | [ ] 🔍 | 目标机安装 `docs/deploy/nexus-files-sudoers.example`;`sudo -n true` 成功 | | FM-L1-02 | 写/保存/压缩/chmod 成功 | [ ] 🔍 | 审计含 `elevated: true`(若走了 sudo) | | FM-L1-03 | SSH 用户 root | [ ] 🔍 | 不触发多余 sudo;功能正常 | | FM-L1-04 | 无 sudo 非 root | [ ] 🔍 | 失败提示含免密 sudo / 文档路径,非「SSH 连接失败」 | | FM-L1-05 | 顶栏不可读提示 | [ ] 🔍 | 选 deploy 服务器见提示条;读 root 属主文件后提示更新 | | FM-L1-06 | `files-capability` API | [ ] 🔍 | `GET /api/servers/{id}/files-capability` 与 UI 检测一致 | | FM-L1-07 | 服务器 `files_elevation` 三档 | [ ] 🔍 | off / auto_sudo / always_sudo 行为符合预期 | ### C2 — L2 展示 | ID | 任务 | 状态 | 预期 | |----|------|------|------| | FM-L2-01 | 归属列 www/root | [ ] 🔍 | chip 正确 | | FM-L2-02 | tooltip 完整权限 | [ ] 🔍 | 悬停见 `drwx… · 755 · www` | | FM-L2-03 | 无默认宽「权限」列 | [ ] 🔍 | 主表不挤占 | | FM-L2-04 | 不可读行锁图标 | [ ] 🔍 | `mdi-shield-lock` 与 ls 一致 | | FM-L2-05 | 修改时间为 long-iso | [ ] 🔍 | 形如 `2026-06-01 12:00:00`,排序合理 | ### C3 — L3 修改权限 | ID | 任务 | 状态 | 预期 | |----|------|------|------| | FM-L3-01 | 预设 644/755 一键 | [ ] 🔍 | | | FM-L3-02 | chown www 后刷新 | [ ] 🔍 | 列表归属更新 | | FM-L3-03 | 非法 mode/owner | [ ] 🔍 | 前端拦截 + API 400 | | FM-L3-04 | 目录递归 chmod | [ ] 🔍 | 勾选 → confirm → 子项权限变化;`/` 等被拒绝 | | FM-L3-05 | 权限对话框检测按钮 | [ ] 🔍 | 与顶栏 capability 一致 | ### C4 — L4 回归 | ID | 任务 | 状态 | 预期 | |----|------|------|------| | FM-L4-01 | 文件树 / 编辑器 | [ ] 🔍 | 打开保存无回归 | | FM-L4-02 | 剪贴板复制/粘贴/移动 | [ ] 🔍 | | | FM-L4-03 | 上传 / 下载 | [ ] 🔍 | | | FM-L4-04 | 压缩 / 解压 | [ ] 🔍 | | | FM-L4-05 | Windows 开发机 + Linux 目标路径 | [ ] 🔍 | 路径无 `\` 进入远程命令 | **Phase C 完成定义**:C1~C4 全部 `[x]`。 --- ## Phase D — 正式审计(8 步 · 部署门控) > 模板:`docs/audit/TEMPLATE.md` · 规则:`.cursor/rules/audit-line-review.mdc` > 现状:POSIX 分批审查 ✅;files-phase5 简表 ✅;**下列为改动的完整 8 步审计(待补)**。 | ID | 审计主题 | 状态 | 输出文件 | |----|----------|------|----------| | AUD-01 | 文件管理 Phase 1~3(remote_shell / browse / chmod UI) | [x] | 合并在 master-execution-audit | | AUD-02 | files-capability + files_elevation(批次 10) | [x] | 同上 | | AUD-03 | Phase 5 加固(long-iso / read-file / remote_write) | [x] | files-phase5.md + master-execution | | AUD-04 | 二期递归 chmod + 不可读提示(批次 12) | [x] | 同上 | | AUD-05 | Schema 路径校验 P2(schema_path_validators) | [x] | posix-path-full-audit | | AUD-06 | 部署前 Review 门:审计含**实际改动文件清单** | [ ] | 已修 gate 选最新 audit;待重跑 | **每份审计必须含**:Step3 规则扫描 · Closure 全表 · 入口表 · 输入→Sink · DoD · 0 FINDING 或已修 FINDING(`文件:行号`)。 --- ## Phase E — POSIX 路径审计(延续) > 总览:[posix-path-full-audit.md](../audit/2026-06-01-posix-path-full-audit.md) > 分批记录:[posix-path-batch-review.md](../audit/2026-06-01-posix-path-batch-review.md) | ID | 任务 | 状态 | 说明 | |----|------|------|------| | POSIX-13 | 批次 13:`remote_shell` + `files_capability` + `files_chmod_policy` | [x] | master-execution-audit §批次 POSIX-13 | | POSIX-14 | 批次 14:`unix_ls.py` 解析边界(空格文件名、异常行) | [ ] | 对照 `test_file_permissions.py` 补案例 | | POSIX-15 | 批次 15:前端 `remotePath.ts` 全页面扫尾 | [ ] | `rg` 无裸 `+` 路径拼接 | | POSIX-16 | 批次 16:`sync_engine_v2` rsync 目标再回归 | [ ] | `user@host:path` 形态 | | POSIX-17 | 生产回归:Windows 主机开发 + Linux SSH 目标 | [ ] 🔍 | full-audit DoD 最后一项 | | POSIX-18 | 规则固化:`.cursor/rules/nexus-posix-paths.mdc` 与 CI 可选检查 | [ ] | 如在 CI 加 `rg` 门禁 | --- ## Phase F — 全站遗留测试(CLAUDE / HANDOFF) | ID | 任务 | 状态 | 说明 | |----|------|------|------| | T-01 | 心跳 Redis 写入验证 | [ ] 🔍 | Agent 60s → `heartbeat:{id}` | | T-02 | WebSocket 连接与告警推送 | [ ] 🔍 | 浏览器 + Telegram | | T-03 | 三层守护(杀 Python → Supervisor 重启) | [ ] 🔍 | | | T-04 | Telegram 推送 | [ ] 🔍 | | | T-05 | install.html 五步安装向导 | [ ] 🔍 | | | T-06 | L5 生产验收清单 | [ ] | `production-verification-checklist.md` | | T-07 | WebSSH 断线重连(HANDOFF P1) | [ ] | 独立设计与实现 | | T-08 | 服务器 CSV 批量导入(HANDOFF P1) | [ ] | | --- ## Phase G — 增强与已知风险(未实现 / 低优先级) | ID | 任务 | 优先级 | 说明 | |----|------|--------|------| | ENH-01 | 危险路径 chmod 二次确认(`/etc`、`/usr` 下单文件) | P2 | 设计 §8 风险表 | | ENH-02 | `find -maxdepth` 替代大范围 `chmod -R`(可选) | P3 | 降低误操作面 | | ENH-03 | 预加载失败聚合提示(非静默) | P3 | `filePreload.ts` 现静默 catch | | ENH-04 | `NEXUS_FILES_ELEVATION_DEFAULT` 全局 env 默认 | P3 | plans 二期提及 | | ENH-05 | 设计文档 §7 勾选同步到本文 | P1 | FM-L* 完成后回写 spec | | ENH-06 | 更新 `AI-HANDOFF` 指针到本文 | P1 | 避免多 SSOT 分叉 | | ENH-07 | `CLAUDE.md` 实现表:文件管理条目标为已完成 | P2 | 与代码一致 | | ENH-08 | 可选列「权限」默认隐藏 + 列设置 | P3 | L2-03 细化 | --- ## 已完成代码清单(勿重复实现) | 主题 | 批次/阶段 | 关键路径 | |------|-----------|----------| | POSIX SSOT + sync_v2 规范化 | 批次 1~7 | `server/utils/posix_paths.py` | | Schema 路径 P2 | P2 | `schema_path_validators.py` | | remote_shell + sudo 回退 | Phase 1 | `remote_shell.py` | | browse owner/group/mode_octal | Phase 2 | `sync_v2.py` | | FilePermissionDialog + chown | Phase 3 | 前端组件 | | files-capability + files_elevation | 批次 10 / Phase 4 | `servers.py` | | long-iso / read-file 提权 / write elevation | 批次 11 / Phase 5 | `unix_ls.py` | | 递归 chmod + 不可读顶栏/锁图标 | 批次 12 / 二期 | `files_chmod_policy.py` | --- ## 进度总表(给用户一眼看跳步) ``` 代码实现 [x] POSIX 1-7 + 文件管理 P1-P5 + 二期 本地单测门控 [x] Phase A(A-07 生产待重跑) 正式审计 8 步 [x] Phase D(合订 master-execution-audit) 生产部署 [~] Phase B(已 push+pull;restart+前端待完成) 浏览器 L1-L4 [ ] Phase C POSIX 13-18 [~] Phase E(13 完成;14-18 待做) 全站 T1-T8 [ ] Phase F 增强 ENH [ ] Phase G(按需) ``` **当前建议下一项**:`A-01` → `A-07` → `DEP-01`~`DEP-06` → `FM-L1-01` 起。 --- ## 文档索引 | 类型 | 路径 | |------|------| | 文件管理设计 | `docs/design/specs/2026-06-01-files-root-ownership-ui-design.md` | | 文件管理计划 | `docs/design/plans/2026-06-01-files-root-ownership-ui.md` | | 二期计划 | `docs/design/plans/2026-06-01-files-phase2-recursive-read-hint.md` | | POSIX 全审计 | `docs/audit/2026-06-01-posix-path-full-audit.md` | | POSIX 分批 | `docs/audit/2026-06-01-posix-path-batch-review.md` | | Changelog 目录 | `docs/changelog/2026-06-01-*.md` | | sudoers 示例 | `docs/deploy/nexus-files-sudoers.example` | --- ## 变更记录 | 日期 | 变更 | |------|------| | 2026-06-01 | 初版:合并 POSIX 分批、文件管理 Phase/二期、部署门控、审计、全站 T 项 |