8000 atme の最初の実装 by dominion525 · Pull Request #1 · dominion525/atme · GitHub
[go: up one dir, main page]

Skip to content

atme の最初の実装 - #1

Merged
dominion525 merged 74 commits into
mainfrom
initial-implementation
Nov 3, 2026
Merged

dominion525 merged 74 commits into
mainfrom
initial-implementation

Conversation

@dominion525
Copy link
Copy Markdown
Owner

Summary

  • 自分宛のメンションと DM(@here、@channel、ユーザーグループへのメンションを除く)を、メニューバーの一覧と通知で知らせる macOS のメニューバーアプリ
  • 既読は Slack の既読の位置で判断し、Slack で読むまで一覧に残す。複数のワークスペースをまとめて見られる
  • ワークスペースは、App Manifest で作った Slack App の user token をウインドウに貼り付けて追加する。token は Keychain にだけ保存する
  • 英語と日本語に加え、Slack が対応する 8 つの言語に訳した
  • Sparkle による自動アップデートと、公証した zip と appcast を作る script/release を用意した
  • README(英語・日本語)と MIT のライセンスを足した

🤖 Generated with Claude Code

dominion525 and others added 30 commits October 28, 2026 16:43
- cargo init でバイナリクレート atme を作成
- .gitignore に /target、tasks/、.DS_Store を追加

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- config.rs で ~/.config/atme/config.toml を読み、知らないキー・ワークスペース 0 件・名前の重複をエラーにする
- credentials.rs で security コマンドを使い、Keychain から token と cookie を読む
- エラー表示のため anyhow を追加

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- slack.rs に auth.test と search.messages(全ページ取得)のクライアントを追加
- token 方式は Authorization ヘッダ、session 方式はフォームの token と d cookie で送る(session 方式は実際の API で未確認)
- HTTP クライアントとして reqwest(blocking、form)、応答の解釈に serde_json を追加

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- atme fetch を追加し、<@自分> と to:me の検索結果から重複と自分の投稿を除いて取得する
- seen.json と比べて新着を出し、初回は記録だけ行う。直近 days 日より古い記録は捨てる
- 取得した一覧を cache.json に、ユーザー ID と表示名の対応を users.json に保存する(一時ファイルから rename)
- DM の相手と投稿者の表示名を users.info で引く
- ワークスペースが失敗しても残りを処理し、その分は前回のキャッシュを残して終了コード 1 で終わる
- 引数解析に clap、日付の計算に chrono を追加

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ~/.local/state/atme/ を 0700、seen.json・cache.json・users.json を 0600 で作る
- 既存のディレクトリも 0700 に設定し直す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- notify.rs を追加し、新着ごとに terminal-notifier でタイトル(ワークスペース / チャンネル)、投稿者、本文の冒頭を出し、クリックで permalink を開く
- 本文は Slack の記法(メンション、@here、チャンネル、リンク、エスケープ)を読める形に直し、1 行 100 文字までにする
- 新着が 5 件を超えたら、残りを「ほか N 件」の通知 1 つにまとめる
- terminal-notifier が無いときや失敗したときは stderr に出して、キャッシュの保存を続ける

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- atme list を追加し、cache.json の一覧をテキスト(1 件 3 行)か SwiftBar 形式(1 行目に件数、項目に href)で出す
- キャッシュが無いときは、テキストではエラー、SwiftBar では "@ ?" と案内を出す
- チャンネル名と本文の整形を display.rs に移し、通知と一覧で共有する
- ts から秒を取り出す処理を state.rs に移す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- script/bundle を追加し、リリースビルドから署名済みの atme.app(bundle ID com.dominion525.atme)を作る
- 署名は ATME_SIGN_IDENTITY の証明書、無ければ ad-hoc で行う
- サブコマンドなしで起動したとき(atme.app を open したとき)に通知の許可を求める
- UserNotifications を呼ぶため objc2、block2、objc2-foundation、objc2-user-notifications を追加

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- notify.rs で terminal-notifier の呼び出しをやめ、UNUserNotificationCenter に通知を登録する
- 通知の userInfo に permalink を入れる(クリックで開く処理は別途)
- atme.app の外から実行したときと、通知が許可されていないときは、stderr に案内を出して通知だけをやめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 投稿者と DM の相手に加え、本文中の <@id> にあるユーザーも users.info で表示名を引く

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- atme.app をサブコマンドなしで起動したとき、通知のクリックを受け取る delegate を登録して NSApplication を動かす
- クリックされた通知の userInfo から permalink を取り出し NSWorkspace で開く。permalink が無い・空のときは何もしない
- クリックが届かないまま 10 秒たったら終了する
- 通知の中身と userInfo を組み立てる処理を切り出し、permalink の取り出しと合わせてテストする
- atme.app の中で動いているかの判定を app.rs にまとめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- assets/icon.svg を追加(チャコールの背景に白い @、右上に赤い丸。@ はフォントに依存しないようパスにした)
- script/bundle で SVG から 16〜1024px の PNG を描き出し、atme.icns を作って atme.app に入れる
- rsvg-convert が無いときは、入れ方を案内して止まる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 同時に出すとバナーが 1 つにまとめられるので、通知のあいだに 1 秒の間隔をあける

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- atme.app をサブコマンドなしで起動するとメニューバーに常駐し、件数(@ N)とキャッシュの一覧をメニューに出す
- メニューの項目を選ぶと permalink を開き、「終了」で常駐をやめる
- メニューに並べる中身を menu.rs で作り、AppKit から切り離してテストする
- 通知のクリックは常駐しているプロセスが受け取る。10 秒で終了する処理をやめた
- atme list の SwiftBar 形式を消し、場所と時刻の整形を display.rs に移す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 起動直後・5 分ごと・「今すぐ取得」・スリープからの復帰で、別スレッドで取得し、終わったらメインスレッドでメニューを作り直す
- 取得中に届いた合図は 1 回にまとめる(scheduler.rs、取得と間隔を差し替えてテストする)
- 取得の処理を fetch_once に分け、CLI の atme fetch と常駐で共通にする
- 取得に失敗したワークスペースをメニューに出す
- メインスレッドへの受け渡しに dispatch2 を追加

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Slack の既読の位置(チャンネルは conversations.info、スレッドは conversations.replies の親の last_read)と比べて、既読になったものを一覧から外す
- 未読のものは、取得の範囲(直近 days 日)を過ぎても一覧に引き継ぐ。通知済みの記録も、一覧に残っている分は日数に関係なく残す
- 自分が subscribe していないスレッドの返信と、アーカイブ済みチャンネルのメッセージは一覧に入れない
- 既読の判定を read.rs に分け、既読の位置の取り方を差し替えてテストする
- キャッシュの項目に thread_ts を持たせる(permalink から読む)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- メニューか通知から開いたもの、「すべて既読にする」で消したものを dismissed.json に記録し、一覧と件数から外す
- 記録の書き込みはメインスレッドだけで行い、キャッシュから消えた分の記録はメニューを作り直すときに捨てる
- メニューに「すべて既読にする」を足す(一覧に 1 件以上あるときだけ)
- 記録の扱いを dismiss.rs に分けてテストする。permalink は文字列のまま取り出してキャッシュと突き合わせる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- メニューに「ログイン時に起動」のトグルを足し、SMAppService.mainApp で atme をログイン項目に登録・解除する(初めはオフ)
- 承認が要る状態のときは、選ぶと「システム設定」のログイン項目を開く
- 状態からメニューの表示と選んだときの動きを決める処理を login.rs に分けてテストする
- 切り替えに失敗したときは、メニューに理由を出す
- 未読の引き継ぎのテストの書き方を整形に合わせる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- メニューを設定ファイルの順にワークスペースごとに区切り、見出しの下に新着を字下げして並べる。0 件のワークスペースは「なし」と出す
- 見出し・通知のタイトル・atme list に、設定の name ではなく auth.test で取った Slack 上のワークスペース名を使う(取得前は設定の name)
- Slack 上のワークスペース名をキャッシュ(teams)に保存する
- メニューの材料を Inputs にまとめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 前回の取得が終わってから 30 秒経つまでは、合図を受けても待ってから取得する(待っているあいだの合図は 1 回にまとめる)
- 取得の状態(取得中・待っている・何もしていない)を取得のスレッドから知らせ、メニューの行を「取得中…」「まもなく取得」「今すぐ取得」に出し分ける
- 待ち時間と状態の移り変わりを、時間を差し替えてテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- メニューバーに文字ではなく「@」の絵(テンプレート画像)を出し、右に件数を出す(0 件なら絵だけ)
- 取得中は、絵を 30 度ずつ時計回りに回した 12 枚を 0.05 秒ごとに切り替え、取得が終わったら縦に戻る絵まで回して止める
- script/bundle で assets/menubar/idle.svg から、いつもの絵と回した 12 枚を作って atme.app に入れる
- 次の絵と止めどきを決める処理を関数に分けてテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 前回の取得から 30 秒たっていないあいだは「今すぐ取得(あと N 秒)」と出して押せなくし、押せるときに押せばすぐ取得する
- 自動の取得が待っているときは「取得待機中」と出す
- メニューを開く直前に中身を作り直し、残りの秒数をその時点の値にする
- 行の状態の決め方を関数に分けてテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- アプリのアイコンとメニューバーの絵の「@」を、Comfortaa Bold(SIL Open Font License 1.1)の字形のパスに差し替える
- assets/README.md に、「@」の出どころと著作権の表示、作り直し方を書く

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ブラウザの token と d cookie で API を呼ぶ session 方式を外す(auth.test が invalid_auth のまま確認できなかったため)
- 設定の auth と、session 方式の宛先にだけ使っていた domain を外し、[[workspace]] は name だけにする
- 認証情報を、値を伏せて表示する Token にまとめ、slack.com/api に Authorization ヘッダで送る

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- script/bundle で Sparkle 2.10.1 をダウンロードし、SHA256 を照らし合わせてから Contents/Frameworks に入れ、部品を 1 つずつ署名する
- 起動したときに Sparkle を読み込んで SPUStandardUpdaterController を作る(ビルド時にはリンクしないので、Sparkle の無いところでも動く)
- Sparkle を読み込めたときだけ、メニューに「アップデートを確認…」を出す
- appcast の置き場所が決まるまで、SUFeedURL は仮の URL にしておく

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- generate_keys --account atme で作った鍵の公開鍵を SUPublicEDKey に入れる(秘密鍵はキーチェーンにあり、リポジトリには入れない)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- script/release を追加し、Developer ID でのビルド、公証と staple、zip、generate_appcast による appcast の作成を順に行う
- 公証は NOTARY_KEYCHAIN_PROFILE(既定 notarytool)、更新の署名はキーチェーンの Sparkle の鍵(account: atme)を使う
- 未コミットの変更があるときと、公証が通らなかったときは止める

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SUFeedURL を https://atme.dominion525.com/appcast.xml にする(gh-pages を GitHub Pages で配信する、blip と同じ形)
- ログイン時の起動に使う SMAppService が macOS 13 以降なので、LSMinimumSystemVersion を 13.0 にする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 取得の失敗の行のワークスペース名を、見出しと同じく Slack 上の名前にする(まだ取得できていなければ設定の name)
- すべてのワークスペースで失敗したときは、取得時刻を前回のまま残す
- 1 度も取得に成功していないときは、取得時刻の代わりに「まだ取得できていません」と出す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- src/l10n.rs を追加し、NSBundle の localizedStringForKey で訳を引く。キーは英語の文言そのもので、訳が無いときは英語のまま出る
- resources/ja.lproj/Localizable.strings を追加し、script/bundle で .app にコピーする
- Info.plist に CFBundleDevelopmentRegion(en)と CFBundleLocalizations(en、ja)を書く。Sparkle の画面もこれで日本語になる
- メニューの「終了」と「アップデートを確認…」を、この仕組みで引く
- 使うキーがすべて ja.lproj にあることをテストで確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dominion525 and others added 28 commits November 2, 2026 09:08
- Client の API の URL の頭を外から渡せるようにする(ふだんは https://slack.com/api のまま)
- 開発用の依存に mockito を足し、auth.test、search.messages のページ送り、users.info、既読の位置の取得、Slack のエラー、HTTP のエラー、壊れた応答、つながらないときをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Config::load_from、add_workspace_at、remove_workspace_at を足し、HOME の下の置き場所を使う関数はこれらを呼ぶだけにする
- 設定ファイルが無いときに空として読む処理を read_text にまとめる
- 開発用の依存に tempfile を足し、設定ファイルの読み込み・追加・削除・壊れたファイルと、状態のファイルの読み書き・前の版の形・壊れたファイルをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 取得が触る外の世界(設定と状態の置き場所、API の URL、token の読み方、通知の出し方、基準の時刻)を Env にまとめ、fetch_once は Env::system() で fetch_with を呼ぶだけにする
- モックサーバーと一時的なフォルダで、新着の通知と保存、初めての取得、既読の判定、一部と全部の失敗、外したワークスペース、壊れた設定ファイルをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Env を src/env.rs に移し、Keychain への token の保存と削除も差し替えられるようにする
- テスト用の偽の外の世界(一時的なフォルダ、メモリの token の表、記録するだけの通知)を env::fake に用意し、取得のテストもこれを使う
- 追加と削除を Env を受ける add_with・remove_with に分け、確かめた token の保存、xoxp- 以外、name や team_id の重複、Slack に断られたとき、URL が無いとき、削除をテストする
- atme list が出す文を作る部分を output に分け、キャッシュが無いときと、キャッシュと表示名からの文をテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- メニューの項目、メインメニュー、削除の確認のシート、ワークスペースのウインドウの中身と並べ方、Esc のボタンを、入力を引数で受けて部品を返す関数として src/ui.rs に移す
- app.rs は状態を集めて ui.rs を呼ぶ形にする(動きは変えない)
- tests/appkit.rs を harness = false で足し、自前の main()(メインスレッド)で、メニューの項目の名前・押せるか・押し先、メインメニューのキー操作、確認のシートのボタン、ウインドウの一覧・入力の固定・赤い文・手順・部品の収まりをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 通知センターに頼むこと(許可の状態、1 件の通知、間を空ける)を Center にまとめ、macOS の通知センターは SystemCenter にする
- 許可を見て 1 件ずつ出し、失敗を集める deliver と、出してよい許可の状態を決める allows に分け、notify はそれを呼んでログに出すだけにする
- 偽の通知センターで、間を空けて 1 件ずつ出すこと、途中の失敗、許可が無いとき、許可の状態を読めないときをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Keychain の項目の読み・保存・削除を Keychain にまとめ、実際の Keychain は SystemKeychain にする
- account の名前、UTF-8 でない値、無いものを消すとき、エラーの文を扱う load・save・delete に分け、Token はそれを SystemKeychain で呼ぶだけにする
- 偽の Keychain で、保存と読み出し、置き換え、無いとき、UTF-8 でない値、削除、無いものの削除、利用を断られたときをテストし、account の名前を言い直すだけのテストは外す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 常駐の状態(取得の段階と時刻、失敗の行、絵の番号、ウインドウの状態の文、確認中か)と、出来事を受けて状態を更新し「するべきこと」を返す処理を、AppKit を使わない controller.rs に置く
- メニューの材料の読み込みと既読の記録の整理、項目や通知を押したときの記録、ウインドウのワークスペースの一覧、初めての起動の判断を、状態と設定の置き場所を受ける関数にする
- app.rs は AppKit の出来事を controller に渡し、返ってきたことを行うだけにする
- 出来事ごとの状態とするべきこと、追加と削除の流れ、既読の記録の足し方と整理をテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 検索の範囲から外れた前回からの未読が、Slack で読まれていれば消え、読まれていなければ残る(もう一度は通知しない)ことを、取得の流れのテストで確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 検索の結果の permalink からスレッドの親の ts を取り出して項目に入れることを、単体で確かめる
- スレッドの返信が、チャンネルではなくスレッドの既読で判定され、読まれたら消え、フォローしていないスレッドなら出ないことを、取得の流れのテストで確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 失敗する側の前回からの未読を通知済みの記録にも入れ、実際に起きる組み合わせにする
- 通知されたのが取得できたワークスペースの分だけで、失敗した側の持ち越しはもう一度は通知しないことを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 偽の通知が、渡されたワークスペース名の対応で作った題も記録するようにする
- まだ取得していないワークスペースの最初の通知でも、題が Slack 上の名前になることを、取得の流れのテストで確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- l10n.rs のソースから文言の定数を拾い、KEYS とちょうど一致すること、KEYS に重なりが無いことを確かめる(整形で改行が入る長い定数も拾う)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 通知済みの記録がまだ無い初めての取得でも、今ある未読を通知する(今までは初めての取得だけ通知を止めていた)
- 初めての取得、後から足したワークスペース、一度通知した未読を通知し直さないことを、取得の流れのテストで確かめる
- まとめの通知は新着ではない未読も含むので、「ほか N 件の新着があります」を「ほか N 件の未読があります」にする(日本語・中国語・韓国語)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 流れのテストのモックを作る関数が、作ったモックを返すようにし、users.info のモックをユーザーごとに返す
- 表示名を覚えている人には users.info を呼ばず、覚えていない人だけを 1 回ずつ問い合わせて保存することを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 外したワークスペースのコメントは一緒に消え、残したワークスペースのコメント(上の行と行の後ろ)とファイルの先頭のコメントは残ることを確かめる
- 足すときに、すべてのコメントが残ることを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 取得時刻の決め方の単体のテストは、取得の流れのテスト(全部失敗・一部失敗)と重なるので外す
- ログイン時の起動は、押すたびに反対の状態になることと、承認が要るときは登録し直さずにシステム設定を開くことを確かめる形にする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 手で書いたスコープの一覧を、atme が呼ぶ API と、それぞれが要るスコープの表(API_SCOPES)に置き換える
- slack.rs で実際に呼んでいる API が表とちょうど一致すること、表のスコープを集めたものが manifest のスコープとちょうど一致することを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 取得の段階の知らせのテストは、合図を取得が終わる前に送っておき、待ちの段階を必ず通る形にする
- 取得中の合図をまとめるテストは、1 回目の取得をテストが合図を送り終えるまで止め、時間に頼らずに「取得中に届いた」形を作る
- つながらないときのテストは、9 番のポートを決め打ちにせず、借りてすぐ返した空きのポートに向ける

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 応答が「削除」のボタンのものかを決める removal_confirmed と、⌘W・Esc で閉じるときの応答 REMOVAL_CANCEL を、ボタンの並びを決める removal_alert の隣(ui.rs)に置き、app.rs はそれを使う
- シートの実際のボタンから応答を求め、消すのは「削除」のボタンだけで、閉じるときの応答は「キャンセル」に当たることを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 架空の Slack で、指定した人の users.info を user_not_found にできるようにし、検索の結果に送り主のハンドルを付ける
- 表示名を引けない人がいても、取得は成功し、その人のメンションも残って通知され、名前はハンドルで出ることを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anth
10BC8
ropic.com>
- 通知の 1 つ 1 つに知らせる未読を持たせ(まとめの通知は個別に出さなかった残り)、notify は実際に知らせることができた未読を返す
- 取得は、知らせることができなかった新しい未読を通知済みの記録から外し、次の取得でもう一度知らせる(許可が無いときや CLI の atme fetch では記録しない)
- 知らせる未読の決め方、途中で 1 件失敗したとき、出せないあいだは記録せず出せるようになったら知らせることをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- auth.test のあとに search.messages が HTTP 500 を返す形で、失敗の行に名前と理由が出ること、前回の未読・ワークスペース名・team_id・取得時刻が残ること、通知し直さないことを確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 回転中の絵・いつもの絵・文字だけの表示と、件数の文を決める icon を controller.rs に置き、app.rs はその結果を部品に入れるだけにする
- 取得中は回る絵と件数を出すこと、絵を読めないときは「@」に件数を続けることをテストする

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 段階の知らせのテストは、待ちの長さを 10 秒にし、待ちの段階が知らされるところまでを確かめる(待ったあとに取得し直すことは別のテストで確かめる)。送り手を手放すと待ちの途中でも止まることも確かめる
- 取得中の合図をまとめるテストは、1 回目の取得を止めておく待ちの時間切れを外す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- つながらないときのテストは、借りてすぐ返した空きのポートではなく、だれも待ち受けられないポート 0 に向ける
- ログイン時の起動のテストは、テストの中の対応表を外し、オフで選ぶと登録、オンで選ぶと解除することをそのまま確かめる

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- cargo fmt で 17 ファイルの書式を揃える
- env.rs の差し替え口の型と、tests/appkit.rs のテストの一覧の型に名前を付ける
- controller.rs のテストで、State を作るときに値をまとめて入れる
- notify.rs で、String を String に変える要らない変換を外す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- macos-15 で cargo fmt --check、cargo clippy(警告をエラーにする)、cargo test を回す
- Rust の版は手元と同じ 1.93.0 に固定し、actions/checkout はコミットの SHA で固定する

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dominion525
dominion525 merged commit bfad031 into main Nov 3, 2026
1 check passed
@dominion525
dominion525 deleted the initial-implementation branch November 4, 2026 08:12
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

0