Commit Graph

128 Commits

Author SHA1 Message Date
姚章浩 98294b9583 fix(library): 统一执行身份、终态收尾、准入与数据身份
build / build (push) Failing after 24s
why:审计 19 项(12 P1 / 7 P2)来自同一批根因,逐点试错会把协议撕成十几份:
  · 意图与执行混为一谈(F01/F15):`library.sync:<scope>:<快照>` 是终身幂等键,
    A→B→A 的第三次发布拿到第一次的历史成功作业,什么都不做;
  · 版本行既是实体又是事件(F02/F09):主键只由 (kind,scope,快照) 决定、写入是
    upsert,第二个作业覆盖 `source_job_id`/`evidence`/`created_at`;
  · 接管没有代次(F13):两个 worker 都能认领同一 pending 作业,失租的旧执行还能
    写业务状态、释放别人的维护锁;
  · 早退与终态没有统一政策(F03/F04/F05/F06):半写窗口的前置检查失败会重新开门、
    服务起不来也照样开入口、journal 终态后收尾不可重建、恢复成功不回写 current;
  · 数据身份与准入各写一套(F07/F08/F14/F17):接管丢了复用语义、全库搬运不改
    location_hash、通用入口可造 library.* 作业、目标模型从没被问过;
  · 存储/容量/UI/CI 判据各自为政(F10/F11/F12/F16/F18/F19)。

what:按批准的一套协议集中实施(详见 handoffs/release-consolidated-implementation/
current-contract.md):
  · operation(一次明确意图)/ attempt(epoch 代次)/ 不可变版本事件 / current 指针;
    治理库迁移 76,只动治理库,不碰 WeKnora Schema/源码/镜像;
  · 所有业务状态、阶段、版本事件、维护锁写入带 epoch 守卫(失租代次写不进去);
    心跳失租立刻取消 handler;
  · 半写窗口早退保持关闭;服务未全部健康绝不开入口;journal 终态可从持久事实重建
    收尾;恢复成功登记 recovery 事件并推进 current;
  · worker 在动维护前核对业务行/kind/scope/队列关联;通用入口拒绝 library.*;
  · 全库搬运重算 location_hash 并与文档级导入共用实现;接管消费写集合的复用决定;
    发布前核目标实时模型契约、容量门禁前置;
  · 存储保护闭包改为全量依赖、类型只认显式登记、保护未知则不出可删候选;
  · 页面核 HTTP 状态与结构、恢复纳入轮询、Wiki 差异覆盖标题/摘要/父级。

how:`make verify` rc=0(16 项必需检查全绿,含 go test 全量与前端 485 例);
`go vet ./...` rc=0;`npx tsc -p tsconfig.json --noEmit` rc=0;逐项负例见各包测试
(F03/F04/F08/F12/F13/F14/F16/F18/F19 都有先红后绿记录)。
未执行:治理库迁移到任何已有库、真实 PG/ES/S3/WeKnora 集成、故障注入、部署。
2026-10-30 16:14:54 +08:00
姚章浩 74fb04b2d1 fix(web): 整库页按作业类型与终态显示并补全轮询
- 成功的作业不再写"尚未启动/此时尚未运行",阶段条对恢复/基线也读自己的阶段行;
- 基线/恢复不再被写成"生产同步""封存进行中",改为逐类映射;
- 抽屉按版本登记标注每份归档,未登记的不冒充候选;
- 轮询覆盖投递→终态读回:投递中动作、封存队列、任一 scope 在飞作业都算在跑,
  读到终态再读回一次就停,失败作业不会被无限轮询。
2026-10-30 01:33:51 +08:00
姚章浩 3284658eb1 feat(web): 发布页接上签发同步授权与建立基线入口
build / build (push) Successful in 1m31s
发布页原来只有一个永远 disabled 的"启动同步",title 还写着"生产同步执行链
尚未接线"——执行链其实已经存在。现在:

- 管理员看到"签发同步授权(30 分钟)"(action=sync,绑定范围+目标快照),
  签发与执行仍是两步,不会自动签发;
- 闸口全满足时"启动同步"真的按 POST /library/syncs 投递,被拒时逐条显示
  接口返回的缺项;
