Commit Graph

246 Commits

Author SHA1 Message Date
姚章浩 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
姚章浩 444b820210 docs(release): 台账补记 0.1.123 与 run164 失败说明
build / build (push) Successful in 1m10s
为什么:run164 的失败原因与修复要留在台账里,不能让失败消失。
2026-10-28 15:32:52 +08:00
姚章浩 67a48faf23 test(qawemail): 去掉单测对外部 DNS 的依赖
build / build (push) Successful in 1m17s
为什么:normalize 会解析主机名,测试用 smtp.example.com;构建机没有外网 DNS 时
必红(run164 tests-go 3 个失败)。改成 localhost,并补一条 .invalid 保留域必须
判非法的断言,校验规则没有放宽。
2026-10-28 15:30:43 +08:00
姚章浩 7e3075f0fc docs(release): 台账补记 0.1.121–0.1.122 与候选说明
build / build (push) Failing after 48s
为什么:每个开发版本的 SHA 与 CI 结论要能独立审计,不留在交付报告里。
2026-10-28 15:17:48 +08:00
姚章浩 2038462dbb feat(library): Wiki 页面级差异与页面展示
build / build (push) Successful in 1m24s
为什么:撤销文档后 Wiki 变化此前只有"快照保存"证据;页面级差异能给出增/改/撤,
但必须写明它不等于实体、概念、边与引用的语义重算。

- overview 差异新增 wiki 字段:读两份快照的 wiki_pages 行数组比较,缺部件时 unknown。
- 发布管理"本次变更"显示 Wiki 新增/更新/撤销页数与页面级声明。
- 真实归档验证:对内 vs 对外 = 新增 31 / 撤销 1,反向镜像一致。
2026-10-28 15:15:33 +08:00
姚章浩 7b8cc0384b feat(library): 生产发布授权与同步/恢复编排,worker 接线
build / build (push) Successful in 1m19s
为什么:同步入口此前只会拒绝;授权、预备份、四类写入、验证与失败恢复都没有代码。
本轮把编排与授权实现出来,真实生产执行仍按授权闸口关闭。

- internal/libraryrelease:预备份 → 数据库/资源/索引/Wiki → 验证 → 失败恢复;
  授权过期/目标不符/快照不符/参数变化在动生产前拒绝;恢复失败单独上报。
- 迁移 000067 library_release_authorizations(目标+快照+参数摘要+有效期,可撤销)。
- POST/GET /api/v1/library/authorizations 与 /{id}/revoke,仅管理员签发,5–1440 分钟。
- worker library.sync 接编排:先闸口再授权,阶段落库,只有编排成功才标成功。
- 生产目标适配器未配置时显式失败(不返回零值状态),预备份存储同。
- overview 返回授权状态,页面"生产保护与恢复"显示签发人与有效期。
- 验收矩阵区分"已实现·隔离测试通过"与"真实执行未授权"。
2026-10-28 15:11:27 +08:00
姚章浩 f91359f881 feat(library): 存储管理真实化——容量门禁、依赖保护与清理预览
build / build (push) Successful in 1m15s
为什么:存储页原来只有占用数字,保留/依赖保护/清理预览写"未接线";这些都不需要生产写权限,
按"未设置就不做决定"的口径实现成只读计算。

- internal/libraryretention:按保留数量/天数生成预览;生产生效、每库最近封存、每次生产预备份、
  在飞作业引用一律受保护;回收预览只算独占字节,共享 blob 不计。
- internal/libraryretention.CheckCapacity:预算未设置即不放行(无法证明装得下),超预算阻断;
  已并入 POST /library/syncs 的 gate 缺项。
