Skip to content

runtime errorの送信をLattice自身が持つ(ADR 0193、0.74.0) - #10

Merged
quolu merged 2 commits into
mainfrom
snowwhite/runtime-error-reporting
Oct 3, 2026
Merged

quolu merged 2 commits into
mainfrom
snowwhite/runtime-error-reporting

Conversation

@quolu

@quolu quolu commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator

何を変えるか

オーナーの裁定で、エラーを上げるのは各プロダクトの責務になった。これまで工場(dotagents)のreportが運んでいたLatticeのruntime error記録を、Lattice自身がBugHubの製品報告の受け口へ送る。受け口の契約はBugHubの持ち主(フラジャイル)が決めたもの。

既定では通信しない

送るのは、次の2つがそろった端末だけ。どちらかが欠ければnetworkへ触れない。

  1. 端末で lattice runtime-errors reporting enable --json を打った(設定は ~/.config/lattice/runtime-error-reporting.json)。
  2. BugHubの持ち主が合鍵のfile(~/.config/bughub/product-credentials/lattice.json)を置いた。

設定を変えていない端末の動きは今までと同じ。

中身

  • src/runtime-error-reporting.mjs: 合鍵の読み取り(本人所有・0600・symlinkでない形だけ)、署名、本文、送信、受領の確認、時機の制限。
  • 秘密は通信に載せない。送るバイト列と時刻へのHMAC-SHA256署名だけを付ける。
  • 受領済み(storeのack)にするのは、200・accepted: true・report_id 一致・応答の署名一致がそろった時だけ。そろわなければ未受領のまま残し、後から送り直す。
  • 送る時機: 故障を記録した直後と、以後のCLI実行(hooks を除く)の終わりに、切り離した子processで送る。CLIの応答は待たせない。1分に1回まで、同じ中身の送り直しは1時間に1回まで。
  • 送信を有効にした端末では、工場の設定が無くても収集が有効になる。
  • Windowsは収集に対応しないので、送信も unsupported と答える。
  • 製品試験の環境は LATTICE_RUNTIME_ERROR_REPORTING=0 を持つ。CIのrunnerは利用者の本物のHOMEで走るので、試験がその端末の設定を拾って送らないようにする。

試験

test/runtime-error-reporting.test.mjs(手元のHTTP serverを受け口の代わりにする)

  • 署名と応答の署名が、BugHubの契約の試験値と一致する。
  • 送信を有効にしていない端末と、合鍵の無い端末は、受け口へ1回も接続しない。
  • 署名の合わない200・別の report_id・accepted: false・5xx・時間切れでは、ackが進まない。
  • 送信を有効にした端末で故障を1件起こすと、CLIが返った後に子processが届け、ackが進む。

手元のroot側の試験: 1950件中1914成功、0失敗(36はOS限定のskip)。

公開

公開と端末への適用は、オーナーへ伺ってから行う。BugHub側の受け口と合鍵の配置が入るまで、どの端末からも送らない。

🤖 Generated with Claude Code

quolu and others added 2 commits October 3, 2026 08:26
オーナーの裁定で、エラーを上げるのは各プロダクトの責務になった。これまで工場(dotagents)のreportが
運んでいたLatticeのruntime error記録を、Lattice自身がBugHubの製品報告の受け口へ送る。

- 既定では通信しない。`runtime-errors reporting enable` を打ち、BugHubの持ち主が合鍵のfileを置いた
  端末だけが送る。どちらかが欠ければnetworkへ触れない。dotagentsの設定は送信の判断に使わない。
- 合鍵のfileは本人所有・0600・symlinkでない形だけを使う。秘密は通信に載せず、送るバイト列と時刻への
  HMAC-SHA256署名を付ける。
- 受領済み(storeのack)にするのは、200・accepted・report_id一致・応答の署名一致がそろった時だけ。
  そろわなければ未受領のまま残し、後から新しいreport_idでその時点の累計を送り直す。
- 送る時機: 故障を記録した直後と、以後のCLI実行(hooksを除く)の終わりに、切り離した子processで送る。
  1分に1回まで、同じ中身の送り直しは1時間に1回まで。
- 送信を有効にした端末では、工場の設定が無くても収集が有効になる。
- 製品試験の環境は `LATTICE_RUNTIME_ERROR_REPORTING=0` を持つ(runnerは利用者の本物のHOMEで走る)。

署名と応答の署名は、BugHubの契約の試験値と一致する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@quolu
quolu merged commit 0fc5eba into main Oct 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant