-
v0.28.0 Stable
released this
2026-10-13 18:22:00 +08:00 | 7 commits to main since this releasev0.28.0 (MINOR) — 2026-10-13
v0.27.0(2026-10-09)后次版本:176 个提交 / 86 个合并 PR,31 个 feat、无 BREAKING。
主线:
- 统一身份五件套:本地凭据 enc:v1 AES-256-GCM 加密(#5777)、登录/注册双表单内存会话插槽(#5786)、桌面深链 bootstrap 兑换收口(#5788)、token 持久化三路由(#5789)、桌面 session-exchange client(#5946)
- guest CDP trusted-input 四部曲(#5826 N-01..N-04):surface 复用器、跨源 frame 混合路由、snapshot ref 作用域、click settle + wait_for 谓词
- browser 三扩:capabilities 动态通告(#5890)、下载拦截 + browser_downloads(#5892)、pane 网络行
- CI 伪红签名识别 + 单次自动 rerun 扩展 + 负载门控(#4303)
- revert 链路有界化(#5912):git deadline、BusyError 类型化 409、stale index.lock 清理
Full commit-level changelog (232 commits since v0.27.0)
Changes since v0.27.0 ### Added - #5922 pane session-exchange wiring - server mint-PAT route (JWT-brokered) + desktop fire-and-forget preload - browser_reload 双腿 + browser_find pane-only 页内查找(#5890 N-10 / #5901) - SESSION_WT_ROOT 覆盖 worktree ROOT - #5946 session-exchange client + guest partition cookie injection (webview:session-exchange IPC) - #5945 restore per-platform open-remote - desktop in-app pane (revert #5778 desktop branch) - #4303 CI 清理阶段伪红签名识别 + 单次自动 rerun 扩展 + 负载门控 - browser_capabilities 能力动态通告 + headless-only 可行动错误 (#5890 N-05) - pane will-download interception + browser_downloads {list,wait} (fs-journal unified legs) - #5789 token 持久化接线——control 组窄面 session-token 三路由(GET/PUT/DELETE /auth/session-token/:serverId,键 remote-server:<id> 走 #5777 enc:v1 store,损坏→备份+显式 500 拒绝)+ app 侧 TokenPersistencePort(sidecar Basic 面向 HTTP port,注入式可选 prop)+ server.tsx 启动恢复/变更镜像(restoring 防回声)+ 损坏恢复失败→登录表单(useAuthRestoreFailures 与 N-07 outcome 同型)+ desktop-boot 注入 + i18n×3;三 test_id 落 server-token-persistence.test.tsx(主文件单挂边界 A/B 实证放不下复挂),at-rest enc:v1 格式断言在服务端 httpapi-session-token.test.ts - #5788 桌面深链 bootstrap 兑换收口——DEEPLINK_ACTIONS 冻结集 additive 加 oauth-callback(主进程 fragment 盲转发)+ 渲染层 fragment 解析器 + context/oauth-bootstrap 兑换模块(pending 源邮箱→POST /auth/bootstrap→N-05 会话插槽)+ OAuth 次选入口翻转启用 + 失败回登录表单可见错误行(顺带修 N-05 auth 错误 Kobalte ErrorMessage 渲染不可靠缺口:add 模式错误改走 section 原生 p,sv 字面量与 collectIgnoredDeepLinks 镜像同步) - hybrid CDP/injection routing for cross-origin frame input - #5777 本地凭据加密——auth.json/mcp-auth.json 落盘 enc:v1:AES-256-GCM - click settle semantics + wait_for predicates + pane network lines - snapshot ref scoping + console digest + human-assist hint - #5786 桌面登录/注册双表单+内存会话插槽——session-token-slot-v1 全链(AC1-4+NFR-2) - guest CDP surface multiplexer + trusted input primitives - headless text fallback with surface disclosure for preview entry - panel preview entry + path-keyed stable tabs - #5787 OAuth 次选线——provider 抄录(e369767ba)+PKCE S256+redirect 白名单 / GET oauth login+callback(web 双 cookie / desktop octopus:// fragment)/ POST /auth/bootstrap 一次性兑换 - #5784 登录端点——Gitea 凭据探针 + 双窗口限速 + oauth_fallback 引导 - workspace file watcher + SSE reload channel for static preview - guest-partition ride-through + CSP baseline headers for static preview - sidecar workspace static preview server - #5783 注册端点 + registrar Gitea 账号中转线 - #5785 middleware quad-scheme + timingSafeEqual + sync JWT verify core - 会话上下文新增「缓存读占比」指标——Σread/Σ(read+input),write 不进分母 - promote 3 tuning knobs from experimental flags to config schema - 标签图标展示所加载网站 favicon——page-favicon-updated 接线 + icon 生命周期 + 回退链 - auth-infra-v1 JWT core + rate limiter + /auth/refresh - open remote repo in system browser on desktop - cache-accounting 行携带 agent/modelID/faceEpoch 归因上下文 - browser-pane toolbar trailing overflow menu - 「...」菜单新增「打开远端仓库」——双布局接入 remoteUrl 双分叉打开 - browser_snapshot 可选 filter/{id,text} 提取 + parentDepth 祖先链 ### Changed - #5884 swap project-group-header hover actions to new-session first - TTL-cache readClusterCapacity in real kube adapter - 移除项目分组头溢出菜单冗余的新建会话菜单项 ### Fixed - flag registry consumer line follow-up 279->287 (registry-inventory drift from 8f79881c9) - desktop artifact retention 14d→3d(/data 磁盘告警根修,118G 稳态→~40G) - #5967 flag registry 消费行号跟进 275→279——v0.28.0 发版前置解红 - review r3 收口——取证单记录纪律补全 + 契约行五格补齐 - review r2 收口——declined-latch 测试去空心化 + 契约正文节补行 + 取证词表修正 - 评审 round-1 修订(7 FIXED / 3 WAIVED) - review r1 收口——消费侧清单/同意门词汇/子集措辞/契约 v12 - 修 #5919 带入的 4313 归档包 schema 违例(stray verification 根键移入 working_notes)——解堵 #5949 合并 - #4303 归档包 schema 违例修复——state=archived + close_commit_sha=null(合并前合法形态) - #5946 review MINORs - cookie expiry/same_site normalization + domain url fallback - #5946 test PAT literals ride identifiers (skeleton sv credential scan) - main 侧 bundle schema 红修复——4419/4421 归档不合规根键迁入 meta (#5890 N-05 rider) - review R1 整改(sweep mtime 宽限 + CI 测试覆盖) - Windows worktree create/rm 四项提速修复 - #5921 取件模式宿主侧 Esc 退出——picking 态挂 window keydown 监听调 cancelPicker,与 guest 内捕获路径幂等互备 - #4303 review r1 COR-F001 — 多 job 混合签名时 marker kind 取首见+计数而非 last-wins - r1 评审修复——7 MINOR 簇 + 8 INFO 采纳 (#5890 N-05) - flag registry consumer line drift — question-tool consumption moved :271→:275 (unblock #5913 wave) - 评审修订——stale index.lock 清理、信号量排队有界化、die 收窄与 i18n 超时文案 - #5666 spool 0o600 断言平台分支 + 豁免退役 - determinism — pin basis sha, pseudo-red recheck vs origin/main, headroom caps - revert 链路有界化——快照/git deadline、前端超时兜底、BusyError 类型化 409 - effectiveBalance 三读折叠单语句除撕裂窗(COR-F008/DBT-F002) - round-2 TST-F1 wait target pinning + guard hardening - compiled-binary offloop child self-exec (#4421 TD-965) - round-1 review fixes — headless budget gate, journal exception boundaries, cross-process shape pins - #5907 评审收口 MINOR-1+INFO×2——注释重述(安全性依据=stock Gitea UpdateAuth 仅在 source_id 非零时查阅 login_name,local 账号写而不读;弃不准确的 admin UI 先例说法)+ not-configured 原因钉死(runPromise 拒绝值断言,effect v4 Cause 内形不稳)+ 补第六件 probeUserCredentials wire 钉(Basic 头精确形状/401/403→rejected、非 200→unavailable 分类) - chunk-stall 看门狗工具窗口盲区——结构边界关窗 + invalid 不开窗 + done 快速失败 - #5907 registrar PATCH 带 login_name(eightarms Gitea 1.28.0+dev EditUserOption 强制非空 login_name——空缺=必 422→注册建号后回滚;local 账号字段惰性、同 Gitea admin UI 形态)+ 新增 liveLayer wire 级回归测试五件(userExists 路由族/create 体与邮箱合成/Policy PATCH 体钉死/201 后失败回滚 DELETE/缺 token not-configured)+ runbook #5907 校准(admin 旗标 CLI 法/CLI 改密复位 must_change_password 坑/scope 双写 write:admin+read:user 坑表)——W7 生产实弹三连根因收口 - flag 注册表 continue_loop_on_deny 消费行号漂移修复(processor.ts:961→969) - 用钉版 bun 1.3.14 重锁 bun.lock(回退 v1 格式,CI bundle 修复) - 收窄 minimatch/brace-expansion override 至 <10,修复 fresh install 崩溃 - #5903 ambient fetch 绑定修复(web auth Illegal invocation) - 看门狗回收携带归因,中断标记不再谎称用户停止 - i18n parity settings-key probe Windows path (fileURLToPath) + retire 10 falsified waivers - retention-gc Windows teardown EBUSY + timer-granularity-robust liveness probe - cherry-pick FT-593/#5827 from main (03c5f9f97) — orphan-sweep/restart-drain 批量红根因为 PROCESS_EPOCH 模块加载时刻漂移;导出 PROCESS_EPOCH_MS 供测试锚定回拨,替代固定 now-120s 偏移(满载排队>120s 时谓词全空)。非 N5 回归:分支 diverge 点 7313f869eb 早于 main 修复落地 - ws-prototype AC-3 await close event (dispatch race, #5859) - sender-auth nonce handshake for userscript relay envelopes (fail-closed intake) - #5789 评审收口 MAJOR×1+MINOR×3——恢复循环全局 restoring 旗改 per-key 抑制+空槽 peek 守卫(恢复期并发登录不再被吞/不被陈旧对覆写;N-07 深链兑换与启动恢复并行的实弹竞态)+ refuseIfCorrupt 收窄为 CipherError 真因分支(纯 IO 失败走 defect 500 不再伪装损坏)+ exercise 补 session-token 三场景(GET 404/PUT enc:v1 落盘断言/DELETE,157 pass 0 fail)+ localStorage 扫描加密到 set/clear 两步间 + 顺手修 auth.set 场景 #5777 后失实的明文断言 - 触点⑤ dispatch-precheck-failed 加 15min (org,repoId,issueNumber) 去重窗 - DaemonError.daemonCode 透传与 503 族精确映射 - turbo typecheck inputs 纳入跨包 path-alias 源(containers←control-plane,control-plane←containers/llm-gateway),封堵 #4070 类缓存穿透 - #4517 AC-1 test Windows teardown — Bun.gc finalizers before temp-db rm - #5863 无盘符绝对路径按 instance 盘符解析——多盘符工作站 read 权限归一修复 - #5788 评审收口 5 MINOR——outcome 60s TTL(陈旧 ok 不再闪关后续对话框)+ 同码 30s 静默去重窗(jti 重放 401 不再在已入槽会话上重开登录表单,批内 Set 去重+注释正本清源)+ sanitizeForLog 剥 fragment(NFR-2 主进程日志零码,sv 镜像同步)+ 两处陈旧注释纠正 + peekPendingOauthServer 补测试锚 - review round 1 rectification (COR-F001 COR-F002 TST-F001 STY-F001 COR-F003 DGN-F002 DGN-I005) - orphan-sweep 批量红根因为 PROCESS_EPOCH 模块加载时刻漂移——导出 PROCESS_EPOCH_MS 供测试锚定回拨,替代固定 now-120s 偏移(满载排队>120s 时谓词全空);同修 restart-drain 同形构造 (FT-593 #5827) - correct destroy event name + listener cleanup + idempotent release - question live-gate nonblocking queue 事件断言改为有界轮询,消除满载 queued-event 可见性竞争 (FT-594) - replace fetch-based port probe with raw net connect in static-preview session-end-teardown poll - #5786 评审 round1 收口——AC-5 OAuth 次选入口 + POST 重放 spec 锁 + relogin 同键限定 - #5845 BF-594 partial-failure-isolation 期望对齐 #5817 never-execute-on-answered-flip 契约 - composite server key + eviction + error variant + URL encoding + review r1 findings - #5787 CI 红根修——ServerOAuth.liveLayer 双需求泄漏(provide-in-pipe 只满足了 OAuth Config,ServerJwt.Config 残留经 createRoutes as-any 逃过类型检查,全树每请求 ServiceNotFound);改为预满足的 oauthServiceLayer 闭层(两处挂载同 const,memoMap 单实例语义不变) - #5820 活体 loop 测试改用私有 memoMap——共享层缓存会跨文件复用他文件的 SessionPrompt 构建(其 MCP 面 tools={}),静默卸载本文件的失败工具夹具(test:changed 单进程 54 文件批实测复现+修复) - #5820 MCP -32001 超时轮不再计入 invalid-tool 会话熔断 - restore schema_version field in known-failures merge (CI waiver parse) - #5784 review round1 收口——超时可注入(空真消灭)+ 长度信封 + 401 字节级锁定 - #5817 pane 已应答即不换面——假 heal 循环根修 + 导航阻断 + 自愈如实披露 - CSP base-uri/form-action + error-branch headers + review round-1 findings - CSP-safe same-origin reload client + SSE connection lifecycle - re-converge lockfile to the 22-package advisory scope - deterministic teardown + review round-1 findings - #5769 drizzle journal 名分隔符归一化对账,存量库迁移改名后自愈 - #5783 review round1 收口——email 占位合成/XFF 末跳/回滚不变量/jwt 预检 - #5785 review BLOCKER 收口——decodeJson 非 JSON 对象段归 malformed(null 段 500 消灭)+ 错签名/null 端点级回归 - 闭 TST-F001 MAJOR——write>0 回合使两口径分化(85 vs 81)锁死 write 排除分母;locale 断言改 import 逐值式(defined+非空,测试名不动保 test_id 映射);ar/bs/no 术语对齐相邻 cache 命名(STY-F002/DOC-F001) - CI/check 修复——PinnedBrowserTab 签名钉加 contract-assert 豁免注释(#4693 契约型断言) - 闭 COR-F001/DOC-F001 两 MINOR——faceEpoch 改发送时采样(first pull 捕获)+ 豁免 4 条补 added_ts - batch bump advisory fixes via declarer-scoped updates - verify 回归修复——SortableBrowserTab 签名钉更新为多行字面量(含 icon prop,保持全签名忠实钉) - bound the warmup-failure degrade path hang - review-code R1 修订——favicon 失败闩锁随 icon 复位 + scheme allowlist(http/https/data)+ spinner 测试断言 icon 存活 + img lazy/async + 修正静态 globe 注释 - #5782 round1 MINOR 收口——web.ts fail-fast+requiredClaims+端点拒绝矩阵+字母序/注释/import 合并 - resync 补拉 permission.list——冷启动丢卡自愈 - bundle slug 小写化——schema 模式 ^[a-z0-9][a-z0-9-]*$(N-01→n01) - cover browser-snapshot-filter in output-cap ledger - source-assert 豁免——AC-4 断言行内 contract-assert 注释(#4693 门禁) - automation 缺省挖出为 ask ### Documentation - #5947 gitea session-exchange deploy runbook - #5930 升级决策记录——fork 谱系实证(分叉07-24/297家务)、CVE-2026-60004 事件闭环、28.1.0 五坑矩阵、v343 迁移撞号方案、rebase 路线 - gitea-pairing-v1 配对契约冻结——A-E 依赖面锚点(R1-R6/O1-O4/五坑/护栏)+最小行为集+可执行探针脚本 - Gitea 用户库备份与恢复 runbook(#5931 上线实录) - OAuth 次选线点亮校准——OCTOPUS_GITEA_BASE_URL 公网值语义(registrar/OAuth 共用 env、admin API 走 nginx W0 本机自 curl 项)+ eightarms 生产现值(App id 5/client_id/建法/web 流实弹配方) - 清理 N-08 退役 env 表与 billing.ts 过时注释 - review round 1 rectification (DOC-F001 DOC-F002) - deprecate enter-submit, document CDP trusted path + human-assist handling - fix graduation wording to archived-status semantics (N4S-F001) - experimental flag gate rule for contributors ### Maintenance - archive Tier 1 bundle for #5959 (merge-gate archive-presence) - archive Tier 1 bundle for #5967 (merge-gate archive-presence) - archive run bundle for #5901 (merge-gate archive-presence) - archive Tier 1 bundle for #5963 (merge-gate archive-presence) - archive bundle for #5929 配对契约(merge-gate close-ref) - archive Tier 1 bundle for #5912 - archive run bundle 5946 (merge-gate archive-presence) - archive run bundle 5945 (merge-gate archive-presence) - archive Tier 1 bundle for #5923 (merge-gate archive-presence) - archive Tier 1 bundle for #5921 (merge-gate archive-presence, PR #5952) - archive Tier 1 bundle for #5896 (merge-gate archive-presence) - archive Tier 1 bundle for #4303 (merge-gate archive-presence) - archive Tier 1 bundle for #5666 (merge-gate archive-presence) - adapt remaining fake dbs to folded effectiveBalance single-statement - archive 4313 bundle (ticket #4313) - regenerate anchor ledger after skill doc retirement - output-cap ledger registration for browser_downloads surfaces (CI invariant guard) - archive 4421 bundle (ticket #4421) - archive 4085 bundle (ticket #4085) - archive 4419 bundle (ticket #4419) - effectiveBalance 三读口径等价 live 对照用例(折叠 ≡ 旧三读 JS 归约) - retire keep-mergeable/risk-classifier references in skill docs - remove merge-coordinator/keeper/risk modules and docs - archive Tier 1 bundle for #5903 (merge-gate archive-presence) - #5775 评审 INFO 收口——熔断注释精度(彻底退役=access+refresh 双型即刻死;30min exp 仅在 OCTOPUS_JWT_SECRET_PREVIOUS 宽窗内作兜底时钟) - #5775 M-02 桌面全旅程 sink——Epic 验收口径 1:1 单叙事 wire 旅程(注册邀请码→即登录 201 对→Bearer 过闸→sidecar Basic 持久化 PUT enc:v1 落盘→重启形态 GET 恢复→到期 401→refresh 铸新对→onTokensChange 再落盘→replay 带新对→退役密钥 access 过闸即死);2FA 兜底/Basic 全周期/token 卫生三线按 M-03+N-07+M-01 锚承载(PR body 证据矩阵) - archive run bundle 5739-parity-url-win-5739 - #5775 M-03 评审收口 MINOR-1——beforeEach 补 __resetCredentialCipherForTests(cipher 进程级缓存键防早跑套件键幸存进 at-rest 腿,对齐 httpapi-session-token 兄弟约定;cipher.test 同批跑对抗排序实证 14/14);MINOR-2/3 契约页措辞漂移按实施校准落 wiki(bootstrap 载荷 {jti,exp} jti 兼任 nonce / 落盘键平铺 remote-server:<id>,wiki 79f726c) - archive run bundle 5737-retention-gc-ebusy-5737 - #5775 M-03 桌面会话面集成收敛——单挂载三面镜像生产组合(AuthApi 预认证 + OAuth raw 302 双形态 + 闸后 control 面过真 Authorization×#5777 enc:v1 真库):表单登录对→Bearer 过闸→401→refresh→replay 全序列 / login 拒绝体 data.oauth_fallback 实形 / desktop fragment→真 deep-links 解析器→一次性兑换+重放统一 401 / web cookie 会话过同一闸(Secure+HttpOnly+Lax)/ 持久化线级回路 enc:v1 落盘;跨包静态导入经 tsgo 实证打破 per-package paths 边界(session-tokens type-only 链拖全 app 树),故客户端半场按 app 测试锚映射承载(PR body 附 AC↔测试符合性表) - archive Tier 1 bundle for #5884 (merge-gate archive-presence) - #5884 split order assertion into own test, tighten pair regex - archive run bundle 5859-ws-close-frame-5859 - archive bundle 4082-turbo-alias-cache - archive bundle 4130-capacity-ttl-cache - archive bundle 4244-dispatch-precheck-dedup - archive bundle 4186-retired-env-docs - archive bundle 4131-daemon-code-map - archive bundle 4766-relay-nonce-auth - archive bundle 3682-range-inflight-test - sidebar range 状态机 inflight 去重单元锁(TD-643/TRC-F007,#3682) - archive Tier 1 bundles for task runs n-01/n-02 (worktree cleanup) - archive run bundle 5862-orphan-sweep-rm-win-5862 - #5867 run bundle 归档(PR #5872) - #5867 BF-600 三红修复——断言对齐 resolve 形态 + watcher-off + dispose 序 - #5788 CI 红收口——sanitizeForLog 锚改链式片段断言(prettier 拆行后 bare() 展平带空格,单行正则失配;本地教训=prettier --write 之后必须复跑受影响 sv 面) - #5863 run bundle 归档(PR #5871) - #5777 run bundle 归档(PR #5869) - regenerate #5828 archive bundle via gen-run-bundle (17 artifacts, schema-valid) - archive Tier 1 bundle for #5828 (merge-gate archive-presence) - archive Tier 1 bundles for #5834-#5838 (merge-gate archive-presence) - bump snapshot-filter cut pin 3->8 + ledger OP-034 - archive Tier 1 bundle for #5827 - archive Tier 1 bundle for #5829 - archive Tier 1 bundle for #5821 - #5786 复审 round2 MINOR——撤 bodyUsed 无区分力断言并正本清源注释(首飞 new Request(request) 按 whatwg/fetch#554 会 disturb 调用方 Request;净本 clone 保护的是重放源) - archive Tier 1 bundle for #5845 (merge-gate archive-presence) - archive Tier 1 bundle for #5797 (merge-gate archive-presence) - archive Tier 1 bundle for #5797 (merge-gate archive-presence) - N-04+N-05 end-to-end terminal milestone suite (M-02 DoD, ≤1s panel share) - archive Tier 1 bundle for #5815 (merge-gate archive-presence) - #5775 M-01 认证 API 收敛集成验证——注册/登录铸币→Bearer 过真实中间件→200、refresh 轮换链+typ 分离、过期 access 硬拒、Basic/?auth_token= 存量通道并存 - archive Tier 1 bundle for #5814 (merge-gate archive-presence) - #5787 review 收口——pending 表 FIFO 上限驱逐测试(MINOR)+ liveLayer 单实例注释 + 抄录 delta 注全(NOTEs) - archive Tier 1 bundle for #5820 (merge-gate archive-presence) - N-01+N-02+N-03 combined integration suite (milestone M-01 DoD) - archive Tier 1 bundle for #5813 (merge-gate archive-presence) - archive Tier 1 bundle for #5812 (merge-gate archive-presence) - archive Tier 1 bundle for #5817 (merge-gate archive-presence) - archive run bundle for #5764 (PR #5823) - archive Tier 1 bundle for #5811 (merge-gate archive-presence) - archive Tier 1 bundle for #5769 (merge-gate archive-presence) - archive 5720-audit-batch-bump - 归档 bundle(merge-gate close-ref 前置,two-tier-artifacts archive-at-close) - 归档 bundle(merge-gate close-ref 前置,two-tier-artifacts archive-at-close) - archive Tier 1 bundle for #5798 (merge-gate archive-presence) - restart-drain 满载预存红 4 条豁免登记(#5452 机制,归因实验证据 #5793#c63926) - archive 5721-warmup-degrade-hang - archive 5778-open-remote-system-browser - archive 5765-tuning-knobs-promotion - archive Tier 1 bundle for #5768 (merge-gate archive-presence) - resync mock 补 /permission 路由 - 移除已删菜单项的 cor-f002 断言 - archive Tier 1 bundle for #5770 (merge-gate archive-presence) - archive Tier 1 bundle for #5779 (merge-gate archive-presence) - replace source-string assertions with behavioral DOM assertions - align test ids to frozen DAG ACs per review round 1 - archive Tier 1 bundle for #5771 (merge-gate archive-presence) - archive Tier 1 bundle for #5772 (merge-gate archive-presence) - archive 5730-snapshot-filter-parents <details><summary>15 uncategorized commit(s)</summary></details>Downloads