- 新增 GET /api/v1/library/storage:真实归档用量 + 三类版本保护依据 + 策略 + 预览 + 容量,只读。
- 系统设置→存储管理改为读该接口:策略未设置时明确"全部保留、不生成候选",自动清理恒关闭。
- 配置项 LIBRARY_CAPACITY_BUDGET_BYTES / LIBRARY_RETENTION_VERSIONS / LIBRARY_RETENTION_DAYS(未设=0)。
2026-10-28 15:04:44 +08:00
姚章浩 12bb839d8a docs(release): 台账补记 0.1.116–0.1.118 的 CI 结论
build / build (push) Successful in 1m15s
为什么:版本台账要能独立审计每个版本的 SHA 与 CI 结论,不能只留在交付报告里。
2026-10-28 14:43:22 +08:00
姚章浩 3ad48ff32c feat(web): 版本抽屉分列三类版本,不再只写"生产未接入"
build / build (push) Successful in 1m30s
为什么:抽屉原来把所有记录都当测试封存,生产生效与本次预备份的真实状态读不到;
overview 已有三类版本,抽屉直接展示,缺的写"无记录",不互相顶替。
2026-10-28 14:41:33 +08:00
姚章浩 e313ae12f2 feat(library): 真实差异比对 + 孤儿作业回收 + 验收矩阵与台账
build / build (push) Successful in 1m18s
为什么:发布管理的差异一直显示"未接入",业务作业也可能因队列丢作业而永久占锁;
本轮把这两件做成真实实现,并把 30 个验收项与 CI/版本身份落成可审计文档。

- internal/librarydiff:稳定文档 ID + 排除易变列的整行摘要做增改撤销;overview 在
  生产权威版本与测试封存都在时给出 computed 差异并标注两侧快照,缺一侧仍是 unknown。
- 发布管理"本次变更"列文档身份与比对版本;无差异时明确写"没有文档差异"。
- ReconcileLibraryJobs:worker 启动清理队列已无对应作业的孤儿,避免永久互斥。
- docs/library-acceptance-matrix.md 与 docs/release-ledger.md 固定证据与版本事实。
2026-10-28 14:39:17 +08:00
姚章浩 e3db157ba8 test(postgres): 迁移清单跟随 000066 更新
build / build (push) Successful in 1m17s
为什么:新增 000066 整库作业迁移后,清单测试仍写死 65 条,CI tests-go 因此红。
不只改计数,同时断言 66 建出 library_versions 与 library_jobs_active 互斥索引。
2026-10-28 14:33:55 +08:00
姚章浩 7e1610da44 style(web): 格式化发布管理相关文件
build / build (push) Failing after 57s
为什么:远端 CI run149–155 连续在 format 步骤失败,报的就是这四个新文件;
不做格式白名单、不跳过检查,直接按仓库既有 prettier 配置格式化。
2026-10-28 14:28:44 +08:00
姚章浩 dc9e827656 feat(library): 整库版本/作业持久化与状态读取契约,生产同步默认拒绝
build / build (push) Failing after 17s
- 新增 library_versions:测试封存、生产生效、生产预备份三类分开登记,
  生产生效版本唯一(旧版本必须先 supersede),测试快照不能顶替生产版本
- 新增 library_jobs + library_job_stages:业务作业身份、阶段、错误与恢复说明,
  分项计数用 NULL 表示"总量未知";互斥与幂等由数据库唯一索引保证
- 新增 GET /api/v1/library/overview、/jobs、/jobs/{id};POST /syncs 闸口未齐
  返回 503 缺项且不建作业
- 封存作业落库:先建业务作业再入队,worker 推进 export 阶段并登记 test_sealed
- 发布管理读真实状态:生产未知不再顶替、差异 unknown、启动同步按缺项禁用、
  同步明细/四类分项来自持久阶段;阶段勾选只认当前作业证据
- 准备信息标注封存时间与范围,不声称实时测试库已就绪
snapshot/v0.1.114
2026-10-28 13:58:51 +08:00
姚章浩 58d0483d44 feat(release): 按确认稿重做发布管理(两库页签 + 单作业区 + 版本抽屉)
build / build (push) Failing after 19s
- 顶部只有对内/对外两个知识库页签,切换只渲染选中库的一个作业区
- 同步前:生产当前→拟发布、新增/更新/删除与 Wiki 完整快照、准备清单、
  版本与快照/启动同步、本次变更 + 生产保护与恢复、五段作业阶段
- 同步中:作业阶段/版本/已用时 + 四类数据卡 + 同步明细与异常,未接入项
  只显示状态、不编百分比
