# 来源目录实时刷新与分流验收 ## 页面功能 - 进入子目录后显示“返回上一级”;顶部来源/目录标签仍可逐级返回。 - 右下角显示当前来源最近一次快照检查/激活时间。 - 每个文件显示不选择/对内/对外;有安全本地制品的文件可单条标注并立即进入对应本地WeKnora解析队列。 - 当前页支持勾选、全选可入队文件、批量标注对内/对外。零选择按钮显式灰色禁用。 - 目录元数据存在但没有可验证文件制品时,分流控件禁用并显示“只有目录元数据,尚无可上传文件”;不会假装入队。 - 分流结果显示标注数、新入队、已在队列及暂不可入队数量。 ## 本地WeKnora目标 新增并读回验证两个隔离本地知识库: - `governance-internal-local`:对内解析队列。 - `governance-external-local`:对外解析队列。 API只返回两个范围是否启用,不把目标知识库ID交给浏览器。文件路由在单个PostgreSQL事务中写人工范围覆盖和审计、创建目标Publication及`test.upload` Job。重复标注同一文件/目标返回already_queued,不重复上传。 从PP公开Manifest选择最小的626字节TXT,按Manifest字节数和SHA-256复核后复制到治理Spool,并补齐一个content_object的受控spool引用。该文件分别通过对外和对内队列真实上传到本地WeKnora,两个Knowledge均达到`parse_status=completed`。测试对象保留,未调用删除API。 ## 实时快照 点击“实时刷新目录”创建持久`source.catalog.refresh` Job。普通Worker运行只读扫描器,Job payload只保存来源治理ID、类型、名称、阶段、进度和计数,不保存URL、Token、Cookie或捕获请求。网页轮询Job,可以切换页面;完成后自动读取当前快照。 阶段:等待后台刷新→验证登录→扫描目录→校验父子关系和数量→写不可变快照/切换当前指针→完成。失败不会切换当前快照。 真实验收: - 钉钉公司级技术支持知识库:浏览器捕获会话有效;扫描1080个文件夹;新快照4524节点、1079目录、3444文件;原快照3468文件,证明读取的是实时来源变化;新快照原子激活,旧快照保留。 - PP:当前凭据文件可读取且网络可达,但登录返回无Token;网页显示“PP登录失败,请在来源链接更新凭据;旧快照仍然保留”。 - AList直连:保留各来源原地址,仅向`POST /api/fs/list`添加`X-Gateway-Token`(2026-09-28 网关鉴权头由`x-api-token`改名,旧头已401失效;下载直链`/p/?sign=…`为签名鉴权,不受请求头影响);拒绝所有重定向,不依赖钉钉SSO Cookie。2026-09-10 实测四个来源均完成只读全量快照并原子激活:国内工业1718目录/4942文件、海外工业1486目录/4463文件、国内教育3566目录/9067文件、海外教育1742目录/5015文件。 Worker只读挂载源脚本和来源目录;DingTalk/PP/AList凭据副本位于治理`secrets/`、权限0600,仅普通Worker挂载,API/Web/Release Worker不挂载。AList直连令牌从`secrets/alist_api_token`读取,不进入来源地址表、任务载荷、数据库或日志。 ## 验证证据 - Python测试12项、Web 77项、Go全项目测试和相关vet通过。 - 独立PostgreSQL验证:文件标注、人工范围审计、目标Publication、Job入队、重复幂等和未映射阻断。 - 浏览器:返回、快照时间、实时任务完成卡、单条选择、当前页批量、幂等结果、灰态、1440/1024/768无页面级横向溢出。 - `tmp/catalog-routing-refresh-acceptance.json` - `tmp/CATALOG_ROUTING_REFRESH_FIREFOX.png` - `tmp/backups/pre-live-refresh-routing-20260909T170939.dump`(3607159字节、0600、pg_restore目录检查通过) 生产发布请求和Release Worker保持关闭;未连接或写入生产WeKnora、生产数据库或OSS。