feat: publish Dever core with project scaffolding and versioned AI skills
This commit is contained in:
1 parent
70fa73cdc2
commit
ac458ffa7f
960 files changed
+221319
-1163
No files matched your search
@@ -0,0 +1,4 @@
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"检查 HTTP2 的结构化归属、资源容量和桥接"}
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"定向测试和无全量测试约束"}
|
||||
{"file":".trellis/tasks/09-12-http2/prd.md","reason":"完整范围和验收"}
|
||||
{"file":".trellis/tasks/09-12-http2/design.md","reason":"协议配置与生命周期"}
|
||||
@@ -0,0 +1,21 @@
|
||||
# 设计
|
||||
|
||||
## API 与复用
|
||||
|
||||
在官方 `dever.http.Limits` 增加 `http2: Http2Limits?`;`Http2Limits` 三个 Int 字段为 `streams`、`stream_window_bytes`、`connection_window_bytes`。默认关闭 HTTP/2,`default_http2_limits()` 返回 16 流、65535 字节单流窗口、262144 字节连接窗口。沿用现有 serve/serve_tls/serve_live/client/open/open_stream/send,不增加平行 API。
|
||||
|
||||
`Limits.check` 统一校验;HTTP/2 streams 和 connections 的乘积不得超过 65536,窗口遵循 HTTP/2 31 位限制(连接窗口至少 65535)。关闭自适应窗口,保持帧和发送缓存有界。源语言 exact-record 检查与原生结构转换同步修改。
|
||||
|
||||
## 运行时边界
|
||||
|
||||
- 协议配置、Hyper builder 和 HTTP 专用 TLS ALPN 配置集中在 HTTP 模块,原有 TLS trust/session cache 和 Transport 复用。不能修改共享 TLS 配置使 WSS 错误协商 h2。
|
||||
- 编解码复用 message;按协议校验头字段,HTTP/2 使用路径查询而不是绝对 URI 作为 source Request.target,authority 与 Host 一致。
|
||||
- HTTP/1 仍独占连接 lease;HTTP/2 持有共享连接与独立流 lease。EOF 或取消释放流,只有连接 owner 结束才释放物理连接许可。空闲回收不能中止活跃流。
|
||||
- Hyper Executor 必须接入已有结构化任务 Scope,不能直接用脱离作用域的 TokioExecutor。每流清理独立,程序故障明确传给服务任务,peer reset 只结束该流。
|
||||
- GOAWAY 排空与业务取消分开;应用已有 timeout(server, grace_ms, fallback) 控制最长排空时间。
|
||||
|
||||
## 验证
|
||||
|
||||
仅运行本次相关 Rust 定向测试、编译器官方库检查和隔离 loopback 原生程序。独立 HTTP/2 对端验证真正单连接多流、SETTINGS/流控、RST_STREAM、GOAWAY、ALPN 和请求语义。保留已有性能报告;缓存可重建部分暂存到专用 /dev/shm 目录以腾出构建空间。
|
||||
|
||||
协议依据:[RFC 9113](https://www.rfc-editor.org/rfc/rfc9113.html) 与当前锁定 Hyper 1.11.1 源码。
|
||||
@@ -0,0 +1,5 @@
|
||||
{"file":".trellis/spec/backend/directory-structure.md","reason":"Rust 语言分层与 root test 布局"}
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"HTTP、TLS、流、结构化任务及原生桥接合同"}
|
||||
{"file":".trellis/spec/backend/error-handling.md","reason":"程序故障与 peer 失败边界"}
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"有界定向验证与原生测试"}
|
||||
{"file":".trellis/tasks/09-12-http2/design.md","reason":"本阶段已批准接口与生命周期设计"}
|
||||
@@ -0,0 +1,49 @@
|
||||
# 执行记录
|
||||
|
||||
## 实现
|
||||
|
||||
- [x] 用户批准方案后实施,复用 Hyper 1.11.1;启用 http2 feature,锁定 h2 0.4.19 和四个传递依赖,不引入第二套协议栈。
|
||||
- [x] 官方 Limits.http2/Http2Limits、精确记录检查和仓库调用者一起迁移;原生桥接复用 Nullable/Record 转换,无新增 intrinsic。
|
||||
- [x] protocol/message 集中拥有流控预算、ALPN 派生、authority/Host 和方向相关的头校验。
|
||||
- [x] buffered/live 服务端和 single-use/pooled 客户端接通;流式上传、下载、SSE、GOAWAY 和取消沿用现有 API。
|
||||
- [x] ScopedOwner/ScopedSpawner 接入已有 Task Scope、全局容量和 blocking 清理;每流独立 Group,物理许可持有到协议后代清理完成。
|
||||
- [x] 按工作流完成服务端/客户端实现分工及独立并发、全范围检查;主代理复查关键所有权和运行证据。
|
||||
- [x] 更新现有 LANGUAGE、IMPLEMENTATION、README、toolchain-and-library 和性能说明;P1/P2 报告仍保留为 HTTP/1 数据。
|
||||
- [x] 最终定向验证与检查闭环。
|
||||
- [x] 完成任务状态、会话记录和自有临时目录清理,不提交。
|
||||
|
||||
## 复现及修正
|
||||
|
||||
- Hyper Executor 不携带 Dever CURRENT_SCOPE:协议 future 改由连接 owner 创建子 Scope;关闭 admission 与登记使用同一把锁。故障报告/注销先于完成信号;不可取消 supervisor 排空后代,等待者被取消也不能遗失 completion。
|
||||
- 池握手的连接 owner 必须在持久 driver 首次 poll 时创建,不能归临时请求 Scope。
|
||||
- RST/正文 idle 超时使背压 write 同时失败:先记录传输取消,避免把该流结束当成全局 handler 故障;真正程序错误仍保留原消息。发布失败时先释放 state 锁再析构响应体,避免取消标记重入锁。
|
||||
- GOAWAY 后 Hyper dispatch ready 不等于能建新流:仅 TrySendError 结构化返回的未发送请求可在原期限内重排;先释放旧上传/流租约,不重放已发送请求。
|
||||
- HTTP/2 Response TE 必须显式拒绝,不能交给 Hyper 静默删除;请求 TE 只接受 trailers。
|
||||
- 测试修正:Dever 子任务用 await;静默 h2 peer 可能先收到 SETTINGS,需读到 EOF;独立 h2 的 FlowControl/RecvStream/SendStream 在等 driver 结束前释放。共享原生 fixture 的 HTTP/1 服务端保留三条连接容量,两条供池内嵌套代理,一条供独立 WSS;HTTP/2 客户端仍只允许一条物理连接。
|
||||
|
||||
## 验证约束
|
||||
|
||||
使用 PATH 指向已有 stable 工具链、CARGO_TARGET_DIR=target/native-runtime、TMPDIR=/dev/shm/dever-http2-native.fW3PNS,Cargo 均 --offline --locked --release。一轮 fetch 后不再联网。仅自有随机 loopback 端口和 test/ 下测试证书,不运行全量测试、既有服务、性能矩阵或全局安装。
|
||||
|
||||
首轮 CLI release 构建和 backend 示例 check 通过。官方库 fmt-check 仅报告原有 net.dever 格式差异;修改的 http.dever 无差异。Rustfmt/Clippy 未安装,不作为通过项。
|
||||
|
||||
低磁盘处理仅将可再生 target/debug/{incremental,deps,build} 暂存到 /dev/shm/dever-http2-cache.wOoaI9;现有 debug/deverc、源码和 target/performance 报告保留。最后统一记录验证结果与缓存清理。
|
||||
|
||||
## 最终测试证据
|
||||
|
||||
88 个不同定向用例全部通过(修复后重跑不重复计数):http2_client 6、http2_server 6、http_engine 12、http_library 7、live_network 16、pooled_network 14、pooled_library 6、async_runtime 10、structured_concurrency 11。
|
||||
|
||||
- 独立 h2 对端证明一条物理连接的并发请求、流式上传/下载、RST 前后隔离、背压写取消、WINDOW_UPDATE 恢复、流上限与活跃正文不会被 idle 回收、GOAWAY 的物理预算与连接替换、TLS ALPN 成功/拒绝、Host/target、413 与原始 handler 故障。
|
||||
- 原生 Dever 程序证明 single-use HTTP/2、TLS 同池嵌套代理(客户端只有一个物理名额)、上传、SSE 和 handler 内 run/await。共享 HTTP/1 变体另覆盖 WSS 与优雅停机;测试服务端三连接容量的修正经实际运行确认。
|
||||
- 最新响应发布取消/锁序改动已重新编译,并由 http2_server 6 项和 live_network 16 项覆盖;已有结构化任务、HTTP/1 连接池与源码语义检查通过。
|
||||
- 源码空白/冲突标记扫描、性能构建器 Python 语法和任务 context JSONL 验证通过。Rustfmt/Clippy 未安装;未运行性能矩阵、全量测试或既有服务验证。
|
||||
|
||||
复现上述范围:
|
||||
|
||||
```bash
|
||||
cargo test --offline --locked --release -p dever-tests --test http2_client --test http2_server --test http_engine --test http_library --test live_network --test pooled_network --test pooled_library --test async_runtime --test structured_concurrency
|
||||
```
|
||||
|
||||
最终 CLI release 构建通过,产物为 `target/native-runtime/release/deverc`;backend 示例的实际 CLI check/fmt-check 均无输出并退出 0。迁移后的 network_bench example 及启用 reference 的 core/runtime 离线 release check 通过。未替换全局命令。
|
||||
|
||||
独立审查与主代理最终所有权、调用链、规范和改动范围核对闭环,无剩余生产阻断。清理专属 shm 构建目录,并删除暂存的约 378 MiB 可重建 debug 中间缓存;源码、现有编译器和全部性能报告保留。按用户约束手动更新状态/日志,不提交、不调用自动提交归档流程。N5 完成,HTTP/2 性能测量、RFC 8441、数据库与发行等仍在后续路线图。
|
||||
@@ -0,0 +1,16 @@
|
||||
# N5 HTTP/2
|
||||
|
||||
用户已批准上一阶段提出的 HTTP/2 接入方案,并要求继续实现。复用 Hyper,面向小机器控制运行内存;不实现旧源码兼容层,不改运行时根任务调度策略。
|
||||
|
||||
## 范围与验收
|
||||
|
||||
- buffered/live 服务端和 single-use/pooled 客户端支持 HTTP/2;HTTPS 必须通过 ALPN 协商 h2,明文为 prior knowledge。
|
||||
- `Limits.http2: Http2Limits?` 显式选择协议;null 为 HTTP/1,非空为 HTTP/2。配置包含 streams、stream_window_bytes、connection_window_bytes,连接限额仍由 connections 持有。仓库调用者直接迁移。
|
||||
- 连接内复用请求,流式上传/下载与 SSE 复用现有正文接口;并发流、窗口、发送缓存有界,单流中止不取消相邻流。
|
||||
- Hyper 内部任务保留 Dever 的作用域归属;子任务、已启动 blocking、取消及故障完整排空,容量持有到清理完成。
|
||||
- 监听器关闭发送 GOAWAY 并排空在途流;客户端不向已 GOAWAY 连接派发新请求,不自动重试已发送请求。
|
||||
- 使用独立线协议对端和原生 Dever 程序验证多路复用、TLS ALPN、流控、取消隔离和生命周期,选取 HTTP/1 与 WS 回归。
|
||||
|
||||
## 排除
|
||||
|
||||
本阶段不接 RFC 8441 WebSocket-over-HTTP/2、h2c Upgrade、服务器推送、非空 trailers、自动协议降级,不跑全量测试或重新做性能矩阵,不替换全局二进制,不提交 Git。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "http2",
|
||||
"name": "http2",
|
||||
"title": "HTTP/2 server and multiplexed client",
|
||||
"description": "复用 Hyper 接入 HTTP/2 服务端、客户端多路复用、TLS ALPN、流控和结构化取消;验证流式正文与 SSE,保留 HTTP/1 和普通 WebSocket。",
|
||||
"status": "completed",
|
||||
"dev_type": null,
|
||||
"scope": null,
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "Antigravity",
|
||||
"assignee": "Antigravity",
|
||||
"createdAt": "2026-09-12",
|
||||
"completedAt": "2026-09-12",
|
||||
"branch": "main",
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": "09-04-dever-language-mvp",
|
||||
"relatedFiles": [],
|
||||
"notes": "N5 complete: 88 focused cases passed, native HTTP/2/TLS proxy/upload/SSE and HTTP/1/WSS verified; CLI build/check and independent review passed. No performance matrix, global install or commit.",
|
||||
"meta": {}
|
||||
}
|
||||
Reference in new issue
Block a user