- 版本与快照抽屉按 scope 列全部封存记录与分项摘要,恢复入口在真实演练前禁用
- 存储口径移到系统设置→存储管理只读区;保留/清理/自动清理标未接线
- 生产段无真实数据一律"未接入/尚无记录",启动同步禁用并说明
snapshot/v0.1.113
2026-10-28 13:23:55 +08:00
姚章浩 bb64c32654 feat(release): 发布管理整库视图 + R4/R5/R6/R7 修复
build / build (push) Failing after 16s
- R4:封存子进程 SIGTERM 宽限停、libraryctl 信号转 ctx;失败/超时后 agent 再做
  有界 recover,恢复失败即降级阻断封存并给出原因;启动先恢复、关闭等恢复完成
- R5:封存闸口以已存 payload 为准,同作业号换范围 409 且不入新队;重放回显真实状态
- R6:作业列表按类型查询(ListByType),不再先取全局再过滤
- R7:根目录 libraryagent 二进制移出版本库,保留运行产物并精确忽略
- UI:发布管理只保留对内/对外两目标,整合快照/完整性/作业/存储;链路未接线项禁用
  并标原因;整库版本独立导航并入;文档级旧流程折叠保留
snapshot/v0.1.112
2026-10-28 12:28:04 +08:00
姚章浩 910c0fcd76 feat(library): 页面发起封存的最小权限主机侧执行边界
build / build (push) Failing after 16s
- libraryagent:0700 目录内 0600 unix socket + SO_PEERCRED 同 uid,
  固定 binary/归档/日志/项目/写入者声明,请求只能选范围与作业号
- API:POST/GET /api/v1/library/captures(入队 library.capture + 读队列状态)
- worker:library.capture handler 走 socket;启动先 recover;不挂 Docker socket、
  不持有来源凭据
- web:整库版本页显示真实作业状态并可发起封存(未接线/无权限给出原因)
- scripts/library-agent-install.sh:构建、安装 systemd user 服务并读回权限
snapshot/v0.1.111
2026-10-28 12:11:08 +08:00
姚章浩 c5e033dd0e fix(library): 幂等重放、跨版本去重用量与契约复核
build / build (push) Failing after 15s
- 同作业号重跑读持久日志+已封存清单按首次请求重放(source_read=false,
  writers_stopped=false),换范围/绑定库或清单校验失败即拒绝
- 归档用量按跨版本去重统计内容字节,清单/未引用 blob/实际分配单列,
  不再用各版本 unique 之和冒充归档占用
- 冻结窗口内复核来源契约,不一致即中止;拒绝组外同镜像运行容器
- 补齐整库只读接口的 OpenAPI 契约
- 按用户确认取消 A06:文档/页面/接口不再把效果测试列为封版门槛
snapshot/v0.1.110
2026-10-28 12:01:09 +08:00
姚章浩 20fc40a147 test(library): 验证只读整库版本读取路径并修正部署校验
build / build (push) Failing after 15s
- 合成归档断言数量/字节/契约/策略与"未接线"行为
- 部署校验改用容器内读回,不再依赖需登录的 build-info
snapshot/v0.1.109
2026-10-28 11:44:05 +08:00
姚章浩 045fc44f0e feat(library): 接通整库封存真实入口与只读版本页
build / build (push) Failing after 19s
- libraryctl:status/preflight/capture/list/verify/recover,只读来源会话、
  结清检查、契约推导、维护窗口内停写者、导出十表+索引+对象+Wiki、封存候选后恢复
- libraryfreeze.ProjectController:按 Compose 项目逐服务声明固定身份,
  未声明服务/容器重建即拒绝,仅 SIGTERM,恢复后必须 healthy
- httpapi:GET /api/v1/library/snapshots[/{id}] 只读列出封存产物
- web:「整库版本」页(只读、未接线显示原因、无假按钮)
- api:LIBRARY_ARCHIVE_ROOT + 归档根只读挂载
- docs/library-capture.md:运维手册与 2026-10-28 两次真实封存实测

