Repository navigation
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
13 of 15 tasks
报告是用户发起的导出:同一份 BugReport 契约,邮件与收件箱仓库 issue 二选一。 不常驻上报、不自动建 issue、不收件端点。收件邮箱与收件仓库由发布配置注入, 不写死在本仓库里。 - contracts/bugReport/report.ts:形状、签名、主题、失败折叠与日志尾截断 - contracts/bugReport/redact.ts:家目录 / 沙箱路径 / 用户名 / 邮箱 / 凭据脱敏 - contracts/bugReport/mailto.ts:正文与 mailto 链接,编码后长度守卫,超限降级摘要 - contracts/bugReport/issue.ts:Markdown 正文、隐藏签名块与预填 issue 链接 - tests/bug-report.test.ts:32 个用例守住签名、校验、脱敏与两条通道
用户从社区弹窗点「报告问题」,看到主进程收集好的报告,再自己选邮件或 收件箱仓库 issue 发出去。不常驻上报、不自动建 issue。 - 主进程 diagnostics 模块:从日志判断上次会话是否异常结束(start 无 end), 收集失败行并折叠,出口统一脱敏;预览 / 导出 / 打开通道三条 IPC。 - 收件邮箱与收件仓库来自环境变量,不写死在仓库里;为空时界面不显示对应按钮。 - 渲染层:报告对话框展示版本、平台、上次会话与失败列表,日志尾默认不带, 备注可选;提供邮件、GitHub、复制、导出四个动作。 - 契约:投递形状、隐藏签名块、平台名补 macos / linux(开发机报告也要能落形)。 - 单测:契约 32 条、桌面侧 18 条、对话框 4 条。
邮件目的地可以是一个邮件列表:配置里另给显示名与订阅地址,正文页脚写明 投递去向与订阅方式,报告人想跟进才订阅。配置了托管代发服务时,对话框 显示「直接发送」,由主进程 POST 出去;没配就回到 mailto 与剪贴板。 - 契约:BugReportLetterOptions(列表名 / 订阅地址 / 长度上限)、 relay.ts(Web3Forms 与 Formspree 两种公开标识的请求形状,端点必须 https) - 主进程:bugReportSend 通道,15 秒超时,连不上 / 超时 / 非 2xx 一律折成 net/operation-failed;没配代发时拒绝而不是假装成功 - 渲染层:代发优先,其次 mailto;按钮与正文都跟着配置走 - ADR 0041:补决定 9 与代价(第三方中转、额度、境外可达性) - 单测:契约 38 条、桌面侧 20 条、对话框 4 条
代发服务在境外,连不上是常见结局。配了代发仍显示邮件按钮(降为次级), 失败时还有第二条路,不用只剩复制与导出。
客户端多一个代发 provider:eleckoi-relay。入口不需要密钥,整份已脱敏报告 进信封(schemaVersion + report + letter),由 Worker 校验、清洗、聚合后再 落 issue 或进每日摘要。Worker 回执(issue 编号)显示在对话框里。 - 契约:BUG_REPORT_RELAY_PROVIDERS 加 eleckoi-relay、信封形状与版本、 bugReportRelayReceipt(只认自有 Worker 的响应,托管表单服务不给回执) - 主进程:代发成功后解析回执并随结果返回;响应体原样交给纯函数判断 - ADR 0041:决定 10——双写、清洗三层、签名派生与去重、限流与保留期; 原「端点代建 issue」从否决表改为已采纳并限定 - 单测:契约 40 条、桌面侧 20 条、对话框 4 条
代发通道没有邮件客户端可看,勾了日志尾用户也看不到将发出什么。补一个可展开 的全文预览,和 ADR「发送前可预览可删改」对齐。
KuramiWan
force-pushed
the
feat/bug-report-contract
branch
from
October 28, 2026 08:24
889644f to
7335bc8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
新增 Bug 报告投递:契约、桌面端收集与三条投递通道
What changed(改了什么)
用户从社区弹窗点「报告问题」,看到主进程收集并已脱敏的报告,自己选一条通道送出:
mailto:拉起默认邮件客户端;正文可带邮件列表名与订阅地址,报告人想跟进才订阅。issues/new链接,正文第一行是隐藏签名块,供收件箱仓库的 workflow 按签名折叠。eleckoi-relayWorker 时显示「直接发送」;Worker 会回执(issue 编号)。两个不做的事,都写进了 ADR 0041:不常驻上报(不启动
crashReporter、不引入 Sentry/Bugsnag),不自动建 issue(客户端不带 token;Worker 中转那条是显式 opt-in,见 ADR 决定 10)。底层:
modules/diagnostics:从日志的session.started/session.ended配对判断上次会话是否异常结束(跨天、跨轮转文件),收集失败行(只认phase: 'failure'+ 字符串契约码),拼报告后出口即脱敏(家目录 / Android 沙箱 / POSIX / macOS 路径、用户名、邮箱、token=类参数)。packages/shared/src/contracts/bugReport/:形状与校验、脱敏、邮件正文与mailto:、issue Markdown 与隐藏签名块、代发请求(含自有 Worker 信封与回执解析)。Architecture route(架构归属)
host / modules / platform / i18ncontracts / foundationcontracts/desktopShell.ts)@eleckoi/dsh-runtime;本次未触碰diagnosticsPlugin注销自己的 IPC handler)check:error-contract0 处)Data and compatibility(数据与兼容)
{ saved: false },不写文件;收集失败 → 对话框显示错误,不发送schemaVersion,字段只增不改Verification(验证)
pnpm test:bug-report相关 3 个文件共 65 条用例(契约 40、桌面侧 20、对话框 5)bash gates.sh全绿(check:docs/check:architecture/check:plugin-types/check:plugin-docs/typecheck等 10 步)node scripts/check-error-contract.mjs:四条规则 0 处win-dev/checklists/bug-report.md,1–8 步通过(2026-10-27,dev 窗口889644f).bug-report-*类)已知与本改动无关的失败:
apps/web/tests/chat/chat-display-preview.test.jsx与apps/web/tests/mobile/mobile-settings.test.jsx各有 1 条在干净树上同样失败(已用git stash复跑确认)。Review scope(审查范围)
docs/adr/0041-bug-report-delivery.md、docs/adr/README.mdpackages/shared/src/contracts/bugReport/(report.ts/redact.ts/mailto.ts/issue.ts/relay.ts/delivery.ts)packages/shared/src/contracts/desktopShell.ts、logActions.tsapps/desktop/src/main/modules/diagnostics/apps/desktop/src/preload/preload.ts、apps/desktop/src/main/host/DesktopHost.tsapps/web/src/app/windows/shell/components/BugReportDialog.jsx、CommunityDialog.jsx、apps/web/src/app/windows/MainWindow.jsxpackages/shared/tests/bug-report.test.ts、apps/desktop/tests/bug-report-collection.test.ts、apps/web/tests/ui/bug-report-dialog.test.jsx特别希望被挑战的点:
details.what里可能出现角色名。