- 目标非空又无生效版本时,管理员看到"建立目标权威基线(维护隔离)";
- 测试封存候选改用接口给的 test_sealed(来自版本登记),不再拿归档里最新
  一份顶替;
- 维护卡片区分"未运行维护 / 维护能力未接线 / 能力未知",逐项列出缺的变量。

验证:vitest 99 个文件 469 个用例全绿,tsc --noEmit 无错;反向自检(把按钮
改回恒 disabled、把维护文案改回旧句)两处按预期变红后复原。
2026-10-29 18:16:25 +08:00
姚章浩 f9c15a8f14 fix(web): 存储提示改为实际能力
build / build (push) Successful in 1m24s
页面仍写"保留策略与清理在系统设置→存储管理,均未接线",但存储与备份已有只读
去重/保护范围/预览。改为说明可查看什么、什么尚未开放。
2026-10-29 15:24:30 +08:00
姚章浩 c40696145b feat(library-web): 恢复入口按真实条件启用并支持签发恢复授权
原来"恢复至该版本"写死 disabled,标题还写"生产恢复未接线"——而 POST /library/restores
与授权接口早已可用,等于把整库还原的唯一入口藏起来。

现在页面按 GET /library/restore-availability 启用:缺授权时管理员可签发 30 分钟
有效期的 restore 授权(固定期限,没有"永久授权"),条件满足才可点恢复;工程师只看到
条件与"仅管理员可发起"。封存不可发起时也不再写死"通道未接线",而是显示接口原因、
执行器身份与观测时间。
2026-10-29 13:01:46 +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
姚章浩 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
姚章浩 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
姚章浩 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
姚章浩 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、启动同步按缺项禁用、
  同步明细/四类分项来自持久阶段;阶段勾选只认当前作业证据
- 准备信息标注封存时间与范围,不声称实时测试库已就绪
2026-10-28 13:58:51 +08:00
姚章浩 58d0483d44 feat(release): 按确认稿重做发布管理(两库页签 + 单作业区 + 版本抽屉)
build / build (push) Failing after 19s
- 顶部只有对内/对外两个知识库页签,切换只渲染选中库的一个作业区
- 同步前:生产当前→拟发布、新增/更新/删除与 Wiki 完整快照、准备清单、
  版本与快照/启动同步、本次变更 + 生产保护与恢复、五段作业阶段
- 同步中:作业阶段/版本/已用时 + 四类数据卡 + 同步明细与异常,未接入项
  只显示状态、不编百分比