不代表整库业务验收通过:内容/问答/性能验收、跨系统切点、Wiki 删除语义重算、
生产预备份/恢复演练/双闸/同步协调仍未完成。
snapshot/v0.1.108
2026-10-28 11:39:50 +08:00
姚章浩 864a1632e0 test(snapshot): 增加真实测试源只读诊断并记录孤立索引阻塞
build / build (push) Successful in 1m11s
snapshot/v0.1.107
2026-10-28 08:32:23 +08:00
姚章浩 9f990158b9 test(snapshot): 联合验证真实隔离存储与暂停恢复链
build / build (push) Successful in 1m8s
2026-10-28 08:22:21 +08:00
姚章浩 3dc854de4b fix(snapshot): 阻止旧策略作业重放冒充新验收口径
build / build (push) Successful in 1m6s
snapshot/v0.1.105
2026-10-28 08:05:39 +08:00
姚章浩 76f687b52d feat(snapshot): 按已确认口径保留索引产物并标记验收策略
build / build (push) Successful in 1m12s
2026-10-28 08:01:46 +08:00
姚章浩 2fc6dc068b fix(snapshot): 按持久元数据核验生成问题索引
build / build (push) Successful in 1m11s
snapshot/v0.1.103
2026-10-28 01:24:32 +08:00
姚章浩 fe2e7ac4f4 fix(snapshot): 拒绝旧式分块缺失索引的候选
build / build (push) Successful in 1m10s
snapshot/v0.1.102
2026-10-28 01:17:58 +08:00
姚章浩 c4759bb61c fix(snapshot): 校验正文索引的确定性标题变换
build / build (push) Successful in 1m13s
snapshot/v0.1.101
2026-10-28 01:13:16 +08:00
姚章浩 bf049cee1f fix(snapshot): 暂停前后强制检查共享源全库任务
build / build (push) Successful in 1m12s
snapshot/v0.1.100
2026-10-28 01:05:44 +08:00
姚章浩 55fba5fc0e fix(snapshot): 按表解析状态并保留完整Wiki内容
build / build (push) Successful in 1m11s
snapshot/v0.1.99
2026-10-28 00:57:43 +08:00
姚章浩 ce2f90c1c5 fix(snapshot): 阻止已索引分块缺失时封存整库
build / build (push) Successful in 1m12s
snapshot/v0.1.98
2026-10-28 00:43:31 +08:00
姚章浩 2c5ecdf0f3 fix(version): 补齐整库基础版本的独立快照说明
build / build (push) Successful in 1m11s
snapshot/v0.1.97
2026-10-28 00:34:20 +08:00
姚章浩 9105f8316c feat(snapshot): 增加整库独立快照及测试停写恢复基础
build / build (push) Successful in 1m20s
snapshot/v0.1.96
2026-10-27 23:44:12 +08:00
姚章浩 74aef1e373 fix(fetch): 修复钉钉来源身份与取件失败监控
build / build (push) Successful in 1m17s
2026-10-27 14:36:24 +08:00
姚章浩 1b09f7d35b feat(monitor): 卡片概况与统一文件处理表
build / build (push) Successful in 1m17s
2026-10-27 12:14:19 +08:00
姚章浩 d8d143eca0 style(catalog): 移除冗余策略说明和大小展示
build / build (push) Successful in 1m5s
2026-10-27 10:54:28 +08:00
姚章浩 52f4117835 style(catalog): 文件格式筛选默认折叠
build / build (push) Successful in 1m5s
2026-10-27 10:48:09 +08:00
姚章浩 7448d130ec feat(settings): 汇总全部数据源配置操作审计
build / build (push) Successful in 1m13s
2026-10-27 10:42:30 +08:00
姚章浩 f0b12412a1 fix(settings): 仅展示只读DWS凭证状态
build / build (push) Successful in 1m10s
2026-10-27 09:56:19 +08:00
姚章浩 5b6e154459 feat(settings): 增加连接移除确认并收拢数据源设置
build / build (push) Successful in 1m6s
2026-10-27 09:40:13 +08:00
姚章浩 8930ef29cd feat(settings): 集中刷新策略与账号授权并独立设置审计
build / build (push) Successful in 1m11s
2026-10-27 09:28:16 +08:00
姚章浩 a55d7f454e style(settings): 精简数据源列表并收起低频管理操作
build / build (push) Successful in 1m8s
2026-10-26 19:16:44 +08:00