8 lines
11 KiB
HTML
8 lines
11 KiB
HTML
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>IT智能服务台项目目录审计报告</title><style>body{font-family:Arial,"Microsoft YaHei",sans-serif;background:#f6f8fa;color:#172033;margin:0}.wrap{max-width:1180px;margin:auto;padding:28px}.hero{background:#fff;border:1px solid #dfe5ec;border-left:6px solid #07c160;padding:24px;border-radius:12px}.muted{color:#667085}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0}.stat{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:16px}.stat b{font-size:28px;display:block}.section{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:20px;margin:16px 0}table{width:100%;border-collapse:collapse}th,td{text-align:left;border-bottom:1px solid #edf0f2;padding:10px;vertical-align:top}th{background:#f8fafc}.tag{display:inline-block;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:700}.P0{background:#fee4e2;color:#b42318}.P1{background:#fff0c2;color:#8a5b00}.P2{background:#e6f4ea;color:#137333}code{background:#f2f4f7;padding:2px 4px;border-radius:4px}li{margin:7px 0}.bar{height:10px;background:#e7edf2;border-radius:8px;overflow:hidden}.fill{height:100%;background:#07c160}</style></head><body><main class="wrap"><section class="hero"><h1>IT智能服务台项目目录审计报告</h1><p class="muted">审计对象:D://资料//03-项目开发//wecom_it_smart_desk;只读扫描,未移动、重命名或删除任何文件。</p><p class="muted">扫描时间:2026-08-09 08:25:34</p></section><div class="grid"><div class="stat"><span class="muted">文件数</span><b>29,548</b></div><div class="stat"><span class="muted">目录数</span><b>3,698</b></div><div class="stat"><span class="muted">重复组(含非依赖目录)</span><b>300</b></div><div class="stat"><span class="muted">10MB以上大文件</span><b>12</b></div></div><section class="section"><h2>一、结论摘要</h2><p>该目录已从单一应用仓库演变为“源码 + 多环境部署 + 历史归档 + 调试工作区 + 构建产物 + WorkBuddy 运行数据”的混合工作区。主要问题不是单个文件,而是<strong>版本边界、事实源、敏感信息和可再生产物没有彻底分离</strong>。不建议直接批量删除;应先冻结基线、完成分类和凭据轮换,再按批次治理。</p><ol><li><strong>最高优先级:</strong>凭据轮换与历史/备份扫描。</li><li><strong>第二优先级:</strong>统一 src 运行时源,隔离根目录遗留前端树与 dist/归档/临时目录。</li><li><strong>第三优先级:</strong>建立单一生产配置、状态看板和质量门禁。</li></ol></section><section class="section"><h2>二、问题与优化建议</h2><table><thead><tr><th style="width:70px">等级</th><th style="width:180px">问题</th><th>证据与影响</th><th style="width:34%">建议</th></tr></thead><tbody><tr><td><span class="tag P0">P0</span></td><td><strong>凭据与敏感信息暴露</strong></td><td>在版本目录中发现硬编码数据库/Redis/Neo4j密码或部署凭据迹象;例如 docker-compose.yml、deploy-server/docker-compose.yml、archives/add_full.py、archives/add_neo4j.py。即使文件被忽略,也可能存在 Git 历史或备份副本。</td><td>立即轮换已出现过的密码/令牌;用 secrets/env 文件或 Vault 注入;对 Git 历史和 archives/.backup 做凭据扫描,确认未被远端保存。</td></tr><tr><td><span class="tag P0">P0</span></td><td><strong>工作树与版本边界失控</strong></td><td>git status 显示大量已修改/未跟踪内容,包含源码、PRD、部署脚本、dist 版本目录、归档包和临时修复脚本;当前目录同时存在根目录旧 frontend-* 与 src/frontend-* 两套代码。</td><td>冻结当前工作树并先生成基线清单;明确 src 为唯一运行时源;按“源码/文档/部署/临时/备份”分区,分批提交,禁止直接 git add -A。</td></tr><tr><td><span class="tag P1">P1</span></td><td><strong>构建产物与历史备份混入项目目录</strong></td><td>扫描到 29,548 个文件、3,698 个目录;src 约 752 MB、neo4j5_chunks 约 300 MB、.backup 约 164 MB、archives 约 162 MB;多个 dist_*、zip、tar.gz、part、截图目录。</td><td>将构建产物、部署包、备份和运行数据迁移到仓库外对象存储/制品库;仓库只保留可复现构建输入与小型示例。清理动作需另行确认,当前未执行任何删除。</td></tr><tr><td><span class="tag P1">P1</span></td><td><strong>重复文件与重复前端树</strong></td><td>检测到大量 SHA-256 相同文件组(其中 1,314 组含非 node_modules 路径),包括 tools 下重复资源、frontend-h5 多个 dist 版本与备份/归档副本。</td><td>先按“运行必需/回滚必需/历史留档/可再生”四类标注,再用 manifest + hash 去重;不要直接删除根目录 frontend-*,先核对其未提交修改与 src 版本差异。</td></tr><tr><td><span class="tag P1">P1</span></td><td><strong>文档状态与实现状态可能失配</strong></td><td>README 最后更新为 2026-06-03,仍写“AI 回复未集成”等旧状态;而当前记忆/源码治理已推进到 2026-08-09,另有架构图、情况报告、看板 HTML/Markdown、PRD 和评审材料多套并存。</td><td>建立单一权威状态源;README 仅保留入口与快速开始,项目状态、风险、发布记录分别由看板/变更日志维护,并在 CI 中检查文档日期与版本号。</td></tr><tr><td><span class="tag P1">P1</span></td><td><strong>部署配置存在多份事实源</strong></td><td>根 docker-compose.yml、docker-compose.dev.yml、deploy-server/docker-compose.yml、docker-compose.split.yml 和多批 deploy-* 脚本并存;配置中还存在默认密码、不同 worker/端口/挂载方式,容易造成“本地验证通过、生产路径不同”。</td><td>区分 local/dev/staging/prod 配置;生产 compose 只保留一份模板,部署脚本只做参数化渲染;加入 compose config、nginx -t、健康检查和回滚演练的发布门禁。</td></tr><tr><td><span class="tag P1">P1</span></td><td><strong>自动化测试与类型债务</strong></td><td>README 声明 pytest/Vitest 未完善;项目记忆记录坐席前端全仓 vue-tsc 存量错误约 105 处,虽未落在本次审批改动文件。</td><td>建立分层质量门禁:后端单测/集成测、前端 vue-tsc、关键 E2E;先允许存量基线,禁止新增错误,再按模块偿还。</td></tr><tr><td><span class="tag P2">P2</span></td><td><strong>文件命名与编码污染</strong></td><td>根目录出现以 Markdown 粗体标记、特殊字符或乱码编码生成的零字节文件,如“**REQ编号**:”及其乱码变体;说明某些脚本/导出链路将文档文本错误地转成了文件名。</td><td>禁止从 Markdown 内容生成未清洗文件名;统一 UTF-8、路径安全字符白名单;增加零字节异常文件和非法命名检查。</td></tr><tr><td><span class="tag P2">P2</span></td><td><strong>临时调试与运维脚本散落</strong></td><td>根目录、archives、deploy-staging、deploy-temp、jumpserver-webcli、.workbuddy/tmp 中有大量一次性修复、上传、诊断、命令记录。</td><td>将可复用脚本归入 scripts/并加入口/参数/说明;一次性脚本放到仓库外;部署命令记录改为不可含密钥的 runbook。</td></tr></tbody></table></section><section class="section"><h2>三、目录体量重点</h2><table><thead><tr><th>位置</th><th>约占体量</th><th>判断</th></tr></thead><tbody><tr><td><code>src</code></td><td>717.1 MB</td><td>重点治理:源码树/依赖/备份/制品混合</td></tr><tr><td><code>neo4j5_chunks</code></td><td>300.0 MB</td><td>重点治理:源码树/依赖/备份/制品混合</td></tr><tr><td><code>.backup</code></td><td>163.7 MB</td><td>重点治理:源码树/依赖/备份/制品混合</td></tr><tr><td><code>archives</code></td><td>161.8 MB</td><td>重点治理:源码树/依赖/备份/制品混合</td></tr><tr><td><code>frontend-h5</code></td><td>101.9 MB</td><td>重点治理:源码树/依赖/备份/制品混合</td></tr><tr><td><code>deploy-temp</code></td><td>48.6 MB</td><td>纳入分类清单</td></tr><tr><td><code>test-screenshots</code></td><td>28.4 MB</td><td>纳入分类清单</td></tr><tr><td><code>docs</code></td><td>24.8 MB</td><td>纳入分类清单</td></tr><tr><td><code>packages</code></td><td>23.9 MB</td><td>纳入分类清单</td></tr><tr><td><code>chat_export</code></td><td>22.9 MB</td><td>纳入分类清单</td></tr><tr><td><code>deploy-staging-ki</code></td><td>22.3 MB</td><td>纳入分类清单</td></tr><tr><td><code>backend</code></td><td>14.7 MB</td><td>纳入分类清单</td></tr><tr><td><code>frontend-admin</code></td><td>11.4 MB</td><td>纳入分类清单</td></tr><tr><td><code>.workbuddy</code></td><td>5.2 MB</td><td>纳入分类清单</td></tr><tr><td><code>frontend-agent</code></td><td>3.5 MB</td><td>纳入分类清单</td></tr></tbody></table><p class="muted">说明:目录大小按根目录第一层前缀聚合;未将扫描结果中的运行时依赖误判为业务源码。</p></section><section class="section"><h2>四、建议的目标目录边界</h2><pre><code>src/ # 唯一运行时源码(后端、前端)
|
||
docs/ # 当前有效产品/技术/测试/运维文档
|
||
scripts/ # 可复用、参数化、可审计脚本
|
||
nginx/ # 当前有效配置模板
|
||
tests/ # 自动化测试
|
||
ops/ # 经评审的运维入口(可选)
|
||
.artifacts/ # 不入仓,或迁移到制品库
|
||
archive-external/ # 不入工作树,进入外部归档</code></pre><p>根目录不再放部署包、dist 版本、数据库分片、截图批次和一次性修复脚本。根目录保留 README、变更日志、贡献指南、许可证和少量构建配置。</p></section><section class="section"><h2>五、实施路线图</h2><ol><li><strong>0—1天:</strong>冻结工作树;导出 Git status 和文件 manifest;轮换已暴露凭据;确认 Gitea 远端历史是否含敏感信息。</li><li><strong>1—3天:</strong>建立 src 唯一源声明;将根目录旧 frontend-*、dist_*、deploy-temp、archives、压缩包标注为“待迁移”;生产 compose 和 nginx 配置确定唯一事实源。</li><li><strong>1周:</strong>文档按产品/技术/测试/运维/项目管理分层,README 改为导航;清理乱码零字节文件;为状态看板、发布记录和风险表建立更新责任。</li><li><strong>2—4周:</strong>接入 CI:secret scan、compose config、Python lint/type、vue-tsc 增量门禁、后端关键接口测试、构建产物完整性检查。</li></ol></section><section class="section"><h2>六、审计边界与风险提示</h2><ul><li>本次为只读审计;没有执行删除、移动、重命名、压缩或 Git 清理。</li><li>重复文件大量来自依赖树、source map、截图和历史制品;重复不等于可以删除,必须结合运行时引用和回滚要求复核。</li><li>扫描发现的“password/secret”只是敏感内容候选,不代表每一项仍有效;但暴露过的凭据应按已泄露处理。</li><li>审计过程生成的中间扫描数据位于 <code>.workbuddy/audit_scan.json</code> 与 <code>.workbuddy/audit_content.json</code>,建议不要提交到仓库。</li></ul></section></main></body></html> |