# 真实多层来源目录验收 入口:http://100.92.49.78:8088/(Tailscale内) ## 交付范围 - 首页选择来源后默认只显示第一层文件夹;根目录文件收起并显示数量,可主动展开。 - 点击文件夹只请求当前目录的直接子项,不把全量目录树塞进浏览器。 - 顶部工作标签显示真实来源/目录路径,可逐级返回。 - 文件夹优先于文件,显示递归文件数、大小、治理范围、已导入/已解析、处理中和失败数。 - 当前为本地只读快照,页面明确标注,不冒充实时来源连接。 - 来源文件名中的控制字符转换为可见符号,目录身份不变;不读取或投影宿主机`local_path`。 ## 真实来源 - 钉钉“公司级技术支持知识库”:4548个节点、1079个实际文件夹、3468份文件;第一层8个目录,另有5份根目录文件默认收起。 - 钉钉“技术诊断部知识沉淀”:2173个节点、404个实际文件夹、1768份文件。 - AList“国内工业”:6569个节点、1688个实际文件夹、4880份文件;第一层严格为01公司资料、02产品资料、03行业洞察、04销售赋能、05流程制度、06通用模板。 - AList同时导入海外工业、国内教育、海外教育三个完整只读快照。 - PP资料下载中心:以真实`potalTags.tagType`构造8个第一层入口;613份已治理公开文档去重计数。597份进入至少一个标签目录,16份没有这8类标签,作为根目录文件默认收起。一个文件可出现在多个标签目录,但总数只计算一次。 总计:7个来源、38986个目录节点、9880个含来源根节点的文件夹节点、28796份跨来源文件。 ## 数据与安全 Migration 9新增不可变目录快照、节点和当前快照指针。导入流程为:构建安全快照→完整校验→单事务插入→切换当前指针。没有删除旧快照,没有修改来源,没有调用钉钉/PP/AList写入、上传、移动、重命名或删除接口。 目录API仅投影治理连接ID、节点ID、名称、类型和聚合状态;不返回来源外部ID、来源定位哈希、宿主机路径或快照指纹。 ## 验证 - Python目录构建测试:7/7通过;完整真实快照在独立PostgreSQL库导入,数据库38986节点与构建结果一致。 - Go全项目测试、相关vet通过;目录API独立PostgreSQL测试验证直接子项、文件夹优先、面包屑、状态聚合及未知节点404。 - Web:14个测试文件、58项测试通过;TypeScript、Vite构建通过。 - Firefox真实验收:公司级知识库3层导航、PP三层导航、AList两层导航;首层目录数8/8/6;根目录文件5/16默认收起;DOM与API直接子项完全一致;1440/1024/768无页面级横向溢出;写请求0。 - 视觉复核:顶部路径无重复、范围标签不拆字、递归文件数口径明确、单页不显示无效分页。 - Migration=9;原source_items/content_objects/versions/test_publications保持618/535/618/535;活动任务0;范围规则0;文件覆盖0。 - API、数据库健康;所有服务运行、零重启且运行镜像匹配;本机和Tailscale入口HTTP 200。 - 生产发布请求仍关闭,Release Worker仍关闭。 证据: - `tmp/source-catalog-acceptance.json` - `tmp/SOURCE_CATALOG_FIREFOX.png` - `tmp/backups/pre-source-catalog-20260908T223638.dump`(299195字节,0600,pg_restore目录检查通过) - 回退镜像:`knowledge-governance-api:before-source-catalog`、`knowledge-governance-web:before-source-catalog` 未包含:来源实时登录/刷新、钉钉/AList文件到治理`source_items`的全量映射、原文预览。这些属于后续已确认的“来源链接”和解析/导入阶段,不能以目录快照冒充。