姚章浩
84e8a0dfdc
style(libraryagent): gofmt
...
build / build (push) Successful in 1m14s
上一个提交漏跑 gofmt,本地门禁 format 失败;只改空白。
2026-10-29 06:12:46 +08:00
姚章浩
faaf003707
fix(libraryagent): 把宿主侧对象存储端点纳入固定命令形态
...
build / build (push) Failing after 17s
上一提交只给 libraryctl 加了 -source-s3-endpoint,agent 却不知道这个 flag,
systemd 起不来(exit 2)。端点属于"这台主机怎么访问这个源的存储",必须由 agent
自己钉住并随固定声明传给 libraryctl;请求仍然不能改。没配置时不凭空加 flag。
试过:make verify 15 项全绿;新增 agent 声明用例(有端点必传、无端点不多传)。
2026-10-29 06:11:29 +08:00
姚章浩
4d6ecda310
feat(libraryctl): 源对象存储端点可按宿主机地址覆盖
...
build / build (push) Successful in 1m13s
容器 env 里的 MINIO_ENDPOINT 往往是服务名(langfuse-minio:9000),封存跑在宿主机上
解析不到,真实封存报 read library resource 并整体失败。
新增 -source-s3-endpoint:只换访问入口,桶与对象键不变;缺 scheme 直接拒绝;
status 会打印实际使用的 endpoint。
试过:make verify 15 项全绿;新增覆盖用例(生效 + 拒绝无 scheme)。
2026-10-29 06:09:56 +08:00
姚章浩
f2d6f3f646
fix(httpapi): 封存队列作业 id 按 jobs.id 列宽拼短
...
build / build (push) Successful in 1m17s
真实请求 POST /api/v1/library/captures 一律 500:拼出来的
"library-capture-<scope>-<nano>" 是 45 个字符,而 jobs.id 是 varchar(36),
PG 直接拒绝(value too long)。此前页面一直停在"未接线",这条路径从没被
真实请求覆盖过,所以只有接上 agent 之后才暴露。
改为 libcap-<scope>-<nano>(35 字符),并用测试锁住列宽与形状。
试过:go test ./internal/httpapi -run LibraryCapture 全绿;修复前用真实
DATABASE_URL 复现 enqueue error: value too long for type character varying(36)。
2026-10-29 06:05:16 +08:00
姚章浩
37a8370f7b
fix(v071): 索引范围过滤接受未写 tenant_id 的文档
...
build / build (push) Successful in 1m15s
真实 v0.7.1 的 app 自己写索引时不带 tenant_id,治理侧同步写入时才补齐。
原来只按 term tenant_id 过滤,等于把 app 写入的正文整库漏掉:真跑时索引里有
2 条文档,导出 0 条,候选校验报 legacy coverage,封存被拒。
改为"显式本租户 或 完全没写租户字段"(写了别的租户仍然排除),知识库身份
仍是独立 term,范围没有放宽。Count/PruneScope/整库导出共用同一写法。
试过:make verify 15 项全绿;新增 3 个过滤条件用例;真实 preflight 由
candidate-invalid(0 条) 变为 candidate-valid(2 条)。
2026-10-29 06:00:30 +08:00
姚章浩
11c52ad81b
fix(libraryctl): 封存窗口接上实例级入口闸门与后台静默
...
build / build (push) Failing after 1m2s
库级窗口永远拿不到在途排空证据:被代理的 WeKnora 收到 SIGTERM 就 exit(1),
写者退出码不能当作请求已排空。capture/recover 改由 librarymaintenance.Manager
装配入口闸门、后台静默检查、目标指纹与入口探针(与发布链路同一套实现),
排空证据来自闸门 drain 记录;缺 LIBRARY_TARGET_* 时在开窗口前拒绝并点名。
维护接线解析收敛到 internal/librarymaintenance/env.go,agent 与 worker 讲同一组
变量名;agent 启动如实打印接线状态;安装脚本强制 0600 agent.env。
试过:make verify 15 项全绿;新增 7 个用例(接线解析/身份绑定/缺闸门拒绝)。
2026-10-29 05:48:38 +08:00
姚章浩
ee7688f24e
docs(matrix): Wiki 撤销检查实际 13 项,改正计数
build / build (push) Successful in 1m13s
2026-10-29 05:18:42 +08:00
姚章浩
9d0fe33c13
docs(ledger): 补记 0.1.162–0.1.167 与验收代码 SHA
...
build / build (push) Successful in 1m13s
0.1.166(1faf513)是本轮验收代码 SHA;f82eb07 起的文档提交不改代码。
0.1.165 因后续提交被 CI 取消,按事实记为 cancelled,不改写成成功。
2026-10-29 05:15:53 +08:00
姚章浩
f82eb0735f
docs(acceptance): 矩阵按四段重排,补封存链路缺口与 8088 部署方案
...
build / build (push) Successful in 1m14s
矩阵不再在顶部叠报告:已完成 / 缺代码 / 已实现未跑 / 需授权四段分开,
把本轮 Wiki 撤销真实验收(12 项检查)、贡献级差异、维护面板写进对应行,
并如实记下封存链路缺口(CLI 无入口排空证明、API 封存未接线)、
死信无解除契约、Neo4j 场景与排空探针未跑。
新增正式 8088 待验收部署方案:迁移 067–072、loopback 配置差异、
缺配即拒绝的 fail-closed 规则、回滚与账号数据保留。只准备,未执行。
2026-10-29 05:13:15 +08:00
姚章浩
1faf5137ea
fix(libraryctl): 用完整容器 ID 判定写入者归属
...
build / build (push) Successful in 1m14s
`docker ps -q` 默认输出 12 位短 ID,与 declared 里的 64 位 ID 永不相等,
结果连已声明的写入者都被判成"未声明的并发写入者",封存永远开不了窗。
改用 --no-trunc 并按前缀双向匹配。
2026-10-29 05:02:10 +08:00
姚章浩
fd71ea349e
fix(libraryctl): 同镜像不等于同一个写入者
...
build / build (push) Has been cancelled
共享业务栈与专用验收实例共用同一个 WeKnora 镜像,原来只按镜像判"未声明写入者",
任何一台开着共享栈的机器都永远开不了窗。判据改为:同项目或无项目标签即冲突;
另一个项目只有数据库/队列目标与源相同才算冲突。单测覆盖六种组合。
2026-10-29 05:01:22 +08:00
姚章浩
906c282986
fix(libraryctl): 捕获/预检也走同一份 scope 映射
...
build / build (push) Successful in 1m14s
上一提交只改了 status;capture/preflight 仍直接读 routing bindings,
所以 CLI 封存的还是 bindings 里的库,而不是 API 的目标——契约读取直接失败。
2026-10-29 04:59:57 +08:00
姚章浩
23cc6c0afe
fix(libraryctl): 支持 MinIO 源,并与 API 共用同一份 scope 映射
...
build / build (push) Has been cancelled
为什么:专用验收实例用 S3 兼容的 MinIO,而 CLI 的源发现只认 oss 环境变量,
`STORAGE_TYPE=minio` 直接失败;同时 CLI 只读 routing bindings,API 读
LIBRARY_PRODUCTION_KB_*,两边指向不同知识库时,"封存的是哪个库"就说不清。
怎么改:新增 objectStoreFromSourceEnv(oss/minio,端点/桶缺失即报错,不退回默认值),
scopeBindings 让环境变量优先、bindings 兜底。单测覆盖 minio http/https、oss 与未知类型。
2026-10-29 04:58:45 +08:00
姚章浩
1f482e4b49
feat(library): Wiki 撤销按贡献比对,维护窗口在页面如实呈现
...
build / build (push) Successful in 1m18s
为什么:删除一篇与别人共同贡献同一 Wiki 页的文档后,页面还在、名字也在,
只有那篇文档的正文与引用被摘掉。原来的页面级差异会把这种语义重算显示成
"无变化",操作员据此会误判撤销没有生效。
怎么改:librarydiff 新增 CompareWiki,以 slug 为身份把正文/来源文档/引用分块/
出入边/目录分别取集合比较,输出 sources_removed、citations 变化与具体类别;
overview 的 diff.wiki 增加逐页明细(最多 50 页,超出置 pages_truncated),
说明文字明确"重算发生在源侧,本平台只如实比对与保留结果"。
页面:新增目标维护面板(实例级/库级、持有、入口开关、阶段、进度、恢复错误),
只有窗口仍持有且作业失败时才给"按预备份恢复";没有维护记录时写未接入 + fail closed。
变更页把 Wiki 逐页差异列出来源/引用怎么变。kind 补上 restore。
验过:go test ./internal/librarydiff ./internal/httpapi;web vitest 453 项;
make verify 全绿(15 项,无未运行项)。真实撤销语义验收见交付报告。
2026-10-29 04:45:34 +08:00
姚章浩
0ef79846e8
fix(library): 后台静默必须在关入口之后证明,并在停写者后复核
...
build / build (push) Successful in 1m19s
原顺序先证明后台空、再关入口排空:排空期间还在服务的在途请求会派生新任务,
那一刻的空到停写者时已经失效,而 app 收到 SIGTERM 会 exit(1) 把任务腰斩。
现在固定为:关入口并排空 → 证明后台静默(连续为空 + 稳定窗口 + 任务指纹)→
停写入者 → 停完再复核(队列非空/指纹变化即判 background_truncated)。
scheduled/retry 自行产生任务或任务卡住时 fail closed;旧 journal 的
background_idle 布尔不再当证明;入口关到一半失败时恢复入口并保持维护。
2026-10-29 04:02:59 +08:00
姚章浩
c7dafe987e
fix(library): 恢复校验按归档身份核对共享资源表
...
build / build (push) Successful in 1m12s
resources 是多库共享表:采集看正文里的 resource://handle,校验只看 chunks 重算可见集,
两边口径不同,恢复得一字不差也会被判 15/19 而拒绝开放。改成按归档 id 核对存在性与内容摘要。
2026-10-29 02:03:55 +08:00
姚章浩
f055fc174d
style(library): gofmt 恢复重排文件
build / build (push) Successful in 1m19s
2026-10-29 01:38:46 +08:00
姚章浩
b007acd443
feat(library): 恢复失败后可以重新排队,不必手工改库
...
build / build (push) Has been cancelled
失败作业的幂等键把恢复入口锁死,运维修好故障也点不动第二次。
现在按窗口重排失败作业(同窗口有活作业则拒绝并发),CLI/API 都能真恢复。
2026-10-29 01:38:39 +08:00
姚章浩
7e4900b51b
fix(library): 恢复前按实际运行状态重新停写入者
...
build / build (push) Successful in 1m16s
上一次窗口写下的 StopRequested 只是历史,写入者被人工拉起来后必须再停一次,
否则恢复校验会跑在半开的目标上。补一条回归测试。
2026-10-29 01:30:59 +08:00
姚章浩
1a04dfb4fa
fix(library): 恢复作业的队列 id 不能超过列宽
...
build / build (push) Successful in 1m15s
"librecover-"+窗口作业 id 超过 varchar(36),投递直接失败——恢复入口等于打不开。
按窗口摘要取 33 字符的确定性 id。
2026-10-29 01:07:11 +08:00
姚章浩
5afe151c7d
fix(library): 维护目标把后台静默检查的依赖接上
...
build / build (push) Successful in 1m14s
openLibraryMaintenance 漏传了目标库/队列,导致实例级窗口永远报
"缺少后台静默检查"——接线漏了,防线却看起来像在工作。
2026-10-29 01:01:52 +08:00
姚章浩
faf8027890
fix(library): 修 Docker inspect 反序列化,拓扑校验才读得到端口
...
build / build (push) Successful in 1m14s
containerState 里把 Config 映射成 map[string]string,真实返回是对象,
于是每次拓扑校验都报 invalid docker response——所有窗口都被误拒。
2026-10-29 00:56:22 +08:00
姚章浩
3643e9bf82
fix(library): 维护收尾必须按预备份恢复并校验
...
build / build (push) Successful in 1m20s
删掉会自己开入口、只看服务健康的 FinalizeAfterOperatorRecovery。
新的 RecoverWindow 绑定原作业/目标指纹/持久化预备份,在维护关闭下
执行恢复与逐类校验,通过才恢复服务与入口;失败继续维护。
预备份身份与内容风险在第一笔写入前一起落盘;后台任务必须静默后才停写者;
写入者发布端口即拒绝开窗口;维护占用改为按实例互斥(000072)。
2026-10-29 00:50:32 +08:00
姚章浩
ec737a9a65
fix(library): 排空证据要读闸门记录的 active_at_close
...
build / build (push) Successful in 1m16s
闸门写的是 active_at_close / drain_ms,Go 侧却去读 active(排空后必然 0)
与 waited_ms(已改名),于是证据里恒显示"关闭时无在途连接"。改为读真实字段。
2026-10-29 00:12:10 +08:00
姚章浩
96fffb5081
fix(library): 排空证据必须由本次关闭产生
...
build / build (push) Successful in 1m15s
读上一次的 drain.json 会把"上次排空过"当成本次证据。关闭前先删并确认
不存在,关闭后校验 mtime 不早于本次关闭;闸门没在跑就失败而不是读旧文件。
2026-10-28 23:54:55 +08:00
姚章浩
962bed8f53
feat(library): 人工恢复后按证据收尾维护窗口
...
build / build (push) Successful in 1m15s
回滚失败会按设计保持维护,但此前没有任何"人工确认后收尾"的路径:
journal 一直非终态,之后所有窗口都会被拦住。新增 libraryctl finalize:
不启动服务、不释放治理占用,只核对原本在跑的服务与入口是否真的在服务,
通过才把 journal 标成 operator_recovered。
2026-10-28 23:42:28 +08:00
姚章浩
38d04488de
feat(library): 入口闸门排空 + 维护占用可再接管
...
build / build (push) Successful in 1m28s
被代理的 WeKnora 收到 SIGTERM 会先关监听再 exit(1),在途请求被切断。
排空改到真正的连接入口:闸门停止接客、等在途连接归零、写 drain.json
并 exit 0;协调器只认这条证据,写者退出码只作记录。
顺带修掉维护占用的一条死锁:释放后的窗口此前不能被新作业接管,
等于第一次同步之后谁也再进不去;持有中的窗口仍只允许原作业重入。
2026-10-28 23:35:15 +08:00
姚章浩
6fe98c9a30
feat(library): 同步/恢复改为实例级维护窗口
...
build / build (push) Successful in 1m26s
只锁治理库 scope 挡不住 WeKnora 直连和后台写入。把封存链路的
维护机制接到发布路径:持久化 owner/目标身份/原服务状态,关入口、
停写入者、验证排空与入口不可达,再写目标;写完先恢复原运行状态
与入口才释放占用。内容风险一旦落盘,重启恢复不再自动启动写入者。
新增 000071 迁移记录 level/指纹/服务/入口状态;未接线的目标直接
拒绝写,不用库级锁冒充系统维护。
2026-10-28 23:01:29 +08:00
姚章浩
fe6e218d9c
fix(library): 整库只读接口改清单级读取,修掉真实超时
...
build / build (push) Successful in 1m17s
候选归档 79 版 / 56MB blob 上,overview、storage、snapshots 三个只读接口
都在 10s 请求期限后返回 503。分段计时定位到唯一瓶颈是按版本重读全部 blob:
Open 0ms、LoadManifest×79 11~22ms、ContentUsage 15~25ms、
Usage(逐版 Load 验字节)13.75~14.11s;单版 Load 261~290ms。
- Usage 拆成 Usage(逐版复核字节,同步/恢复与运维 CLI 用)与
UsageFromManifests(同一份去重实现,只做清单级校验),列举路径改用后者;
- library_storage.go 每版两次 Load、snapshots 每版一次 Load 改为一次清单读取;
- wiki/文档差异只读所需部件,被读部件仍由 OpenPart 复核摘要;
- LoadManifest 与 Load 共用同一套清单判据(严格解码 + 重新编码校验);
- 列举响应带 verification=manifest / verified=false,详情整版复核后才是 content,
避免把"清单可读"读成"完整性已验证";
- libraryWithDeadline 去掉超时后再写已结束响应的 goroutine 写法
(候选环境实测 http: superfluous response.WriteHeader call)。
回归:多版本共享大 blob 时枚举不读 blob 字节(篡改后枚举仍成功),
而 Load/OpenPart/Usage 仍拒绝坏 blob;坏清单两条路径都整条报错。
make verify 15 项全绿(local 档案)。
2026-10-28 21:52:14 +08:00
姚章浩
1609a0c9be
perf(librarysnapshot): 盘点改用 LoadManifest,去掉按版本重算 blob
...
build / build (push) Successful in 1m18s
实测:Load 单版 252ms、遍历 79 版 13.8s(2.77GB),这是 overview/storage 超时根因;
不是锁也不是连接池(Open 0ms,无 flock)。
- 新增 LoadManifest:只校验清单摘要与结构;同步/恢复仍走 Load 全量校验。
- ContentUsage 改用 LoadManifest。
- 已知未修完:两个接口仍 503,还有枚举调用点用 Load,待逐个替换。
2026-10-28 21:08:47 +08:00
姚章浩
d1dbb2b945
style: gofmt library_maintenance.go
build / build (push) Successful in 1m21s
2026-10-28 20:47:58 +08:00
姚章浩
288e01a01a
feat(library): 目标维护窗口(持久所有权/独占/release-on-verify)+ known-broken 记录
...
build / build (push) Failing after 16s
为什么:用户确认维护窗口方案,需要真实占有目标而不是 503 页面。
- 迁移 000070 library_maintenance:scope 唯一持有者、作业/目标身份、服务原状态、阶段。
- worker 在写目标前 acquire,验证+登记成功才 release;回滚失败/未验证保持 needs_restore。
- API GET /library/maintenance + 同步入口在他人持有时 409。
- 已知缺陷如实记录:候选实例该路由 404;kill 取证脚本竞态导致三项断言为 false。
2026-10-28 20:45:02 +08:00
姚章浩
b76a433574
fix(httpapi): 整库只读接口加请求级超时,避免归档大时请求挂死
...
build / build (push) Successful in 1m14s
为什么:候选前端联调时 /library/overview 与 /library/storage 会挂到连接被重置,
浏览器无法渲染。加 10s 超时并返回明确降级原因,同时差异计算放进看门狗。
2026-10-28 20:36:59 +08:00
姚章浩
def6022048
docs(ledger): 补记 0.1.137/0.1.138 并把进度文件更新到最终真实版本
build / build (push) Successful in 1m14s
2026-10-28 20:19:10 +08:00
姚章浩
e7ba2057ac
docs(matrix): V03 标注架构阻塞、P02 真实计数、R01 恢复已验证
build / build (push) Successful in 1m12s
2026-10-28 20:06:07 +08:00
姚章浩
cef25d92a6
feat(worker): 四类进度用 manifest 真实总量,未知保持 NULL
...
build / build (push) Successful in 1m11s
为什么:P02 要求分项计数/字节来自真实清单,不能永远 NULL 或写 0。
2026-10-28 19:55:43 +08:00
姚章浩
f722ea8727
docs(ledger): 补记 0.1.135 cancelled 与 0.1.136 success
build / build (push) Successful in 1m11s
2026-10-28 19:34:27 +08:00
姚章浩
e47e6d825d
docs(matrix): 追加入口级 8 场景真实验收对照
...
build / build (push) Successful in 1m14s
为什么:矩阵要与固定 SHA 的证据文件对应。
2026-10-28 19:31:17 +08:00
姚章浩
7a2188a0ee
docs(release): 入口级 8 场景真实验收证据与台账
...
build / build (push) Has been cancelled
为什么:证据必须对应固定 SHA;旧证据与报告冲突的部分保留但不再引用。
2026-10-28 19:31:09 +08:00
姚章浩
ea4cffbcaa
style: gofmt release_gate_test.go
build / build (push) Successful in 1m20s
2026-10-28 19:14:35 +08:00
姚章浩
c72b71d78a
fix(library): 预备份硬门禁 + 崩溃接管 + 五项入口验收
...
build / build (push) Failing after 17s
为什么:父审指出预备份引用持久化失败仍继续写目标、接管依赖启动扫描且漏掉租约未过期、
恢复失败被标成"无需恢复"、版本登记与作业状态分叉。
- BackupPrepared 返回 error,持久化失败即零写入;预备份同时登记 production_prebackup 版本。
- 接管改为按队列租约判定 + 运行期 30s 扫描 + 原子抢占 + 固定幂等键 + attempt 归零。
- 接管场景保留预备份、不再宣称"未写无需恢复"。
- 恢复/重放同一快照重新激活 production_effective(清 superseded_at)。
- finalize 续作只做校验+登记(finalize_only),不重写生产。
- 索引映射基线缺失时采用首次观察值并登记;索引校验加孤儿文档检查(按 knowledge_id)。
真实验收(候选 API :18089 + 真实 PG/ES/MinIO):
A0 首次发布、A1 撤销、B 按版本恢复、C 写阶段 SIGKILL 接管、
D 跨 kind 互斥与多 worker 单次执行、E1 登记失败、E2 finalize 续作、E3 预备份失败零写入。
2026-10-28 19:11:37 +08:00
姚章浩
ca51cbe202
docs(release): 台账补记 0.1.131–0.1.132 与候选验收报告
...
build / build (push) Successful in 1m17s
为什么:版本→SHA→CI→是否部署要可审计,候选 E2E 证据要指向固定路径。
2026-10-28 17:58:42 +08:00
姚章浩
6fea763c9b
chore: 移除误提交的二进制并加入忽略
...
build / build (push) Successful in 1m12s
为什么:构建产物不能进仓库,体积且不可审。
2026-10-28 17:55:47 +08:00
姚章浩
ac3b395102
fix(library): 对齐真实 WeKnora Schema + 入口级真实服务验收
...
build / build (push) Successful in 1m21s
为什么:候选环境改用真实 WeKnora 表结构后,暴露出多处"按猜的列名/形状"的假设,
以及若干 varchar 长度、对象定位符、空索引基线问题,导致真实链路跑不通。
- knowledge_tag_relations 无 tenant_id/KB 列 → 归属走父表;resources 作用域=绑定+chunk 引用。
- 写入顺序按真实外键;无代理键表用内容摘要核对。
- 队列作业 ID / 版本记录 ID 改固定长度摘要(列宽 varchar(36)/varchar(64))。
- 对象定位符拆 storage://<backend>/oss://<bucket>/<key>;provider 可配置。
- 空索引基线全链路一致(Current/Export/Backup/Archive),非空仍严格比对映射。
- finalize 阶段:版本登记失败不报成功;崩溃接管复用已持久化预备份。
- 迁移 000069:同一目标的 sync/restore 跨 kind 互斥。
2026-10-28 17:53:43 +08:00
姚章浩
8a68ea2da2
docs(release): 台账补记 0.1.129–0.1.130
...
build / build (push) Successful in 1m21s
为什么:候选 SHA、CI 结论与真实服务验收事实要落台账。
2026-10-28 16:30:08 +08:00
姚章浩
a2d051f6b3
feat(library): 按版本恢复入口与失败作业续作
...
build / build (push) Successful in 1m25s
为什么:恢复此前只有"失败自动回滚",没有手动按版本恢复;失败作业也只能重发封存。
- 迁移 000068 允许 kind=restore;POST /library/restores(管理员 + 该快照恢复授权 + 闸口)。
- POST /library/jobs/{id}/resume 对失败/取消的同步/恢复作业按原参数续作。
- worker 统一 runLibraryRelease,同步与恢复共用链路;成功后登记 production_effective 版本。
2026-10-28 16:27:46 +08:00
姚章浩
0b9dbe12cf
fix(library): 资源范围精确关联 + 内容级校验 + 真实对象存储验收
...
build / build (push) Successful in 1m13s
为什么:父审指出资源范围未关联外层 resources,会把别的库/租户资源算进来;
Verify 只看行数与 ID,同 ID 改正文/改向量/损坏对象都能通过;集成测试还在用假对象存储。
- scopeWhere(resources)/resourcePaths 用 resource_bindings.resource_id=resources.id 精确关联,
覆盖 knowledge/chunk 绑定并限制租户;资源部件名与资源 ID 对齐。
- Verify 增加逐行内容摘要、索引文档摘要、对象字节 SHA256 校验。
- 预备份一致性改为内容指纹(数量+摘要),同数量改写也会失败。
- 新增真实 MinIO 对象存储的本机验收用例,覆盖隔离/损坏/独立恢复。
2026-10-28 16:23:28 +08:00
姚章浩
6ca8481e8e
docs(release): 台账补记 0.1.126 与真实服务验收结论
...
build / build (push) Successful in 1m11s
为什么:候选 SHA 与 CI/验收结论要落在台账里,便于父审独立核对。
2026-10-28 16:00:16 +08:00
姚章浩
8da4666e76
test(library): 端到端编排在本机真实 PG/ES 上跑通
...
build / build (push) Successful in 1m14s
为什么:只验证单阶段写入还不够,完整链路(授权→预备份→四类写入→校验)也要在真实服务上跑。
本机 WeKnora 测试栈一次性库与随机索引已通过,CI 无这些服务故在 test-scope 声明为可选。
2026-10-28 15:58:06 +08:00
姚章浩
281699a431
feat(library): 生产整库真实读写/校验/恢复与本机真实服务验收
...
build / build (push) Successful in 1m21s
为什么:生产目标此前是"无条件失败"的占位,编排再完整也不能落地;本轮把它做成真实实现,
并在本机 WeKnora 测试栈的真实 PG/ES 上跑通导入、撤销、预备份与故障恢复。
- ProductionLibraryTarget:Current 读行数+身份摘要;Apply 按阶段真实写入(database/wiki
同事务先删本库再插、resources 传对象、index 搬运原始文档与向量);Verify 比对身份摘要;
Restore 按预备份快照回放。
- 撤销真正生效:索引阶段写入后 PruneScope 删除快照里没有的文档。
- ProductionBackupStore:导出前独立完整预备份,导出前后行数不一致即失败。
- worker 用注入配置装配目标与预备份;缺项把变量名写进阶段并失败,不再有占位对象。
- capacity 安全加法防溢出;保留策略组合语义明确(各维度都超限才候选)。
- 新增本机真实服务集成测试(一次性 kg_library_test_* 库 + 随机 ES 索引),
覆盖导入/校验/撤销/预备份/故障注入/恢复。
2026-10-28 15:54:01 +08:00