Skip to content

corps 0.8.0

Choose a tag to compare

@Levango7 Levango7 released this 21 Oct 03:46
· 387 commits to main since this release
5f5972a

corps 0.8.0 —— Web/Server 版本

桌面与移动壳不随本版发布,其域名/版本问题见 docs/design/PRODUCT-DESIGN-2026Q4.md P0。

本版本收口

依赖大版本换代(ADR-014)

  • Prisma 7.10.0 + @prisma/adapter-pg:Rust 引擎退役;连接池参数显式化为 connection_limit=10 / pool_timeout=10,withDbRetry 增加 30s 总预算兜底
  • Next.js 16.4、TypeScript 6

租户安全

  • 写权限收敛到 getWorkspaceContext() + lib/write-policy.ts 的单一 choke point(default-deny)。门禁实测 280 个写 handler 中 252 个进墙,其余 28 个逐条登记 reason 与复核截止日,由 check_write_access_registry.py 断言"要么进墙要么登记"
  • db/rls-activate.sql 实测 81 张表 ENABLE + FORCE + 策略
  • db/schema.sql 快照追平 73 张表缺口

协同层

  • 按 ADR-017 摘除 server/collab/ 与 3 个零挂载组件
  • ADR-016 版本回滚契约落地

国际化

  • 新增「硬编码用户可见中文」门禁(P0-6)
  • 清偿 UI 50 处 + 事务邮件 73 处
  • 事务邮件按收件人语言渲染

可访问性

  • 存量偿还 7 批,当前基线 233 条,门禁只允许收缩

其他

  • 移除不属于本项目的 corps.com 占位域名:桌面/移动壳改 fail-loud + REPLACE_ME.invalid 哨兵值,Tauri updater 改构建期注入
  • 顺带清除 tauri.conf.json 里的 plugins.updater.active——它是死键(Tauri v2 已删除该配置),留着只会让人误以为"更新已关闭"

从 v0.7.2 升级:必须读这一段

本版本连带 4 条数据库迁移,Prisma 会在部署时自动执行:

迁移 性质
20261001000000_relax_account_issuer 放宽约束(accounts.issuer 改可空)
20261001000001_add_share_access_logs_workspace_id 加列 + 回填
20261003000000_widen_share_password 加宽列(至 255)
20261007000000_dedup_task_conversations 去重并删除重复会话 + 建唯一索引

关于最后一条(会删数据)

  • 它按 PARTITION BY task_id 去重,保留组内 created_at 最早者。因为 task_id 是 tasks 的外键,同一 task_id 不可能跨工作区,不存在跨租户误删
  • task_id IS NULL 的独立 IM 会话不参与;子表先搬后删(三条子表的 FK 均为 ON DELETE CASCADE)
  • 不可逆,没有配套备份表。生产执行前请先备份:
    pg_dump -t conversations -t messages -t conversation_members -t chat_presences
  • 幂等,可安全重跑;CREATE UNIQUE INDEX 非 CONCURRENTLY,大表建议低峰期执行

执行角色要求

必须以表属主 / 具备 BYPASSRLS 的连接跑(生产即 compose 里的 postgres 超级用户)。

若以 corps_app(NOBYPASSRLS)执行,FORCE RLS 会让迁移内的 DML 全部命中 0 行——该迁移会因 CREATE UNIQUE INDEX 报 must be owner of table conversations 而失败,不会静默跳过。但纯 DML 的迁移在这种角色下会"0 行生效却判成功",这是本项目所有数据迁移共同的坑,部署脚本请务必核对连接身份。


已知限制

  • Mobile Build 的 android/ios 两个 job 会失败,直到配置仓库变量 CORPS_WEB_URL。这是刻意的 fail-loud:项目当前没有固定域名,移动壳若打包出去会加载到不属于本项目的站点。配好该变量即恢复;桌面端可另配 CORPS_UPDATER_ENDPOINT / CORPS_UPDATER_PUBKEY(需成对)
  • 定时 Smoke 仍红,因为 SMOKE_TARGET_URL 未配置——即当前没有线上监控。这是诚实信号而非故障

桌面产物(本版附带)

tag 触发时 Tauri Build 在三个平台各构建了一份安装包,已附在下方:

平台 文件 格式
macOS (Apple Silicon) Corps_0.6.0_aarch64.dmg dmg
Windows x64 Corps_0.6.0_x64_en-US.msi MSI
Windows x64 Corps_0.6.0_x64-setup.exe NSIS 安装器
Linux x64 Corps_0.6.0_amd64.deb deb
Linux x64 Corps_0.6.0_amd64.AppImage AppImage

下载前请注意三点:

  1. 文件名里的版本是 0.6.0,这是桌面壳自己的版本号。桌面与移动壳的版本线和 Web/Server 不同步,本版 0.8.0 的版本号只指 Web/Server(见上方「Web/Server 版本」说明)
  2. 这些包未做代码签名。macOS 首次打开需在「系统设置 → 隐私与安全性」放行,Windows 需在 SmartScreen 提示里选择「仍要运行」
  3. 移动端产物不在此 release:Android APK 与 iOS IPA 由 Mobile Build 流程产出,不随本 release 分发