目的
トピックを一覧から消せるようにする。今は増える一方で、減らす手段が無い。
観測
2026-08-27、Master が注釈付きのスクリーンショットで要望。左のトピック一覧の行を指して「ここに削除ボタン」。
前提
2026-08-27 に main(e698ab4)で確認。
トピックの行は #history .topic で、その中に押せる .pick(styles.css:561)がある。ボタンを足す場所はこの行の中。
一トピックは logs/main/{topic_id}.jsonl(投稿)と logs/main/index.json の一エントリ(名前・作成時刻・{account_id: session_uuid})の二つで出来ている。消すとは、この二つをどう扱うかの話になる。
索引に無い .jsonl は read_index が拾い直す。索引のエントリだけを消してもファイルが残っていれば、次の読み出しで復活する。
#117 の空タイトル行(索引にあってファイルが無いトピック)は、現在どの経路でも消せない。この issue はその状態を変えない (決定5)。
この行は当初「削除ボタンがその手動の逃げ道にもなる」と書かれていた。決定5がそれを否定したにもかかわらず前提の側が直されず、本文が同じ行について食い違ったまま実装へ渡った。実装 AI が発見し、決定を優先して正しく実装している。書き落としたのは親であり、記録として残す。
制約
削除は取り消せない。rules/model/subtractive-structural-beauty.md の削除判断でいう、ローカルの意味のある状態にあたる(git に載っていない)。確認の一段は要る。
セッション id を消すと、そのトピックは二度と再開できない。これは受け入れた上での決定1である。
決定
2026-08-27 に Master が判断。
ファイルも索引も消す。 logs/main/{topic_id}.jsonl と index.json のエントリの両方。索引だけを消す形は取らない(前提に書いたとおり、次の読み出しで復活するため)。
確認ダイアログを出す。 二度押しや猶予ではなく、明示のダイアログ。既存の #end-dialog / #quit-dialog の作法に合わせる。
セッションが走っているトピックも消せる。 走っていることを理由に拒まない。
消すときは走っている CLI プロセスを止める。 席に残さない。トピックが消えれば戻り道も消えるため、走らせたままにすると、どのトピックにも属さないセッションが残る。
空タイトルの行(bug(history): a session-only topic leaves an index entry with no posts file #117 )には削除ボタンを出さない。 一覧に出る行すべてにボタンを付ける形は取らない。
決定1から導かれること
消えたものは戻らない。 ログは git に載っておらず、他所に写しも無い。rules/model/subtractive-structural-beauty.md の削除判断でいう「ローカルの非 git な意味のある状態」にあたり、復旧コストは高い側に立つ。したがって確認の一段は任意ではなく必須 になる。その形は未決。
セッション id も一緒に消える。 「ログは残してセッションだけ捨てる」形は選択肢から外れた。トピックを消すとは、その会話と、そこに居た参加者への戻り道を、同時に捨てるということ。
決定4から導かれること
確認ダイアログは、セッションが止まることを述べる 必要がある。走っているセッションを持つトピックを消す操作は、会話とプロセスの両方を落とす。ダイアログがログの削除だけを述べていると、止まったセッションが不意打ちになる。
AI 判断(Master はこれを一行で覆せる)
開いているトピックを消したら、新規トピックへ移る。 消した直後の状態は、起動直後の状態と同じもの — 部屋は空で、まだ索引に無いトピックに居る。アプリが既に持っている状態を使い回す。
「次のトピックへ移る」は取らない。頼んでいない会話が開くうえ、要らないものを続けて消しているとき、次も消したいトピックへ落ちる。「開いているものは消せない」も取らない。見ているから要らないと判断したのに、一度離れてから消せというのは順序が逆になる。
未決
なし。実装に入れる。
関連
feat(history): split the history into topics, resumable from the list #115 / feat(history): split the history into topics, resumable from the list (room_log, room.rs, session.rs, config.rs, sidecar, index.html, main.ts, styles.css, docs) #116 — トピック分割。この issue はその一覧に手を入れる。
bug(history): a session-only topic leaves an index entry with no posts file #117 — 索引に行があってファイルが無いトピック。決定5により、この issue の削除ボタンはその行に出ない。後始末の手段にはならず、bug(history): a session-only topic leaves an index entry with no posts file #117 が唯一の解決面のまま残る。
feat(ui): collapse either sidebar from a header toggle #118 — 同じ一覧まわりの UI 要望(サイドバーの開閉)。独立に出荷できる。
目的
トピックを一覧から消せるようにする。今は増える一方で、減らす手段が無い。
観測
2026-08-27、Master が注釈付きのスクリーンショットで要望。左のトピック一覧の行を指して「ここに削除ボタン」。
前提
2026-08-27 に
main(e698ab4)で確認。トピックの行は
#history .topicで、その中に押せる.pick(styles.css:561)がある。ボタンを足す場所はこの行の中。一トピックは
logs/main/{topic_id}.jsonl(投稿)とlogs/main/index.jsonの一エントリ(名前・作成時刻・{account_id: session_uuid})の二つで出来ている。消すとは、この二つをどう扱うかの話になる。索引に無い
.jsonlはread_indexが拾い直す。索引のエントリだけを消してもファイルが残っていれば、次の読み出しで復活する。#117の空タイトル行(索引にあってファイルが無いトピック)は、現在どの経路でも消せない。この issue はその状態を変えない(決定5)。この行は当初「削除ボタンがその手動の逃げ道にもなる」と書かれていた。決定5がそれを否定したにもかかわらず前提の側が直されず、本文が同じ行について食い違ったまま実装へ渡った。実装 AI が発見し、決定を優先して正しく実装している。書き落としたのは親であり、記録として残す。
制約
rules/model/subtractive-structural-beauty.mdの削除判断でいう、ローカルの意味のある状態にあたる(git に載っていない)。確認の一段は要る。決定
2026-08-27 に Master が判断。
ファイルも索引も消す。
logs/main/{topic_id}.jsonlとindex.jsonのエントリの両方。索引だけを消す形は取らない(前提に書いたとおり、次の読み出しで復活するため)。確認ダイアログを出す。 二度押しや猶予ではなく、明示のダイアログ。既存の
#end-dialog/#quit-dialogの作法に合わせる。セッションが走っているトピックも消せる。 走っていることを理由に拒まない。
消すときは走っている CLI プロセスを止める。 席に残さない。トピックが消えれば戻り道も消えるため、走らせたままにすると、どのトピックにも属さないセッションが残る。
空タイトルの行(bug(history): a session-only topic leaves an index entry with no posts file #117)には削除ボタンを出さない。 一覧に出る行すべてにボタンを付ける形は取らない。
決定1から導かれること
rules/model/subtractive-structural-beauty.mdの削除判断でいう「ローカルの非 git な意味のある状態」にあたり、復旧コストは高い側に立つ。したがって確認の一段は任意ではなく必須になる。その形は未決。決定4から導かれること
AI 判断(Master はこれを一行で覆せる)
「次のトピックへ移る」は取らない。頼んでいない会話が開くうえ、要らないものを続けて消しているとき、次も消したいトピックへ落ちる。「開いているものは消せない」も取らない。見ているから要らないと判断したのに、一度離れてから消せというのは順序が逆になる。
未決
なし。実装に入れる。
関連