姚章浩
02ee5da231
fix(catalog): 保留首次扫描零进度避免来源列表解析失败
build / build (push) Successful in 1m15s
2026-10-26 18:42:47 +08:00
姚章浩
e744114ff4
fix(catalog): 打通共享授权扫描与统一来源清单显示
build / build (push) Successful in 1m18s
2026-10-26 18:36:11 +08:00
Hermes
c8f05ee46f
fix(qa): 数据源登记改走 dws,不再要求扫码
...
build / build (push) Failing after 15s
侧车扫码会话只用于解析空间;dws 已有有效凭据且能给出空间 id 与根节点,
登记直接用 dws 结果生成确定性键,同名来源回 200 already_present,认不出的空间才回落侧车。
2026-10-26 17:58:44 +08:00
hermes
020cae1228
style: gofmt 新增的发现与路由文件
build / build (push) Successful in 1m9s
2026-10-26 17:23:27 +08:00
hermes
017cbcb851
feat(api): 数据源统一列举与添加前校验
...
build / build (push) Failing after 16s
GET /source-catalog/available 四类同一形状(wiki/drive/doc/pp),类型差异只放在 content_type;
POST /source-catalog/validate 真读一次:文档表格校验可读、知识库钉盘校验账号仍可见,失败不让添加。
2026-10-26 17:22:09 +08:00
hermes
b3992bfa0f
feat(discovery): 钉钉在线文档与表格的发现与可读校验
...
build / build (push) Failing after 15s
数据源统一改造第一块:drive +recent/+search-docs 列文档与表格,doc info / sheet list 真读一次
校验可读;表格按 contentType 分流,读不到返回 ErrUnavailable 而不是空列表。
2026-10-26 17:10:30 +08:00
hermes
1dda055e4c
fix(qa): 授权码加密不再绑定设置版本
...
build / build (push) Successful in 1m10s
AAD 只含租户,避免任何设置变更使已存密码失效;旧行在解密时按历史版本回退,无需重填授权码。
2026-10-26 16:11:17 +08:00
hermes
f87d3fad9b
fix(qa): 授权码按写入版本解密,改其它设置不再失效
...
build / build (push) Successful in 1m13s
只调整收件人或时间也会递增设置版本,导致已保存的授权码无法解密、测试发送报存储不可用。
新增 password_revision 记录加密时的版本,迁移回填现有行。
2026-10-26 16:09:00 +08:00
hermes
23b19350cc
feat(qa): 周报邮件新增测试/审核邮箱
...
build / build (push) Successful in 1m13s
测试发送只投递到该地址,不打扰主送与抄送名单;未填时退回主送首位。
2026-10-26 16:06:17 +08:00
hermes
1a9d1fff83
fix(qa): 看板附图上传改用大请求体解码
...
build / build (push) Successful in 1m13s
附图 base64 远超 64KiB 的质量编辑上限,被误判为无效设置并报“发送设置无效”。
改为 12MB 上限的通用解码,并返回明确的图片错误文案。
2026-10-26 16:03:52 +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
43b1e423fe
fix(qa): 规范化邮件调度测试并声明其外部依赖
...
build / build (push) Successful in 1m11s
gofmt 修正;该集成测试需要一次性库与测试密钥,按仓库约定在 test-scope.json 声明为可选未运行。
2026-10-26 10:01:14 +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
姚章浩
226d47a72d
fix(qa): 周报正文移除中英文质量统计口径说明
...
build / build (push) Successful in 1m13s
仅删除周报说明段及模板占位,保留自然月规则、指标数值和来源审计。
历史已保存周报不因模板变更自动改写,保留中英文各六节。
验证:移除说明断言先红后绿,自然月指标/来源及历史证据保留测试通过,完整门禁与原生备份恢复通过。
2026-10-25 17:15:35 +08:00
姚章浩
09b2c1dce5
fix(qa): 表头筛选并统一未覆盖正确性待确认
...
build / build (push) Successful in 1m17s
修正筛选入口位置:五项条件在表头就地选择,保持完整集筛选与无感续载。
统一固定规则:未覆盖一律待确认,原问答/人工模型证据不改写,已覆盖仍保留点踩优先。
验证:行为红绿、前端/Go全套及隔离PostgreSQL全mirror竞态通过;完整本地门禁与原生备份真实恢复通过。
2026-10-25 13:58:08 +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
姚章浩
99d6109bef
feat(qaops): 区域统计展示直属人员与多部门兼属
...
build / build (push) Successful in 1m12s
按稳定身份展示零使用人员、个人次数与最近提问时间,直接部门去重计算兼属数量;保留原分支统计、配置和源问答。
验证:396项前端测试及类型检查通过;隔离PG全mirror/org竞态回归通过,个人/别名/同名/零使用/未关联与原部门汇总回归通过。
正式同镜像及上线验证尚未执行。
2026-10-21 17:17:08 +08:00
姚章浩
cb9f0c389f
feat(qaops): 看板改用自然月质量指标并增加统计口径
...
build / build (push) Successful in 1m10s
去掉看板个人月明细;十一卡悬停和键盘可读的真实统计范围、公式与排除数。
自然月独立计算;跨月周取周一所在月,保留旧周证据和已存周报正文。
验证:make verify;一次性PG全镜像套件-race;真实恢复数据7个月与周报calc_metrics对拍。
真实浏览器十一卡逐项悬停、Tab/Escape、30秒刷新、跨月周、390px和完整PNG通过。
没有写DobotAI源问答、触发付费模型、外发或应用新迁移。
2026-10-21 08:48:55 +08:00
姚章浩
1580ebd826
feat(qaops): 增加第40至43周实时累计趋势及受控回填依据
...
build / build (push) Successful in 1m8s
按北京时间各自然周截止对整张统计总表累计计数,字段取当前有效结论。
覆盖和正确各按周报是除以是加否,保留历史上报与冻结并优先展示动态累计。
新增30秒顺序刷新、本地规则和历史复用非模型依据,保护当前原问答与人工字段。
验证:完整make verify通过;隔离PostgreSQL全量mirror race通过;
恢复库与真实周报calc_metrics四点对拍、源点踩自然刷新、桌面/390px及PNG通过。
新增源同步成员变化、人工版本保护及跨策略标签间距回归已通过。
模型全量语义风险审核及正式业务回填尚未完成,未部署本版本。
2026-10-20 11:09:47 +08:00
姚章浩
2c0bb32183
fix(qaops): 点踩问题统一判为不正确
...
build / build (push) Successful in 1m11s
通过持久来源关联读取最新本地反馈,强制总表有效正确性为否,保留原问答和人工证据。统一列表、详情、指标和两阶段读取的反馈快照,拒绝冲突选择并保留其他字段编辑。已通过完整本地门禁、隔离PG竞态和真实恢复库52条点踩逐条读回、桌面及手机验收;未调用模型或连接源生产库。
2026-10-20 08:18:03 +08:00
姚章浩
87f97a2f9b
feat(qaops): 完成详情下拉与每周自动保存草稿
...
build / build (push) Successful in 1m7s
详情使用共享主表字典,稀疏修改所选字段并保留原始问答及旧复核审计。
月周统计提供文本和下拉双入口;每租户每周一份持久草稿,按技能六节双语模板真实预填。
加入幂等自动保存、冲突保留、未知响应重试、切周及离开保护和schema58非破坏降级保护。
验证:完整make verify、隔离PostgreSQL全mirror竞态回归、真实恢复库浏览器验收通过。
浏览器实测字段精确读回、月周双输入、模板预填、MD/CSV、自动保存、冲突、失败重试与API重启恢复。
未连接或改写DobotAI生产源库,未运行付费模型;提交时尚未部署。
2026-10-20 05:44:02 +08:00
姚章浩
154b0b62ad
feat(qaops): 完成区域统计与部门绑定六项联动
...
build / build (push) Successful in 1m20s
新增北京时间自然周校验与缓存隔离,默认展开到业务二级部门。
选中部门在统计页就地绑定;区域名称列表原位增删改,双版本锁、自动预览、独立读回及删除确认。
筛选和两张区域看板使用同一已保存目录,删除失效筛选回全部。
验证:完整 make verify、全 mirror 隔离 PostgreSQL race、自然周边界与缓存键负例通过;真实恢复库327部门逐行对拍及六项浏览器验收通过。
schema57无迁移,不改真实公司区域绑定或原始问答,不连接DobotAI生产源库;PNG导出本轮不冒充已验证。
2026-10-19 23:41:01 +08:00
姚章浩
9470a127f7
feat(qaops): 完成流水表六项体验与AI执行修正
...
build / build (push) Successful in 1m11s
统一AI分析入口及双任务安全确认,采用全量载入的可见行渲染,保留完整原文。
右侧非模态详情固定五项质量字段,清理冗余展示并对齐查询和同步按钮。
默认4并发由数据库准入与逐任务租约保护,保留共享限流冷却、截断归因和有界重试。
兼容真实引用标题字段,不伪造证据或准确率,不修改源生产问答与公司区域规则。
验证:完整make verify退出0,710项Go通过、124项已声明可选跳过且必需0跳过;
另全量mirror隔离PostgreSQL race退出0,AI单元race退出0。
真实本地浏览器通过六项交互、390px内滚动及显式AI部分失败/零缺口故障夹具。
治理原生备份已真实恢复,schema57、72表计数与29张QA内容哈希一致。
候选镜像、精确提交CI与正式上线验收待本次提交后执行,不宣称已部署。
2026-10-19 22:09:32 +08:00
姚章浩
4a2b2b7d84
feat(qaops): 增加部门树区域统计与父子联选
...
build / build (push) Successful in 1m5s
区域配置入口改为区域统计,五列表按当前通讯录整支人员去重;调岗依当前归属、零分母未知、最近真实提问时间和父行收起不重算。仅读治理正式总表,后台单并发/请求合并/60秒缓存,目录与配置版本隔离,客户端失败不伪零。
保留区域自定义目录与预览/双版本锁保存,父部门勾选联选全后代,取消子支清除祖先整支选择,避免隐式覆盖未选子级;允许删除无引用区域,已有引用不静默孤立。统计页与设置共享选择,统计支持累计与北京时间自然月;不新增迁移,不改DobotAI生产、代理、原问答、历史趋势或已有AI任务。
验证已执行:完整make verify退出0,705 Go/340前端通过、120项声明的可选集成跳过且必需0跳过;镜像全量隔离PG race退出0;新增去重/调岗/空分母、后台缓存/并发、HTTP授权/严格请求、真PG目录与配置失效、树选择/收起、五列与删除保护均先红后绿。旧导航测试按新名称更新后全量通过。上线前治理库备份与真实恢复72表/29张QA内容哈希一致,匹配独立主密钥受限备份。
当前尚待精确SHA CI、同镜像真实数据浏览器与正式读回,不把源码验证称为已上线。公司真实区域映射不在本轮擅改;只在隔离库验证保存。
2026-10-19 19:01:36 +08:00
姚章浩
a9870beade
feat(qaops): 补充独立历史覆盖率与正确率趋势
...
build / build (push) Successful in 1m10s
用户提供的历史百分比独立持久化,按ISO自然周和截止范围读取,不伪造分子分母、记录数或冻结时间。现有两张趋势图与PNG共用来源分色/分段及两位小数;缺失周留空,关键词筛选不借用无明细历史,当前指标与原冻结证据不变。
验证:完整make verify退出0;镜像全量隔离PG race退出0,新增来源/精度/关键词/租户/截止/不可变和安全down回归先失败后通过。前端输入/来源及缺失周回归先红后绿。治理库上线前原生备份与真实恢复已完成,71表行数和28张QA表内容哈希一致,独立主密钥同时受限备份。
当前仅完成开发验证,真实数据候选浏览器验收、正式25周导入与应用上线需继续完成。不修改源生产数据库、原问答、已有模型自动开关或隧道;用户原始报表和图像只保存于私有证据目录,不入Git。
2026-10-19 17:55:15 +08:00
姚章浩
533db535f1
feat(qaops): 接入真实模型补缺任务与总表看板
...
build / build (push) Successful in 1m12s
按已确认需求提供独立安全模型配置、真实探测、正式字典字段评估与原问题译中,持久批次支持只补空白、暂停恢复、有限重试、幂等和逐字段依据。覆盖固定规则、本地语言、组织关联与主表有效看板共用治理侧读模型,保留源生产和冻结历史。
验证:完整 make verify 退出0,702项Go与329项前端通过;默认118项外部/隔离集成明确跳过,另跑完整镜像及组织隔离PG竞态。12并发、输入漂移、过期租约、暂停/恢复及有限重试通过。用户授权的百炼 deepseek-v4.1-flash 完成真实后台与浏览器评估/翻译;552行、16列、11块看板及完整PNG、独立配置页测试/保存、重开恢复和零JS异常通过。仅非业务样本外发,自动处理关闭,原payload不变。
上线前治理库已做导出快照原生备份并真实恢复,60表行数与17个QA表内容哈希一致;不修改DobotAI生产或隧道。本提交时尚未部署,线上验收须独立完成。
2026-10-19 14:29:49 +08:00
姚章浩
f5e0f8d20f
feat(qa-ops): 建立独立正式主表并保真导入历史问答
...
build / build (push) Successful in 1m7s
将可维护总表与可替换2.0镜像分离,稳定来源关联和原始事件键保留;
源端更新/删除不覆盖主表或人工复核。首次收录保留原评估审计,
主表输入/复核独立持久化;历史原标注不冒充新AI或冻结证据。
历史导入绑定源哈希、逐行批准清单与真实恢复备份;三字段精确去重,
批次及原字段留档,重复执行不覆盖后续修改。仅操作本地治理库。
验证:完整make verify退出0;镜像与区域两组隔离PG race退出0;
真实恢复数据隔离导入12522、跳过792、暂缓1,总表15050;
重放保留模拟修改,结构down拒绝丢历史;真实浏览器第41周551条完整,
历史原标注和独立主表复核读回通过,移动布局及JS异常0。
2026-10-19 08:49:18 +08:00
姚章浩
6e67034fbd
feat(qa-ops): 交付十一项统计看板与完整图片导出
...
build / build (push) Successful in 1m10s
以治理库单一只读事务分开聚合累计、自然周、截止月及当前通讯录使用分母;浏览器不再读取全量长答案来构建看板。
新增迁移52与普通worker周质量冻结,保留真实冻结时点、规则和标量贡献;缺少当时快照留空。提交后冻结头与贡献不可修改、删除或追加;只读接口保留管理员、固定租户、严格JSON与输入冲突保护。
已验证:make verify退出0,686个Go用例和305个前端用例通过,必需跳过0;镜像与组织隔离PostgreSQL竞态回归退出0。真实治理副本浏览器核对第41周累计1885与新增471、十一项和完整PNG下载,390px无外溢、JS异常0;明确模拟503后不伪零且重试恢复。没有修改DobotAI原始问答、真实区域规则或生产发布门禁。
2026-10-18 23:26:55 +08:00
姚章浩
76671e0784
feat(qa-ops): 支持自定义区域与分级部门批量归属
build / build (push) Successful in 1m8s
2026-10-18 21:50:29 +08:00
姚章浩
3e7fcce0b1
feat(qa-ops): 持久本地问答副本与安全答案预览
...
build / build (push) Successful in 1m11s
新增迁移50与每5分钟/手动持久同步,API只读本地;同步失败保留、权限阻断、租约与质量失效原子激活。
保留全量稳定分页/固定列,已存质量批量读取,元数据不反复解压长答案;详情安全Markdown与原文。
已运行整仓 make verify、源与副本隔离PG -race、真实只读源及隔离浏览器。
实际同步2525条;固定窗口640条本地中位1.46秒,对照直接源33.10秒。
停worker、缺源凭据、重启API后仍可查询;未更新8088,未修改生产原问答。
2026-10-18 19:10:47 +08:00
姚章浩
74ba737b1e
fix(version): 按完整提交区分同号历史开发说明
...
build / build (push) Successful in 1m4s
历史分支中存在两条开发号 0.1.1;归档选择按 SHA 匹配,保留原编号与冲突标签。
增加同号前置说明遮蔽及错 SHA 不复用回归,标签计划使用相同精确选择方式。
已运行:定向 Go 测试、快照工具临时仓正反例及整仓 make verify;未部署。
2026-10-18 18:18:43 +08:00
姚章浩
013ce4a24e
fix(version): 补全开发快照记录与同步交付闭环
...
build / build (push) Successful in 1m3s
收录 main、注释开发快照和完整运行 SHA;开发说明绑定原提交,补记 0.1.1–0.1.25。
进行中同步按仓库合并,完成后重新执行;启动入队,部署脚本读回版本证据。
开发快照独立于正式标签与 Release,既有冲突标签不移动。
已运行:整仓 make verify,Go 673 通过、前端 274 通过,92 个已声明可选跳过,必需跳过 0。
隔离 PostgreSQL 重复同步队列用例及 -race 通过;未更新现有 8088、未修改生产问答。
2026-10-18 18:11:49 +08:00
姚章浩
2ea2111420
fix(web): 保留代理端口以修复同源质量查询误拒绝
...
build / build (push) Successful in 1m1s
Nginx 使用原始 Host 和端口转发,不修改后端跨站防护。补充无 Fetch Metadata 的 LAN/Tailscale 同源和异源、异端口、转发头伪造回归。
验证:配置回归先因丢失端口失败后通过;HTTP竞态、真实隔离Nginx正反例及完整make verify均通过。部署前真实入口无Metadata为403,同源Metadata对照可过;源库及人工复核无写入。
2026-10-18 15:45:09 +08:00
姚章浩
828c2c5fa0
feat(qa-ops): 按确认口径补齐质量比例与分母明细
...
build / build (push) Successful in 1m6s
使用完整筛选范围的当前有效结论计算覆盖率和正确率,人工优先,失效与对应待确认/未评估/不计入排除;零分母返回null,界面展示原始分子分母和排除构成,前端拒绝不守恒或比例不一致的响应。
验证:make verify退出码0,Go658及前端257通过,91项声明可选集成跳过;隔离PG、三包竞态及合成/真实只读源浏览器验证通过。无新增迁移,不接AI模型,不改绩效,不写源库;本批未推送或部署,8088运行版保持0.1.21。
2026-10-18 02:00:31 +08:00
姚章浩
4b3aaff321
feat(qa-ops): 完成复检留档与人工复核闭环
...
治理侧保存输入观测版本、自动复检及人工复核历史,输入变化失效、版本冲突和幂等重放不覆盖人工记录。批量质量数量使用完整筛选元数据,未采集原文不伪造快照,延迟旧扫描不回退新输入。
验证:全仓 make verify 退出码0,Go656及前端253通过;五包竞态、源/组织/质量隔离PG、真实只读源和隔离网页读回复核通过。默认91个可选集成跳过不计通过。未接AI模型,不写DobotAI源库,未推送、未合并、未部署。
2026-10-17 22:37:26 +08:00
姚章浩
9556db1ef0
feat(qaops): 增加个人自然月用量与零记录人员明细
2026-10-17 19:59:33 +08:00
姚章浩
56b8cabed9
feat(qaops): 接入问答组织补全与区域使用统计
2026-10-17 19:02:13 +08:00
姚章浩
cc4906b6a9
feat(qaops): 接通网页通讯录持久化同步与后台接管
2026-10-17 17:36:07 +08:00
姚章浩
5874134e04
feat(qaops): 接入真实通讯录采集并补全根部门
2026-10-17 16:11:29 +08:00
姚章浩
dab74b706b
feat(qaops): 增加版本化部门区域归属配置与预览
2026-10-17 11:39:38 +08:00
姚章浩
fd04bf7886
feat(qaops): 接入独立只读问答查询与治理覆盖复检
2026-10-17 09:04:19 +08:00
姚章浩
9a8a3e7795
fix(dingtalk): 登记钉钉知识库 409 space_registration_conflict —— 归档行占名 + 错误被吞
...
build / build (push) Successful in 57s
现象:点「公司级技术支持知识库」登记,返回 HTTP 409:space_registration_conflict。
根因(真数据取证):
- source_connections.name 有唯一约束。这 3 个钉钉来源是**早期路径**登记的
(base_url 为空,id 与 dws 现在推导的确定性 id 不同):
sc-18d10ca0… 公司级技术支持知识库 / sc-eaef0ec1… ATOM知识库 / sc-dc7cea1c… 技术诊断部知识沉淀。
- 上一步「去掉来源」只是归档下架,**名字仍占着唯一槽位** ⇒ 重新登记时 INSERT 撞
UNIQUE(name)。
- 处理器把**所有**存储层错误都翻译成同一个 409 space_registration_conflict(真实原因被吞)。
修复:
- store:同名的另一行若**已归档** ⇒ 改名腾位(`…(已下架 · <短ID>)`,归档行不显示,
数据与审计一行不动);若**仍在使用** ⇒ ErrDingtalkSpaceNameTaken(绝不悄悄改名)。
同一个登记键解析到别的 root 时:在用中的行报 ErrDingtalkSpaceIdentityConflict;
归档过的行允许就地改写("去掉后再用 dws 重新获取"的语义)。
- httpapi:分类映射 —— space_name_conflict / space_identity_conflict(409 + 可行动 hint),
其余内部故障改回 500 space_registration_failed,不再伪装成冲突。
- web:读一次响应体同时取 error 与 hint,**hint 优先**;补两个新码的中文说明。
验证:真 postgres 集成测试复刻线上形态(旧行占名 + 归档 ⇒ 登记成功、旧行改名保持归档、
内容不丢;同名在用 ⇒ 拒绝;同键换 root 在用 ⇒ 拒绝、归档 ⇒ 就地改写);handler 分类测试
(409/409/500,且不回显内部细节);前端 hint 优先用例;make verify 15/15。
2026-10-14 12:59:52 +08:00
姚章浩
2c7265efc4
feat(sources): 数据源配置收敛成 dws 导入 + PP 导入;「去掉来源」= 归档下架(不删数据)
...
build / build (push) Successful in 58s
主人要求:去掉入口,统一成 dws 导入与 PP 导入;其他来源连数据一起下架,之后用 dws 重新获取。
界面(web):
- 「数据源配置」只剩两块:**dws 导入(钉钉)**(按当前钉钉账号列出可访问的知识库与钉盘空间)
与 **PP 导入**(PP 资料下载中心)。上一步加的「显示 AList/钉钉知识库来源」折叠开关删除。
- 来源卡片新增管理员可见的「去掉来源」(带确认弹窗,说明是归档下架、数据保留可恢复)。
- 侧栏文案改成"只留两个入口";发现面板标题改为「dws 导入(钉钉)」。
后端(归档语义,可逆):
- 迁移 000047:source_connections 增 archived_at / archived_by + 只覆盖未归档行的部分索引。
- store:ArchiveSourceConnection / RestoreSourceConnection(幂等;归档同时停用并清空
next_refresh_at,避免被手工改回后立刻带着旧调度跑)。列表、目录、计划刷新(claimDue)、
手动扫描(triggerBlock/inspect)四类查询一律排除归档行。
- 注册路径(dws 重新获取):RegisterDingtalkSpace 的 ON CONFLICT 清掉归档标记 ——
重新登记同一个空间**原地复活同一行**,不产生重复,历史快照仍属于同一行。
- HTTP:POST /api/v1/source-connections/{id}/archive|restore(管理员专属,写意图头
source-archive / source-restore + Idempotency-Key;404 区分"不存在"与"已是目标状态");
openapi 同步两条契约。
验证:
- 集成测试(真 postgres):归档从列表消失但 source_items 一行不少、重复归档不漂移归档时间与人、
未知 ID 报 ErrSourceConnectionNotFound、归档来源不能再被扫描、恢复后回到列表但保持停用;
dws 重新登记同一空间复活同一行。
- httpapi:写意图/幂等键门禁、200/403/404/500、错误体不回显内部细节、classifyRole 管理员专属。
- 迁移护栏:000047 结构 + 四类 SQL 必须含 archived_at is null(漏一条就是入口没去掉)。
- make verify 15/15。
2026-10-14 12:36:32 +08:00
姚章浩
b7f7e4f121
fix(deploy): 上线前校验 .env 键值形状(两行粘成一行的坏值不再能上线)
...
build / build (push) Successful in 1m1s
事故复盘(2026-10-14,测试实例 p1 整体不可用约 6 分钟):
- 我用 `rstrip("\n") + 新行` 往 `.env` 追加 `VERSION_HISTORY_LINK_ORIGIN`,而 `.env` 最后一行
当时没有结尾换行 ⇒ 两行**粘成一行**:
`VERSION_HISTORY_GITEA_BASE_URL=http://192.168.50.223:3000VERSION_HISTORY_LINK_ORIGIN=https://gitea.zheromiku.top `
- 配置校验按设计拒绝这个非法 origin ⇒ `cmd/api`/`cmd/worker` 启动即退出 ⇒ 容器 crash-loop
(fail-closed 是对的,但代价是平台起不来)。
修复:
- `scripts/deploy-api-web.sh` 新增 **1a 步护栏**:上线前解析 `.env`,只要某行的值里又出现 `KEY=`
(两行粘连)或键名不合法 ⇒ 打印 `ENV_VALUE_LOOKS_MERGED` 并**拒绝部署**(不动线上);
- `internal/appconfig` 在校验失败时补线索:值里含 `=` ⇒ 提示"`.env` 里两行可能粘成了一行";
- 回归用例 `TestLoadRejectsMergedVersionHistoryEnvValue`(粘行必拒 + 线索文案 + 合法值仍放行)。
验证:护栏对"粘行样例/键名非法"退出码 1、对"正常样例/当前真实 .env"退出码 0;Go 用例通过;
make verify 15/15。线上已修 `.env` 并重启 api+worker(healthy),重新同步后页面链接已全部走公网 origin。
2026-10-14 11:17:35 +08:00
姚章浩
4cb5110845
fix(version-history): 页面链接改走公网 origin(抓取仍走内网)+ tag 补链接
...
build / build (push) Successful in 1m1s
现象(主人反馈):点「查看提交」打开是空白页。原因:链接用的是**抓取用的内网地址**
(`http://192.168.50.223:3000/ ...`),内网外的浏览器到不了;而公网地址
`https://gitea.zheromiku.top/ ...` 实测 200。另外 tag 证据里**根本没有 url**,
页面渲染出空 `href`,点下去像"没反应"。
修复:
- 新增 `VERSION_HISTORY_LINK_ORIGIN`(页面链接 origin,公网;留空 = 与抓取 origin 相同):
抓取仍匿名走内网白名单地址,**给人点的链接**用公网 origin 拼 —— 两者本就不该共用一个地址;
校验必须是干净的 http(s) 绝对地址。
- tag 证据补 `url`(`<link origin>/<repo>/src/tag/<name>`),并在前端**没有链接就不渲染**该按钮。
- 测试:客户端(LinkOrigin 生效 / 未配时退回 / 非法拒绝)、规则(tag 链接写入证据 / 无基址不编链接)、
前端(有链接才渲染「查看 tag」)。
验证:make verify 15/15;真实链路重同步后库里 commit_url = `https://gitea.zheromiku.top/ ...`(200)、
release_tags 带 url。
2026-10-14 11:06:13 +08:00