6.6 KiB
6.6 KiB
title, type, permalink, stable_id, scope, project_id, workspace_type, usage_profile_id, preference_context, document_type, revision, source_memory_ids, source_checkpoint_ids, source_file_ids, source_git_commit, source_git_commits, source_agent_sync_ids, model_connection, model_name, source_count, source_revisions, source_dispositions, cited_source_ids, job_cited_source_ids, conflicts, supersedes, preferences, source_cursor, source_hash, prompt_version, schema_version, curation_job_id, created_at, updated_at, tags
| title | type | permalink | stable_id | scope | project_id | workspace_type | usage_profile_id | preference_context | document_type | revision | source_memory_ids | source_checkpoint_ids | source_file_ids | source_git_commit | source_git_commits | source_agent_sync_ids | model_connection | model_name | source_count | source_revisions | source_dispositions | cited_source_ids | job_cited_source_ids | conflicts | supersedes | preferences | source_cursor | source_hash | prompt_version | schema_version | curation_job_id | created_at | updated_at | tags | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 关键决策与已实现方案 | curated | main/projects/4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0/curated/关键决策与已实现方案 | 7efbeabe-d24c-43de-a01f-769b52610eaa | project | 4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0 | development | null | development | decisions | 1 | de28dc8246094e2bc17cab7c764fb4d4a2da71e0 |
|
Sub2API | openai/gpt-oss-120b | 188 |
|
|
|
87 | 96f0e4026558c8a03161f53b392fcec7359d4d701c4f33576b44e2f308b0ec5a | 2026-08-12.3 | 3 | a9f69899-ee39-4900-b39a-a54d737f9614 | 2026-08-19T18:49:25.643063+00:00 | 2026-08-19T18:49:25.643738+00:00 |
|
关键决策与已实现方案
| 序号 | 决策主题 | 出现位置 | 根本原因 | 实施方案 | 开放/待办 |
|---|---|---|---|---|---|
| 1 | 串行 AT/D‑Bus 调用 | backend/src/dbus.rs、backend/src/serial.rs |
ofono 并发 AT 命令会返回 org.ofono.Error.InProgress |
引入全局锁 DBUS_LOCK 与 with_serial,所有 DBus/AT 调用走同一串行通道(超时 20 s) |
已实现,无待办 |
| 2 | iptables 规则自动清理 | backend/src/iptables.rs、backend/src/main.rs |
进程异常退出后残留 iptables 规则导致网络异常 | iptables_watchdog 启动后每 5 s 调用 flush_iptables(),在数据连接切换前强制刷新 |
已实现,无待办 |
| 3 | 端口冲突重试 | backend/src/main.rs |
端口被其他进程占用导致服务启动失败 | bind_with_retry() 在 30 s 内循环尝试绑定,失败则记录警告后继续 |
已实现,无待办 |
| 4 | OTA 包完整性校验 | scripts/pack-ota.sh、backend/src/ota.rs |
OTA 包可能缺文件、架构错误或校验和不匹配 | validate_ota_package() 检查文件、架构 (aarch64-unknown-linux-gnu)、版本递增、MD5/SHA‑256 对比;后端安装使用原子临时文件 + fsync 再 rename |
已实现,无待办 |
| 5 | SMS 去重与分片 TTL | backend/src/sms_listener.rs |
ofono 同时推送文本与 PDU 导致重复记录 | 10 s 去重窗口 + should_store 判断;多片 SMS 设置 5 min TTL 自动清理 |
已实现,无待办 |
| 6 | SIM 卡槽切换 UI 同步 | frontend/src/pages/DeviceInfo.tsx |
后端切换需时间,前端立即刷新会显示旧信息 | 在成功请求后 setTimeout(loadData, 2000) 延迟重新加载 |
已实现,无待办 |
| 7 | 敏感字段脱敏占位 | backend/src/config.rs、前端 Network.tsx、Frp.tsx |
为防泄漏在源码中屏蔽真实值 | 用 [REDACTED] 占位,提示需要安全存储 |
开放:实现 Vaultwarden 或加密文件存储 |
| 8 | UI 轮询频率可调 | frontend/src/components/Layout/TopBar.tsx |
默认 5 s 轮询对部分用户过于频繁 | setRefreshInterval 通过后端 api.setRefreshConfig 持久化,用户可在顶部菜单选择 1/3/5/10 s 或手动 |
已实现,无待办 |
| 9 | USB 热切换实验 | backend/src/usb_switch.rs、前端 Configuration.tsx |
需要在不重启的情况下切换 USB Gadget 模式 | switch_usb_mode_advanced 完成 UDC 停止、清理旧配置、写新描述、重新启用 UDC,并写入持久/临时模式文件 |
开放:增加文件锁、完善错误回滚 |
| 10 | FRPC 生命周期管理 | backend/src/state.rs |
自动启动可能导致未配置情况下启动 | 仅在 enabled && auto_start 为 true 时启动;提供 UI 配置、日志轮转 (512 KB) |
已实现,开放:日志轮转阈值可配置 |
| 11 | 全局 CORS 允许 * |
backend/src/main.rs |
开发阶段便捷跨域 | 设置 * 为允许源 |
开放:生产环境需限制来源 |
| 12 | AT 网关未鉴权 | backend/src/handlers.rs (/api/at) |
安全风险 | 暂未实现鉴权,仅记录为待办 | 开放 |
| 13 | HTTP 错误码统一 200 | backend/src/handlers.rs |
前端统一解析 JSON | 所有错误仍返回 200 OK,错误信息放在 ApiResponse 的 status 字段 |
开放:改为符合 REST 的状态码 |
| 14 | OTA 未签名 | scripts/pack-ota.sh |
防止篡改 | 当前不生成签名 | 开放:集成 GPG 或 SHA‑256 签名并在 ota.rs 验证 |
| 15 | 缺少单元测试 | 整体代码库 | 项目快速迭代导致测试被忽略 | 尚未编写任何 Rust 或前端测试 | 开放:添加 Jest、React‑Testing‑Library 与 Rust 测试套件 |
| 16 | UI 错误边界缺失 | frontend/src/main.tsx |
未捕获渲染异常会导致整页崩溃 | 暂无实现 | 开放:在根组件加入 ErrorBoundary |
| 17 | 缺少国际化 | 所有 UI 文本硬编码中文 | 仅面向中文用户 | 未使用 i18n 框架 | 开放:引入 react-i18next 并抽离字符串 |
| 18 | 大表未虚拟化 | Network.tsx 中的基站列表 |
列表可能非常长,性能下降 | 使用普通 MUI DataGrid(未开启虚拟化) |
开放:改为 react-window 或开启 DataGrid 虚拟滚动 |
以上表格记录了所有已知决策、实施细节以及当前开放/未完成的工作项,便于后续评审与排期。