feat: release Dever 0.1.5 with direct workers and long transactions

This commit is contained in:
Codex committed 2026-10-11 11:17:33 +00:00
1 parent 89629c2197
commit a900d7e8db
153 files changed
+3676 -3708

No files matched your search

+2 -2
View File
@@ -20,9 +20,9 @@ GET/DELETE 从 URL query 读标量参数,POST/PUT 从 JSON body 读参数。
`dever.api.Error` 中 Invalid/Unauthorized/Forbidden/NotFound/Conflict/TooManyRequests 对应 400/401/403/404/409/429;未知内部失败记录脱敏日志并返回安全的 500。
写 HTTP、CMD 和 Job 默认由入口建立事务;GET 不能写库或入队。
普通写 HTTP、CMD 和 Job 默认由入口建立整体事务。需要事务外编排时,在入口写 `long post generate = app.generate`、`long cmd generate = app.generate` 或 `long job ...`,其业务写库和 Job 入队必须进入显式 `transaction`。`public long` 的匿名权限与事务模式独立;自动 REST 保持原事务行为,GET 不能写库或入队。
密码 hash/verify 除外:计算期间不能长期占用数据库事务。实际写入要放在显式的短 `transaction` 内,并重新检查相关状态。不要因为“默认有事务”删掉这里的短事务。
HTTP、文件传输、外部 Worker 和密码计算放在事务外;事务内重新检查写入依赖的状态。需要业务记录与入队原子提交时,将两者放在同一个 `transaction`。`long` 中前一阶段已经提交的写入不会因为后续处理或响应编码失败而撤销,重试须保证业务幂等;普通入口仍整体回滚。`long` 不延长超时、不自动转后台;编译器遇到边界违规报错,不自动切换模式。
## 站点、身份与权限
+1 -1
View File
@@ -42,7 +42,7 @@ Python 使用 `Worker.from_manifest`,JS 使用 `Worker.fromManifest`,Go 由
业务拒绝使用 SDK 的 `BusinessError`:本例的 identity 是 `document.markup.RenderResult.Rejected`,payload 是 `{"message":"..."}`。未知异常属于运行失败,不自动变成业务拒绝,也不返回假成功。
stdout 专用于协议,日志写 stderr。Python 处理函数要响应取消,JS 使用 signal,Go 使用 context。需要网络、文件、子进程或 GPU 时,通过 `allow` 声明并在配置中授权;本例纯文档转换不需要这些能力。缺少权限时不能关闭沙箱。
stdout 专用于协议,日志写 stderr。Python 处理函数要响应取消,JS 使用 signal,Go 使用 context。需要网络、文件、子进程或 GPU 时,通过 `allow` 声明效果;实际权限继承容器用户,由部署侧管理,不再使用 Dever 内层沙箱或 Adapter 挂载授权。真实文件路径通过业务 setting 传入。只运行可信 Worker,本例纯文档转换不需要这些能力。
## 准备与测试
+2 -2
View File
@@ -14,7 +14,7 @@ Dever 安装包和编辑器插件从 [Releases](https://git.dever.cc/shemic/deve
curl -fsSL https://git.dever.cc/shemic/dever/raw/branch/main/install | bash
```
无需先克隆源码或安装 skill。安装器下载最新正式版本,安装到 `/opt/dever`,提供 `/usr/local/bin/dever`,并安装、启动机器共享服务及必要的沙箱策略。无需系统 zstd。没有匹配平台的发行包或下载校验失败时明确报错。
无需先克隆源码或安装 skill。安装器下载最新正式版本,安装到 `/opt/dever`,提供 `/usr/local/bin/dever`,并安装、启动机器共享服务。无需系统 zstd。没有匹配平台的发行包或下载校验失败时明确报错。
将命令尾部的 `bash` 换为 `bash -s -- --help` 可查看参数,换为 `bash -s -- --version <准确版本>` 可指定版本。`--no-start` 只安装、不启动服务;应用编译仍需要共享服务可用。已下载脚本也可用 `bash install --help` 查看帮助。
@@ -52,7 +52,7 @@ dever build <project-root> --target linux-aarch64 --output <新文件>
依赖和目标准备会显式联网,后续 run/build 离线;缺资源时按提示准备,不扫描宿主 Python、Node、Go 或 PATH 充当运行环境。省略目标时使用本机架构,run/test 始终在本机执行。ARM64 应用目标不表示提供 ARM64 宿主编译器,macOS、Windows 宿主安装暂未提供。
Linux 外部调用要求系统支持所需 namespace 与 openat2。受限 AppArmor 环境需要安装器配置的专用策略;策略不满足要求时明确失败,不关闭沙箱继续执行。
Linux 外部调用使用受管子进程和 pidfd,不再依赖嵌套 namespace、Bubblewrap 或 Dever 专用 AppArmor 策略。代码直接继承容器用户权限,只运行可信依赖;镜像、设备、挂载与网络权限由部署侧管理。
## 更新与选择版本
+1 -1
View File
@@ -49,7 +49,7 @@ execute(args: List<Text>, stdin: Bytes?) (output: dever.process.Output) fails de
external command "bin/tool" {}
```
将相应架构 ELF 放在领域的 bin/tool,App 调用 `port.execute(["--version"], null)`。结果有 code、stdout、stderr,字节显式转文本;参数不是 shell 字符串。非零退出码仍是结果,启动失败/超时/超限是错误。文件、网络、子进程能力显式声明且受配置授权,不能关闭沙箱来掩盖部署问题。
将相应架构 ELF 放在领域的 bin/tool,App 调用 `port.execute(["--version"], null)`。结果有 code、stdout、stderr,字节显式转文本;参数不是 shell 字符串。非零退出码仍是结果,启动失败/超时/超限是错误。文件、网络、子进程能力仍显式声明,但不构成 OS 沙箱;执行权限继承容器用户。不要把可信 Worker 当作不可信代码隔离环境。
测试必须使用 Port fake,不执行真实第三方程序。跨到 ARM 时必须提供目标架构的库和二进制,Dever 不转换已有 x86 ELF。