- 版本与快照抽屉按 scope 列全部封存记录与分项摘要,恢复入口在真实演练前禁用
- 存储口径移到系统设置→存储管理只读区;保留/清理/自动清理标未接线
- 生产段无真实数据一律"未接入/尚无记录",启动同步禁用并说明
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:发布管理只保留对内/对外两目标,整合快照/完整性/作业/存储;链路未接线项禁用
  并标原因;整库版本独立导航并入;文档级旧流程折叠保留
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 服务并读回权限
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:文档/页面/接口不再把效果测试列为封版门槛
2026-10-28 12:01:09 +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 删除语义重算、
生产预备份/恢复演练/双闸/同步协调仍未完成。
2026-10-28 11:39:50 +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
姚章浩 b55292bba1 fix(catalog): 重复点击当前来源时保留已加载目录
build / build (push) Successful in 1m8s
2026-10-26 18:56:18 +08:00
姚章浩 e744114ff4 fix(catalog): 打通共享授权扫描与统一来源清单显示
build / build (push) Successful in 1m18s
2026-10-26 18:36:11 +08:00
hermes 1e8d8e3cdf fix(qa): 数据源配置去掉页面噪声
build / build (push) Successful in 1m6s
去掉页头副标题与刷新状态按钮、工程师/管理员权限条、活动版本横幅、
与向导重复的模块说明,以及「去掉来源」按钮(保留停用来源与修订历史)。
2026-10-26 17:48:33 +08:00
hermes 842bfccc1b feat(qa): 向导补上 Partner Portal 卡片
build / build (push) Successful in 1m7s
PP 一个门户一条来源:已接入时只做说明不重复登记,未接入时提示需服务端放置只读凭据。
2026-10-26 17:39:24 +08:00
hermes 740f0e69ba feat(qa): 数据源配置改为统一添加向导
build / build (push) Successful in 1m6s
一个「+ 添加数据源」入口、五步固定(类型→授权→范围→校验→保存),类型只换候选来源与授权说明,
版式与动作词一致;对内/对外不在此配置,仍只在来源与目录标注。钉钉两类复用既有登记与扫码会话路径。
2026-10-26 17:36:59 +08:00
hermes 2902ba0af2 feat(qa): 周报页移除下载 MD 与下载明细 CSV 按钮
build / build (push) Successful in 1m6s
保留复制排版内容与自动保存;列表页的完整明细导出不受影响。
2026-10-26 16:26:02 +08:00
hermes 555bc6ff56 feat(qa): 确认周报时自动附上统计看板图片
build / build (push) Successful in 1m6s
看板图只能由浏览器渲染,改为确认动作内自动生成并上传,不再要求另点按钮;只在已附图时提供重新生成。
2026-10-26 16:18:00 +08:00
hermes 23b19350cc feat(qa): 周报邮件新增测试/审核邮箱
build / build (push) Successful in 1m13s
测试发送只投递到该地址,不打扰主送与抄送名单;未填时退回主送首位。
2026-10-26 16:06:17 +08:00
hermes 822fb652ff feat(qa): 周报邮件区分主送抄送并附统计看板图片
build / build (push) Successful in 1m21s
设置新增抄送列表,MIME 增加 Cc 头、envelope 同时投递主送与抄送,同一地址不得同时出现在两边。
确认后可保存统计看板 PNG(multipart/related + cid),发送时放在正文末尾内联显示;正文改动使确认失效后不再使用旧图。
2026-10-26 15:59:06 +08:00
hermes 600e9a2dc2 feat(qa): 周报邮件支持立即发送测试
build / build (push) Successful in 1m17s
管理员可在周报页先发一封测试邮件验证邮箱配置;测试不写入发送记录、不改变确认状态,也不会把该周标记为已发送。
2026-10-26 15:31:46 +08:00
hermes eed83039ab fix(qa): 邮件设置未配置时返回空收件人数组
build / build (push) Successful in 1m14s
未初始化设置时 recipients 为 null,前端严格解析判为无效,导致周报页显示“响应无效”。
后端统一返回空数组,前端同时兼容历史的 null。
2026-10-26 10:30:29 +08:00
hermes 5aa32492de fix(qa): 周报邮件读取鉴权与测试隔离
build / build (push) Failing after 17s
只读查询不再要求同源操作意图,写操作仍需;前端改为直接消费已解包的 data。
调度集成测试按租户清理并要求一次性测试库,避免误清正式数据。
2026-10-26 09:57:41 +08:00
hermes 6816289552 feat(qa): 周报确认后按设定时段自动发邮件
build / build (push) Successful in 1m23s
周报页新增自动发送区:管理员配置 SMTP/收件人/发送星期与小时,授权码用主密钥加密保存。
确认绑定当前草稿版本与正文哈希,正文再改则确认失效;worker 每分钟仅在启用、到点、周已结束且未发送过时发一次。
邮件同时提供渲染后的 HTML 与可读纯文本;SMTP 仅允许 TLS,拒绝明文。
迁移 000060 新增设置、确认与发送记录三张表,唯一键防重复发送。
2026-10-26 09:49:23 +08:00
hermes 1d33ff6976 fix(qa): 无法判定的判错结论不再计入正确率分母
build / build (push) Successful in 1m18s
根因为“结果不清”或未归因的判错记录移出正确率分母,并以 unjudged 单独返回,覆盖率口径不变。
统计规则版本升到 calendar-month-strict-yes-over-yes-no-v2,前端严格解析同步接受该字段。
2026-10-25 23:11:12 +08:00
姚章浩 1d880a0f49 fix(qa): 周报固定对照布局并移除模式切换按钮
build / build (push) Successful in 1m7s
始终保留正文编辑与排版预览,删除三模式切换状态和不再使用的样式。
自动保存状态保持原位置,窄屏沿用上下对照,复制及下载不变。
验证:三个按钮不渲染且两侧始终存在先红后绿,复制/持久化保存状态机回归、完整门禁和原生备份恢复通过。
2026-10-25 17:48:27 +08:00
姚章浩 c239a5ef0e feat(qa): 周报复制渲染后的排版文字
build / build (push) Successful in 1m6s
新增复制排版内容,同时提供富文本HTML与可读纯文本,保留MD下载。
各模式独立使用最新正文,不包含预览工具栏和原文查看器;局域网HTTP走原生复制回退,失败不虚报。
验证:富文本双格式、API缺失/拒绝/失败及复制入口先红后绿,编辑保存状态机回归、完整门禁和原生备份恢复通过。
2026-10-25 17:36:22 +08:00
姚章浩 0f89c82625 feat(qa): 详情面板顶部增加上一条和下一条
build / build (push) Successful in 1m7s
按当前筛选后的完整已载入顺序切换,边界自动禁用,后台续页到达后自动开放。
独立保存选中目标以支持加载及失败时切换,沿用取消/迟到响应隔离,关闭返回原表格焦点。
验证:详情首中尾/未知目标、加载/失败、100到101续页先红后绿;既有流水和看板范围回归、完整门禁及原生备份恢复通过。
2026-10-25 16:40:35 +08:00
姚章浩 9d8a40beab fix(qa): 表头筛选不再影响统计看板
build / build (push) Successful in 1m10s
只在流水及明细范围保留表头条件,统计请求只携带已执行时间和关键词。
拒绝将被字段筛选的返回误作全范围看板,原查询对象保持不变。
验证:请求隔离/错误范围拒绝先红后绿,流水筛选与实时范围回归通过;完整门禁及原生备份恢复通过。
2026-10-25 14:57:23 +08:00
姚章浩 5d525ff592 feat(qa): 问题流水表首列增加连续序号
build / build (push) Successful in 1m14s
序号按当前筛选范围的位置计算,不写业务记录或改变导出字段。
后台续载和虚拟滚动沿用绝对索引,空结果/占位行同步列数。
验证:序号首列/连续性/占位与aria行数红绿通过;完整本地门禁及原生备份恢复通过。
2026-10-25 14:23:34 +08:00
姚章浩 09b2c1dce5 fix(qa): 表头筛选并统一未覆盖正确性待确认
build / build (push) Successful in 1m17s
修正筛选入口位置:五项条件在表头就地选择,保持完整集筛选与无感续载。
统一固定规则:未覆盖一律待确认,原问答/人工模型证据不改写,已覆盖仍保留点踩优先。
验证:行为红绿、前端/Go全套及隔离PostgreSQL全mirror竞态通过;完整本地门禁与原生备份真实恢复通过。
2026-10-25 13:58:08 +08:00
姚章浩 80d5078363 fix(qa): 修正五字段筛选区域换行布局
build / build (push) Successful in 1m6s
原因:旧版宽屏查询区强制单行,新增的全宽筛选行被推到可视区外。
修复:查询区允许换行,五字段筛选独立排在查询和同步操作之后。
验证:新增回归断言先红后绿;完整 make verify 本地必需项已通过;候选未部署。
2026-10-25 13:03:44 +08:00
姚章浩 00c4c13283 fix(qa): 首批即显并统一五字段后端筛选
build / build (push) Successful in 1m19s
列表正文改为按需读取;保留完整导出、版本隔离和有效标签筛选。
验证:前端全量、Go全量及隔离PG全mirror竞态通过;覆盖首批回调、续载失败与筛选分页。
2026-10-25 12:45:31 +08:00
姚章浩 65653e5c01 fix(qa): 已覆盖正确性改为问题答案二元评估
build / build (push) Successful in 1m14s
已覆盖只允许正确或错误,未覆盖可待确认,缺引用不再阻止正确结论。
复用统一事务写入与不可变审计重评旧待确认,保留原问答和人工结论。
验证:全仓 make verify、真实隔离 PostgreSQL 全包与 race 回归通过。
2026-10-24 16:47:09 +08:00