Skip to content

Latest commit

 

History

History
171 lines (130 loc) · 13 KB

File metadata and controls

171 lines (130 loc) · 13 KB

変更ログ (LOG.md)

判断の経緯・破棄された案・方針転換を残す journal。運用ルールは CLAUDE.md を参照。

フォーマット: ## YYYY-MM-DD <一行サマリ> → 本文に 背景 / 決定 / 影響 を 1-2 行ずつ。 新しいエントリを上に追加する。1 エントリ 3-5 行を目安に、長文は docs/ 側に逃がす。


2026-05-29 /argus-narrate — PPTX/PDF をスライド要約読み上げ mp4 化

背景: argus-today/brief/risk の音声化が好評。PPTX/PDF も全文読み上げは間延びするが、 スライドごとに 2-3 文の要約読み上げ + スライド画像を組合せた mp4 なら「概観の skim」用途に有効。

決定:

  • scripts/build_slide_video.py を新設。各スライドについて (A) PPTX→python-pptx で本文+notes / PDF→pdftotext / PyMuPDF で抽出、(B) slide_ocr.ocr_slide_image でマルチモーダル OCR、両方を 併記して LLM に投げ「(A) 優先・(B) は補完」で要約。pm_tts.synth_chunk / concat_wavs を直接 使ってスライド粒度で WAV を作り、ffmpeg -loop 1 で静止画+音声→セグメント mp4、concat demuxer で 1 本に結合。
  • Slack エンドポイント /argus-narrate <filename.pptx|pdf>pm_qa_server.py に追加。 _run_narrate/argus-transcribe を雛形にしつつ排他制御は _narrate_lock で軽量に。 生成 mp4 は _post_argus_video (_post_argus_voice を mp4 用に派生) でチャンネルに投稿し、 voice_uploads.record_upload(kind="narrate") で履歴記録。:wastebasket: リアクションと /argus-delete スレッド一括削除は既存コードで自動的に対象になる。
  • OCR とテキスト抽出を併用したのは、画像 OCR 単独だと数式・表・小さい文字で誤認識が出るため。

影響: PPTX/PDF を Slack に上げて /argus-narrate slides.pptx を叩くと要約 mp4 がスレッドに 投稿される。Slack App 側で /argus-narrate の登録が必要。VOICEVOX エンジンが必須。


2026-05-29 argus 出力の音声化 (VOICEVOX) と削除 UX 整備

