Repository navigation
滨湖客户端 0.30.25
滨湖桌面客户端 v0.30.25 更新日志
本次版本由提交 b796eaab4b6c 生成。
更新范围:v0.30.24 → v0.30.25。
更新内容
1. 其他更新
- #818 fix(staging): allow reported true orphan links:[x] registry.py 将真孤儿链接限制在三条,超过后错误退出,导致只读 measure 被 orphan_exclusion_scope_exceeded 阻断。 [x] 报告没有明确区分真孤儿和未来可能出现的假孤儿。 [x] 控制台策略和运行文档仍把三条上限写成当前合同。
- #819 fix(staging): ignore stale model-three sources in sample recovery:[x] 问题 1:历史模型三来源残留导致采样恢复生成业务表不存在的来源记录。 [x] 问题 2:measure 在业务来源键核对阶段失败,无法继续 Staging 快照。 [x] 问题 3:缺少对“无活跃业务记录历史来源”的回归覆盖。
- #820 fix(staging): exclude invalid sampled rows:[x] 问题 1:Staging 复制数据中的无效业务日期阻塞 measure。 [x] 问题 2:单条异常数据导致整个 Staging 脱敏快照失败。 [x] 问题 3:缺少排除数量与原因分类报告。
- #821 fix(staging): filter relations after sampled-row exclusion:[x] 问题 1:异常来源排除后关联记录仍按旧来源集合处理。 [x] 问题 2:导致
snapshot_source_operation_failed,阻塞 Staging measure。 [x] 问题 3:保持异常数据排除的聚合报告和 50% 样本有效性门禁。 - #822 fix(staging): accept safe existing table identifiers:Staging 当前 schema 中存在合法的 MySQL 标识符形式,但网关只接受传统下划线表名,导致 create 在实际建库前失败。
- #823 fix(staging): accept quoted legacy table names:PR #822 放宽下划线限制后,实际 create 仍被 invalid_target_table 拒绝,说明现有 Staging schema 使用了连接符或非 ASCII 表名。
- #825 fix(staging): handle dotted legacy table identifiers:候选 create 在安全表名校验阶段返回 invalid_target_table;逻辑域分隔使用 split 会把合法点号表名拆成多段。
- #827 fix(staging): preserve dotted legacy table names:候选 create 在安全表名校验阶段返回 invalid_target_table;逻辑域分隔使用 split 会把合法点号表名拆成多段。
- #828 fix(staging): record schema table diffs:[x] 问题 1:schema 表集合不一致时缺少缺表/多表诊断。 [x] 问题 2:schema 签名不一致时缺少域和表名诊断。 [x] 问题 3:记录 Staging 未随 Production 发布自动同步的原因和预防门禁。
- #829 feat(deploy): add Dev application acceptance gateway:[x] 问题 1:Staging application gateway 缺少可验证的 Dev application acceptance record。 [x] 问题 2:Dev event-pipeline 接受记录与 Dev application acceptance 职责混用。 [x] 问题 3:Dev 应用缺少固定 prepare/measure/apply/accept 入口和安装审计。
- #830 fix(deploy): bind Dev application gateway to fixed host:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- #831 fix(deploy): install Dev application gateway dependencies:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- #832 fix(deploy): normalize Dev gateway state permissions:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- #833 fix(deploy): extract Dev application artifacts safely:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- #834 fix(deploy): bind Dev artifact in prepare run:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- #835 Fix Dev application gateway measure dependency:[x] Dev 网关安装包缺少
measure的运行时依赖。 [x] PR #829 的审查只覆盖固定命令和静态模块,没有覆盖prepare完整路径及动态导入闭包。 - #836 fix(deploy): preserve Dev operation failure diagnostics:[x] 问题 1:Dev measure/apply/accept failures lacked a stable private reason code. [x] 问题 2:Failure evidence was not written for non-prepare operations. [ ] 问题 3:The existing Dev runtime configuration/image drift remains a separate environment repair task and is intentionally not bypassed here.
- #837 fix(deploy): add controlled Dev manifest reconciliation:[x] 问题 1:提供受控的 Dev manifest drift reconciliation。 [x] 问题 2:保持 measure/apply/accept 的 fail-closed 身份门禁。 [x] 问题 3:避免删除或重建 Dev 数据库、Redis、网络和卷。
- #838 fix(deploy): authorize Dev reconcile action:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - #839 fix(deploy): repair missing Dev disabled flag:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - #840 fix(deploy): persist Dev promotion state atomically:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - #841 fix(deploy): update Dev acceptance report atomically:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - #842 fix(staging): add controlled application reconciliation:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #843 fix(staging): normalize qualified image digest during reconcile:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #844 fix(staging): reconcile legacy database manifest keys:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #845 fix(staging): preserve reconcile preflight diagnostics:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #846 fix(staging): capture reconcile preflight failures:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #847 fix(staging): store reconcile diagnostics with candidate:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #848 fix(staging): persist reconciled environment flags:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #849 fix(staging): compare qualified image references by digest:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - #850 fix(staging): write reconciled flags with real newlines:[x] 问题 1:Staging reconcile 使用字面量
\\n,导致禁用开关未形成独立配置行。 [x] 问题 2:修复后 measure 仍会因外部开关缺失而失败。 [x] 问题 3:补充 Dev/Staging 共用路径的回归覆盖。 - #851 fix(staging): preserve reconcile evidence on retry:[x] 问题 1:旧
staging-reconcile-*目录存在时重试无法进行。 [x] 问题 2:重试需要保留原失败证据,不能覆盖。 [x] 问题 3:补充唯一证据路径回归测试。 - #852 fix(staging): normalize qualified manifest image digests:[x] 问题 1:qualified Compose 镜像已规范化,但 qualified manifest 镜像未规范化。 [x] 问题 2:合法的同一 digest 被误判为环境漂移。 [x] 问题 3:补充 Compose 与 manifest 双方 qualified digest 回归测试。
- #853 修补离线居住证批量查询逐行结果与失败定位:[x] 问题 1:批量查询只显示失败分类数量,用户无法定位具体身份证号和原表行。 [x] 问题 2:身份证无效、认证/网络/响应结构错误等情况缺少逐行处理建议。 [x] 问题 3:常住人口预检索返回非空资料时被统一归类为
resident_response_contract_changed,与明确的接口故障混淆。 - #854 fix(staging): normalize split-domain snapshot schema contract:[x] 修复
production_staging_schema_table_mismatch的真实根因 [x] 保持失败证据独立,不覆盖旧候选目录 [x] 增加合同归一化、冲突拒绝和候选验证测试 - #855 fix(staging): cover all routed legacy tables:[x] 修复
production_staging_schema_table_mismatch的真实根因 [x] 保持失败证据独立,不覆盖旧候选目录 [x] 增加合同归一化、冲突拒绝和候选验证测试 - #856 fix(staging): prefer owning domain schema signatures:[x] 修复
production_staging_schema_table_mismatch的真实根因 [x] 保持失败证据独立,不覆盖旧候选目录 [x] 增加合同归一化、冲突拒绝和候选验证测试 - #857 Fix embedded Staging snapshot schema filter:[x] 修复隔离候选程序缺失
runtime_tables的运行时错误。 [x] 防止只检查生成代码字符串而遗漏未定义名称。 - #858 Fix embedded Staging schema map reference:[x] 将嵌入程序中的域映射引用统一为已注入的
split_domain_schema_tables。 [x] 增加生成代码 AST 检查,防止再次生成未定义的大写名称。 - #859 fix: prevent venue registration burst throttling:[x] 问题 1:同一出口 IP 的场所登记页面、取令牌和提交请求被旧的 30 次/分钟边缘限流挡成 503。 [x] 问题 2:云端接收器单场所每分钟 60 次的应用限流低于集中登记需求。 [x] 问题 3:登记页把 Nginx 非 JSON 错误正文当 JSON 解析,用户只能看到技术错误或无法判断提交状态。
- #860 feat(staging): add controlled schema migration gate:[x] Staging application
apply只切换应用、不执行数据库 schema migration。 [x] 最新快照staging-9d10b74f1136e464在OnlineData._online_source_projection发现真实 schema drift 后缺少受控修复入口。 [x] 迁移步骤没有固定 workflow、身份校验和可审计前后签名。 - #861 fix(staging): report schema signature differences:[x] schema 签名不一致时,证据缺少可执行的列、索引和约束差异。 [x] 失败证据不包含结构签名摘要,难以判断后续修复是否改变目标 schema。
- #862 fix: keep venue nginx rate limits deployable:[x] 问题 1:首次候选部署因未定义 Nginx zone 未通过
nginx -t,固定网关已回滚候选镜像。 [x] 问题 2:同一出口的场所登记页面/令牌/提交请求需要绕开全局 30 次/分钟边缘桶,仍保留应用侧限流。 [x] 问题 3:确保其它公共入口继续使用原边缘限流,避免扩大本次流量策略范围。 - #863 fix(staging): import hashlib in isolated schema diagnostics:[x] 修复隔离候选 job 在生成 schema SHA-256 摘要时缺少
hashlib的缺陷。 [x] 测试验证生成代码能给出缺失/多余列和双方 SHA-256,不再因未定义名称退化为通用错误。 [x] 不改变 schema 门禁或候选数据库操作范围。 - #864 fix: resolve venue nginx rate zone validation:[x] 问题 1:修复 Nginx 未定义限流 zone 导致的
nginx -t失败。 [x] 问题 2:同一出口 IP 的场所页面和公共登记 API 不再被 30 次/分钟边缘限流挡住。 [x] 问题 3:饮酒报备页和表单令牌 API 保留已定义的 IP 限流。 - #865 fix: prevent venue registration fake success:[x] 问题 1:并发提交可能收到 HTTP 200、JSON 字符串和 multipart 请求体回显,客户端误显示提交成功。 [x] 问题 2:TCP 入口代理在一侧流结束时取消另一侧,可能截断或串扰响应。 [x] 问题 3:成功响应契约和前端不确定结果处理缺少测试与 OpenAPI 明确约束。
- #866 chore: prepare 0.30.25 release:统一根目录、前端、桌面端、Android/Tauri 和安装器版本号。 使客户端发布工作流能够识别并构建
0.30.25制品。
技术追溯
- [#818] fix(staging): allow reported true orphan links:[x] registry.py 将真孤儿链接限制在三条,超过后错误退出,导致只读 measure 被 orphan_exclusion_scope_exceeded 阻断。 [x] 报告没有明确区分真孤儿和未来可能出现的假孤儿。 [x] 控制台策略和运行文档仍把三条上限写成当前合同。
- [#819] fix(staging): ignore stale model-three sources in sample recovery:[x] 问题 1:历史模型三来源残留导致采样恢复生成业务表不存在的来源记录。 [x] 问题 2:measure 在业务来源键核对阶段失败,无法继续 Staging 快照。 [x] 问题 3:缺少对“无活跃业务记录历史来源”的回归覆盖。
- [#820] fix(staging): exclude invalid sampled rows:[x] 问题 1:Staging 复制数据中的无效业务日期阻塞 measure。 [x] 问题 2:单条异常数据导致整个 Staging 脱敏快照失败。 [x] 问题 3:缺少排除数量与原因分类报告。
- [#821] fix(staging): filter relations after sampled-row exclusion:[x] 问题 1:异常来源排除后关联记录仍按旧来源集合处理。 [x] 问题 2:导致
snapshot_source_operation_failed,阻塞 Staging measure。 [x] 问题 3:保持异常数据排除的聚合报告和 50% 样本有效性门禁。 - [#822] fix(staging): accept safe existing table identifiers:Staging 当前 schema 中存在合法的 MySQL 标识符形式,但网关只接受传统下划线表名,导致 create 在实际建库前失败。
- [#823] fix(staging): accept quoted legacy table names:PR #822 放宽下划线限制后,实际 create 仍被 invalid_target_table 拒绝,说明现有 Staging schema 使用了连接符或非 ASCII 表名。
- [#825] fix(staging): handle dotted legacy table identifiers:候选 create 在安全表名校验阶段返回 invalid_target_table;逻辑域分隔使用 split 会把合法点号表名拆成多段。
- [#827] fix(staging): preserve dotted legacy table names:候选 create 在安全表名校验阶段返回 invalid_target_table;逻辑域分隔使用 split 会把合法点号表名拆成多段。
- [#828] fix(staging): record schema table diffs:[x] 问题 1:schema 表集合不一致时缺少缺表/多表诊断。 [x] 问题 2:schema 签名不一致时缺少域和表名诊断。 [x] 问题 3:记录 Staging 未随 Production 发布自动同步的原因和预防门禁。
- [#829] feat(deploy): add Dev application acceptance gateway:[x] 问题 1:Staging application gateway 缺少可验证的 Dev application acceptance record。 [x] 问题 2:Dev event-pipeline 接受记录与 Dev application acceptance 职责混用。 [x] 问题 3:Dev 应用缺少固定 prepare/measure/apply/accept 入口和安装审计。
- [#830] fix(deploy): bind Dev application gateway to fixed host:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- [#831] fix(deploy): install Dev application gateway dependencies:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- [#832] fix(deploy): normalize Dev gateway state permissions:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- [#833] fix(deploy): extract Dev application artifacts safely:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- [#834] fix(deploy): bind Dev artifact in prepare run:[x] 问题 1:原 workflow 引用未配置的独立 host/port/known_hosts secrets,无法安装或运行 Dev application gateway。 [x] 问题 2:Dev application 的 SSH 目标边界需要与现有固定 Dev 服务器一致,同时保持应用网关凭据和 event-pipeline 凭据隔离。 [x] 问题 3:部署文档需要明确共享固定服务器边界与独立应用账号的关系。
- [#835] Fix Dev application gateway measure dependency:[x] Dev 网关安装包缺少
measure的运行时依赖。 [x] PR #829 的审查只覆盖固定命令和静态模块,没有覆盖prepare完整路径及动态导入闭包。 - [#836] fix(deploy): preserve Dev operation failure diagnostics:[x] 问题 1:Dev measure/apply/accept failures lacked a stable private reason code. [x] 问题 2:Failure evidence was not written for non-prepare operations. [ ] 问题 3:The existing Dev runtime configuration/image drift remains a separate environment repair task and is intentionally not bypassed here.
- [#837] fix(deploy): add controlled Dev manifest reconciliation:[x] 问题 1:提供受控的 Dev manifest drift reconciliation。 [x] 问题 2:保持 measure/apply/accept 的 fail-closed 身份门禁。 [x] 问题 3:避免删除或重建 Dev 数据库、Redis、网络和卷。
- [#838] fix(deploy): authorize Dev reconcile action:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - [#839] fix(deploy): repair missing Dev disabled flag:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - [#840] fix(deploy): persist Dev promotion state atomically:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - [#841] fix(deploy): update Dev acceptance report atomically:[x] 新增 Dev
reconcile *动作的最小权限授权。 [x] 防止固定入口动作与安装脚本 sudoers 白名单再次漂移。 [x] 保留既有失败证据,不覆盖历史运行目录。 - [#842] fix(staging): add controlled application reconciliation:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#843] fix(staging): normalize qualified image digest during reconcile:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#844] fix(staging): reconcile legacy database manifest keys:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#845] fix(staging): preserve reconcile preflight diagnostics:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#846] fix(staging): capture reconcile preflight failures:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#847] fix(staging): store reconcile diagnostics with candidate:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#848] fix(staging): persist reconciled environment flags:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#849] fix(staging): compare qualified image references by digest:Staging
manifest.json的 Backend image 元数据与实际 Compose 不一致,导致measure以environment_image_drift拒绝。旧网关只返回笼统失败,且没有受控对账入口。 - [#850] fix(staging): write reconciled flags with real newlines:[x] 问题 1:Staging reconcile 使用字面量
\\n,导致禁用开关未形成独立配置行。 [x] 问题 2:修复后 measure 仍会因外部开关缺失而失败。 [x] 问题 3:补充 Dev/Staging 共用路径的回归覆盖。 - [#851] fix(staging): preserve reconcile evidence on retry:[x] 问题 1:旧
staging-reconcile-*目录存在时重试无法进行。 [x] 问题 2:重试需要保留原失败证据,不能覆盖。 [x] 问题 3:补充唯一证据路径回归测试。 - [#852] fix(staging): normalize qualified manifest image digests:[x] 问题 1:qualified Compose 镜像已规范化,但 qualified manifest 镜像未规范化。 [x] 问题 2:合法的同一 digest 被误判为环境漂移。 [x] 问题 3:补充 Compose 与 manifest 双方 qualified digest 回归测试。
- [#853] 修补离线居住证批量查询逐行结果与失败定位:[x] 问题 1:批量查询只显示失败分类数量,用户无法定位具体身份证号和原表行。 [x] 问题 2:身份证无效、认证/网络/响应结构错误等情况缺少逐行处理建议。 [x] 问题 3:常住人口预检索返回非空资料时被统一归类为
resident_response_contract_changed,与明确的接口故障混淆。 - [#854] fix(staging): normalize split-domain snapshot schema contract:[x] 修复
production_staging_schema_table_mismatch的真实根因 [x] 保持失败证据独立,不覆盖旧候选目录 [x] 增加合同归一化、冲突拒绝和候选验证测试 - [#855] fix(staging): cover all routed legacy tables:[x] 修复
production_staging_schema_table_mismatch的真实根因 [x] 保持失败证据独立,不覆盖旧候选目录 [x] 增加合同归一化、冲突拒绝和候选验证测试 - [#856] fix(staging): prefer owning domain schema signatures:[x] 修复
production_staging_schema_table_mismatch的真实根因 [x] 保持失败证据独立,不覆盖旧候选目录 [x] 增加合同归一化、冲突拒绝和候选验证测试 - [#857] Fix embedded Staging snapshot schema filter:[x] 修复隔离候选程序缺失
runtime_tables的运行时错误。 [x] 防止只检查生成代码字符串而遗漏未定义名称。 - [#858] Fix embedded Staging schema map reference:[x] 将嵌入程序中的域映射引用统一为已注入的
split_domain_schema_tables。 [x] 增加生成代码 AST 检查,防止再次生成未定义的大写名称。 - [#859] fix: prevent venue registration burst throttling:[x] 问题 1:同一出口 IP 的场所登记页面、取令牌和提交请求被旧的 30 次/分钟边缘限流挡成 503。 [x] 问题 2:云端接收器单场所每分钟 60 次的应用限流低于集中登记需求。 [x] 问题 3:登记页把 Nginx 非 JSON 错误正文当 JSON 解析,用户只能看到技术错误或无法判断提交状态。
- [#860] feat(staging): add controlled schema migration gate:[x] Staging application
apply只切换应用、不执行数据库 schema migration。 [x] 最新快照staging-9d10b74f1136e464在OnlineData._online_source_projection发现真实 schema drift 后缺少受控修复入口。 [x] 迁移步骤没有固定 workflow、身份校验和可审计前后签名。 - [#861] fix(staging): report schema signature differences:[x] schema 签名不一致时,证据缺少可执行的列、索引和约束差异。 [x] 失败证据不包含结构签名摘要,难以判断后续修复是否改变目标 schema。
- [#862] fix: keep venue nginx rate limits deployable:[x] 问题 1:首次候选部署因未定义 Nginx zone 未通过
nginx -t,固定网关已回滚候选镜像。 [x] 问题 2:同一出口的场所登记页面/令牌/提交请求需要绕开全局 30 次/分钟边缘桶,仍保留应用侧限流。 [x] 问题 3:确保其它公共入口继续使用原边缘限流,避免扩大本次流量策略范围。 - [#863] fix(staging): import hashlib in isolated schema diagnostics:[x] 修复隔离候选 job 在生成 schema SHA-256 摘要时缺少
hashlib的缺陷。 [x] 测试验证生成代码能给出缺失/多余列和双方 SHA-256,不再因未定义名称退化为通用错误。 [x] 不改变 schema 门禁或候选数据库操作范围。 - [#864] fix: resolve venue nginx rate zone validation:[x] 问题 1:修复 Nginx 未定义限流 zone 导致的
nginx -t失败。 [x] 问题 2:同一出口 IP 的场所页面和公共登记 API 不再被 30 次/分钟边缘限流挡住。 [x] 问题 3:饮酒报备页和表单令牌 API 保留已定义的 IP 限流。 - [#865] fix: prevent venue registration fake success:[x] 问题 1:并发提交可能收到 HTTP 200、JSON 字符串和 multipart 请求体回显,客户端误显示提交成功。 [x] 问题 2:TCP 入口代理在一侧流结束时取消另一侧,可能截断或串扰响应。 [x] 问题 3:成功响应契约和前端不确定结果处理缺少测试与 OpenAPI 明确约束。
- [#866] chore: prepare 0.30.25 release:统一根目录、前端、桌面端、Android/Tauri 和安装器版本号。 使客户端发布工作流能够识别并构建
0.30.25制品。
更新说明
桌面客户端优先使用更新服务器提供的增量包;增量包不可用时自动回退到全量包。