merge: integrate remote learning module safely
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled

This commit is contained in:
brother7 committed 2026-08-17 01:05:49 +08:00
commit f7171a471a
125 files changed
+11451 -12132

No files matched your search

+10 -1
View File
@@ -13,6 +13,7 @@
- 客户端预检是可绕过的 UX fail-fast,不上传可信 receipt,也不声称具备生产 opaque-origin parity。服务端把源码、构建归档和 contract 当作不可信字节,独立重算、校验并固化不可变 Release;人工审核仍是不可绕过发布门禁。未来若要求 runtime 强门禁,必须由可信 verifier 绑定精确构建产物。
- 发布安全边界由 Electron Main 持有,Renderer 不接触账号 Token、ZIP、幂等键和本地绝对路径。
- 发布 Host API 必须在读取凭据、查询项目和打包前校验 Renderer capability;仅持有 Host token/base 的非 UI 调用方不得发起发布。
- 当前 Works Project 契约没有可验证的 metadata revision/ETag、draft-only 条件写或封面删除/原子绑定能力。首次发布只允许在 project create 中原子保存文字资料并暂不上传封面;已有 draft/published 只提交新版本并沿用平台资料与封面。404→create 409 等状态竞态必须固定失败并要求重新确认,不得上传孤立封面、无条件 PATCH 或静默丢弃表单资料。
- 客户端只持久化服务端已接受的 submission binding v2。旧 `submitted` 绑定必须保留;旧 `armed`、`waiting_for_package`、`waiting_for_login`、`uploading`、`failed` 必须迁移为可理解的 `legacy_retired`,不得恢复后台任务。
- 云端上传成功但本机 submission binding 保存失败时,提交仍视为成功;客户端显示固定、无本地路径的告警并继续轮询服务端校验与 Release 固化状态,避免诱导重复提交。
- 旧客户端缺少 source+built+contract 新协议,或服务端仍存在旧 sandbox/browser 任务时,必须提示升级客户端并重新构建提交;不得把它们伪装为新版瞬时故障。新版合同校验后的 `BUILD_STALE`、归档存储或 ReleaseStore 瞬时失败由运营在“构建异常”中重试。
@@ -34,6 +35,13 @@
- Prompt Museum 只展示服务端审核并带稳定作者、来源、许可证/署名和素材授权信息的内容;客户端不内置数据集、不推断缺失版权、不提供投稿/点赞/评论/收藏/关注/排行,也不自动发送或生成选中的 Prompt。
- Prompt Museum Renderer 只能通过 Main-owned 固定 GET 路由读取列表和详情。Works Token 不得进入 Renderer;列表查询只允许搜索、使用场景、风格、主体、语言、模型、游标和限制字段。需要受保护图片时必须新增 Main-owned 媒体代理,不能把 access token、内部路径或用户隐私放进图片 URL。
- 产品界面当前只支持中文;系统语言与历史持久设置中的其他值必须归一为 `zh`,不得保留不可达的伪语言选择。
- Learning 是已启用顶层模块。课程目录、生成、进度、下载、Agent、ASR 与课堂 runtime 的 Works 访问必须由 Electron Main 持有;Renderer 不得获得 Works Token、Provider/模型配置、归档路径或任意上游代理能力。
- 有材料的课程生成需求最多 4,000 字,最多接受 5 个文件,单个不超过 50 MiB、总计不超过 150 MiB;Main 必须在取 Token/发请求前严格投影外层对象、布尔选项、材料 id/name/MIME/size/lastModified/order/bytes 并拒绝重复或不连续顺序。材料字节不持久化到 Renderer 状态;无材料请求使用有界 JSON,所有生成控制路径和身份必须使用受限格式。
- Learning 本地生成任务、课程库、player registration 与 IPC 生命周期必须绑定 Electron Main 从认证用户派生的不透明账号分区;刷新只能保留原账号 binding,账号切换、注销、epoch 变化或卸载后必须拒绝旧异步结果、runtime 事件与资源访问。Renderer 持久化键不得使用 Token。
- 课程包最大 512 MiB,必须按服务端声明字节数和 SHA-256 完整下载并原子安装,播放前重新校验;下载只允许 HTTP(S)、无 userinfo、同 Works origin 的最多 5 次重定向,资源请求不得携带 Works Bearer。ZIP entry 数量、单项/总解压大小、压缩比、路径、JSON 深度/节点、模块 id/hash、场景数量和媒体引用必须保持边界。课程媒体仅允许与声明 MIME 精确匹配的 PNG/GIF/JPEG/WebP、MP3/M4A/AAC/WAV/OGG、MP4/WebM、WOFF/WOFF2/TTF/OTF;HTML/SVG/XML/脚本/PDF、未知/双扩展、控制字符和 MIME 不匹配必须 fail closed。大课模块属于同一 aggregate,不得把模块自报身份提升为独立课程权益。
- Learning player 只向当前账号注册并提供已验证课程资源;账号变化必须关闭/轮换 server 和 HTTP URL/cookie nonce。所有 course asset 响应必须使用被动 MIME、`nosniff`、sandbox CSP、same-origin CORP 和 no-store。iframe bridge 必须校验精确 loopback origin 与 source、只信任初始 player 文档并在二次 load 后永久关闭;`postMessage` 不得使用 `*`。只有显式 `readClassroom` 可以注册资源;Agent/runtime 在任何解析前先验证调用前既存 active registration,再用无副作用 resolver 反查当前账号已安装、复验的 aggregate/模块,课程内容不能靠请求自身注册或跨账号复用 URL/cookie。
- OpenMAIC production Stage 不从相邻源码或未验证本机构建目录回退。正式打包必须提供经过版本清单与 SHA-256 验证的 artifact;课堂只允许固定 Agent/ASR/PBL/评分能力,不能代理任意 URL 或方法。
- `game-engine` 不再是内置 OpenCode Skill。`planning-with-files` 在复杂任务中把 `task_plan.md`、`findings.md`、`progress.md` 写到当前项目根目录;不得写入 Skill 安装目录或用户目录。
- Robot V1 在现有 Binding 体验内扫描符合条件的开放 `Xiaozhi-*` 配网热点,并只连接用户明确选择的短效候选;该便利信号不得宣称为可信设备发现、自动下发家庭 Wi-Fi、自动认领或自动确认在线。
- Guided Hotspot Binding capability 由 Electron Main 持有且默认开启。精确 `NIANCODE_AI_HARDWARE_GUIDED_HOTSPOT_BINDING=0` 关闭引导;关闭或 capability 读取失败时保留现有六位码 Binding,Renderer 可以读取但不能覆盖它。
- Robot hotspot scan/connect 必须由 Electron Main 持有并在读取 Works 凭据前本地完成。Renderer 只能提交最近扫描生成的短效不透明 candidate ID,不能提交任意 SSID、BSSID、接口、profile 或命令。
@@ -56,7 +64,8 @@
- AI Canvas 双向 Gateway 与 Quote 任务恢复仍需真实账号执行一次生产确认 smoke,核对 WebSocket 不产生 `/runs/{run_id}` 轮询、任务按 Quote 出现在 Workspace 列表,并区分真正的 `agent_runtime_unavailable` worker 故障。
- Robot Guided Hotspot Binding default-on 发布仍需确认指定硬件/固件确实提供被审计的开放 Hotspot/Portal、部署端签发严格六位 ASCII 数字码且与 Works validator 的时效/消费语义一致,并完成 Windows 真机、签名 macOS x64/arm64 native worker/association 与真实设备端到端 smoke。
- Prompt Museum 客户端契约和页面完成不等于 Works Square 内容后台、审核数据或 CDN 已部署;上线前需以真实登录账号验证列表、详情、署名链接、分页、图片和 Prompt 回填。
- Learning 客户端集成不等于 Works 课程服务、权益、生成流水线、production Stage artifact 或签名安装包已验收;上线前需以真实账号和固定 artifact 完成 Windows/macOS 整链 smoke。
## Last Reviewed
2026-08-16
2026-08-17