背景: /argus-today /argus-brief /argus-risk および議事録パイプラインの出力テキストを 通勤・移動中に聴き流したい、という要望。VOICEVOX エンジン (http://localhost:50021) はローカルで 稼働済み。素のテキストをそのまま合成すると(a) 数百チャンクで再生時間が延びる、(b) URL や記号が 不自然に読まれる、という問題。さらに「ephemeral と整合的に音声をどう届けるか」「削除手段は」も 個別に決める必要があった。

決定:

  • scripts/pm_tts.py を新規追加。VOICEVOX audio_querysynthesis をチャンク化して呼び出し、 wave で結合し ffmpeg で MP3 化。default speaker=74 (琴詠ニア) / speed=1.3。
  • LLM 要約モードを 3 つ実装: auto (見出し/番号付き) / minutes (## 決定事項・## 議事内容→### 単位・

    アクションアイテム) / priority (- **[優先度: 高/中/低]** 単位)。argus-today=auto, brief・risk=

    priority, 議事録=minutes をハンドラ側でハードコード。要約は cli_utils.call_argus_llm で 1 セクション あたり 2 文 / 120 字以内に圧縮。
  • 投稿先は当初 conversations_open で実行者 DM にしていたが、Slack の "App" セクションに隔離されて 視認性が悪いとの指摘で command.channel_id への chat に変更(テキストは ephemeral・mp3 はチャンネル 公開)。
  • 削除はスラッシュコマンドではスレッド thread_ts が取れないため :wastebasket: リアクション式に変更。 voice_uploads.db (新規・非暗号化) に file_id / message_ts / channel_id を記録し、 app.event("reaction_added") で本人投稿または記録済みメッセージのみを _delete_thread_files で 一括削除。bot メッセージ自体も chat_delete
  • VOICEVOX 利用規約遵守のため pm_tts.credit_line(speaker_id)/speakers API から動的解決し、 initial_comment に "音声合成に『VOICEVOX:話者名』を使用" を埋め込み。
  • Slack section block は先頭スペースを表示しないため、入れ子箇条書きが Canvas と差が出ていた。 _to_slack_mrkdwn を改修し - -  ◦ -    ▪ に NBSP+Unicode ブレットで階層化。

影響: argus 系コマンド・議事録投稿に音声 mp3 が併投され、Canvas と Slack の見え方が揃う。 pm_qa_server 再起動が必要。Bot Token Scopes に reactions:read 追加と Event Subscriptions の reaction_added 購読が前提。pm_from_recording.sh (ローカル CLI) は対象外で従来通り。各コマンドの 音声無効化用に ARGUS_TODAY_VOICE / ARGUS_BRIEF_VOICE / ARGUS_RISK_VOICE / MINUTES_VOICE 環境変数を用意。テスト用に scripts/pm_tts_test_upload.py を同梱。

2026-05-28 argus-today のチャンネル ID / ユーザー ID を表示名に解決

背景: /argus-today の出力でチャンネル ID (Cxxx) と Slack user_id (U0xxxxxxxxx) が そのまま露出していた。原因は 2 つ。(1) _build_channel_name_map() が argus_config.yaml の コメント行から # Cxxx 名前 を拾う旧仕様で、df27935 で機密削除されコメントが除去されて以降 0 件返していた。(2) slack_pipeline.py の users_info 失敗時に user_id を user_name にフォールバックしており、 slack.db 上で 99 user_id 中 55 件が user_name=user_id のまま。Argus 側で逆引きが効かない。

決定: argus_config.yaml に user_names: セクションを新設し正本とする(slack.db はフォールバック扱い)。 更新は新規 scripts/pm_users_sync.pyusers.list API を 1 回叩いて流し込む(既存値は --force なしで保護、 yaml の他セクションのコメント・順序はテキスト置換で温存)。cli_utilsresolve_user_names() / resolve_channel_names() を共通実装し、_build_channel_name_map() をコメント抽出から正規キー読み込みに 置き換え。_filter_mentions_for_user でメンション本文中の Cxxx / <#Cxxx> / <#Cxxx|name>#name に展開。## チャンネル: Cxxx 見出しも Cxxx (#name) 形式に変更し LLM プロンプト全体で生 ID を減らす。 別案として「slack_pipeline 側の users_info 失敗時に user_id をフォールバックしない」も検討したが、 取り込みパイプラインを壊すリスクと既存 55 件への対応にならないため不採用。

影響: 表示名は yaml で一元管理・手動修正が容易に。argus_agent と argus-today で channel_names の 読み出しが統一された。pm_qa_server 再起動で新コードが反映される。

2026-05-28 議事録 Stage 3 集約のフォールバック修正(途中結果の破棄を解消)

背景: 4ba721c で修正した /argus-investigate の「ステップ上限到達時に最後のツール結果が捨てられる」 バグと同種のものが recording/generate_minutes_local.py::_consensus_stage3 にあった。 embedding 失敗時に関数全体を return max(drafts, key=len) で抜けるため、決定事項側でエラーが 出ると AI 集約に進まず、AI 側でエラーが出ると既に合成した決定事項が捨てられる。LLM 集約失敗時も decisions_md="" で「(なし)」化され、投票通過済みクラスタの中間情報がすべて消えていた。

決定: フォールバックを 4 種類に分離する。embedding 失敗 → 最長ドラフトから当該セクションだけ 抜き出す(他方の集約は通常通り続行)。LLM 集約失敗 → 投票通過済みクラスタの代表 bullet/行で Markdown を直接組み立てる(LLM 不使用)。_extract_section() ヘルパーを追加。

影響: 議事録生成中に部分的な障害が起きても、可能な限り中間結果を保持して出力する。 ボツ案: 「失敗時に LLM をリトライ」は採らず(タイムアウト既に長く、二重に時間がかかる)。

2026-05-28 ドキュメント運用ルールを CLAUDE.md に集約、log.md → LOG.md にリネーム

背景: 運用ルールが PLAN.md / LOG.md の両方に重複していた。Claude が毎会話で参照するのは CLAUDE.md だけなので、ルールは一箇所に集約した方が一貫性を担保しやすい。また他リポジトリの慣例(README.md / LOG.md) に合わせて大文字統一。

決定: 運用ルールは CLAUDE.md の「ドキュメント運用ルール」セクションを正本とする。PLAN.md / LOG.md の冒頭は「運用ルールは CLAUDE.md を参照」の一行のみに簡素化。log.mdLOG.md にリネーム(git 追跡前の ためファイルシステム上の rename のみ)。

2026-05-28 CLAUDE.md スリム化 — ファイル構成セクション削除

背景: CLAUDE.md の「ファイル構成」セクション(80行強)は docs/architecture.md のスクリプト分類一覧と ほぼ重複。CLAUDE.md は毎会話のコンテキストに自動展開されるため、重複情報はトークン浪費になる。

決定: スクリプト一覧は CLAUDE.md から削除し、@docs/architecture.md のインクルードに任せる。 DB 役割は要約形に圧縮(詳細は pm-schema Skill 経由)。日付付きの DB 統合経緯(2026-05-17 / 05-18)も 削除し、log.md / git log 側で参照する形にした。

影響: CLAUDE.md は約 250 → 約 130 行に縮小。詳細な情報が必要な場合は Skill か docs/ 直接参照。

2026-05-28 PLAN.md を Argus から次の in-flight 計画に切り替え

背景: 旧 PLAN.md は 2026-04 時点の Argus(/pm-brief /pm-draft /pm-risk)実装計画で、 既に実装済み・コマンド名も /argus-* に変更されており、現状と乖離していた。

決定: PLAN.md は「進行中の計画のみ置く」という運用に統一。Argus 計画は完了扱いとして本 log に 1 エントリで残し、PLAN.md は次の候補(Phase 2 /pm-do 自動実行 / 日程調整 Agent / ナレッジ蒸留の品質改善) を保留中項目として整理する形に書き換える。

2026-05-28 ドキュメント運用ルールを 3 ファイルに分離

背景: CLAUDE.md に変更履歴・経緯を書き込んでいくとコンテキストが肥大化し S/N が下がる。 PLAN.md と CLAUDE.md の境界も曖昧になっていた。

決定:

  • CLAUDE.md — 現在のプロジェクト規約・禁止事項・ポインタ(変更頻度低、毎会話で自動展開)
  • PLAN.md — 進行中の実装計画のみ(完了したら log.md に圧縮して PLAN.md からは削除)
  • log.md — 完了した変更・方針転換・破棄された案(journal、新しいものを上)

影響: CLAUDE.md 冒頭に運用ルールを明記。今後 PLAN.md のエントリが完了したら本 log に 3-5 行で圧縮し、PLAN.md からは削除する運用に統一する。


過去の主要マイルストーン(要約)

git log で詳細は追えるが、判断の経緯として残す価値があるもの。

2026-04-16 Argus AI 実装完了(旧 PLAN.md)

  • /argus-brief /argus-draft /argus-riskpm_qa_server.py に統合(独立デーモンを立てない方針)。
  • LLM は当初 GLM-4.7-Flash(200k context)採用 → その後 Kimi-K2-Thinking、/argus-investigate は 2026-05-14 に gemma4 reasoning へ移行。長文コンテキスト処理は RiVault、軽量タスクはローカル gemma4 と棲み分け。
  • 詳細は docs/argus_system.md と関連 commit。

2026-05-17 PM DB を pm.db に一本化

  • pm-hpc.db / pm-pmo.db / pm-personal.db の分割を廃止。
  • 出典チャンネルは action_items.channel_id / decisions.channel_id 列で保持する設計に変更。
  • 分割は当初「組織別フィルタリングを楽にする」目的だったが、跨ぎ集計・Web UI 実装で 複数 DB スキャンが負担になり、列フィルタの方が筋が良いと判断。

2026-05-18 Slack DB / FTS5 インデックスを統合

  • data/{channel_id}.db 分割と data/qa_pm*.db 分割を廃止し、slack.dbqa_index.db に統合。
  • FTS5 は chunks + chunk_indexes(chunk_id, index_name) の junction で論理 index を表現。
  • 旧 DB は data/*.db.bak として保管。

2026-05-18 ナレッジ蒸留レイヤ(Pass 3)導入

  • BOX 本文・議事録・決定事項を意思決定単位に蒸留 → data/knowledge.db
  • Stage 1(gemma4 抽出)→ Stage 2(bge-m3 類似度 + Kimi 審査)の二段ゲートで重複・ノイズを抑制。
  • 採否ポリシーは docs/distill_policy.md、人手介入は pm_knowledge_edit.py / /argus-knowledge