Skip to content

feat: ccreel のセッションを載せる拡張を、例として同梱する - #24

Merged
yktsnet merged 5 commits into
mainfrom
claude/07-example-sessions-plugin
Oct 23, 2026
Merged

yktsnet merged 5 commits into
mainfrom
claude/07-example-sessions-plugin

Conversation

@yktsnet

@yktsnet yktsnet commented Oct 23, 2026

Copy link
Copy Markdown
Owner

変更内容

  • examples/plugins/sessions.py を追加した。ccreel の list --json / show --json から Claude Code のセッションを読み、一覧(sessions/index.html)と本文のページを足す拡張の例である。本体のパッケージには入れず、利用者が codeview.toml の隣へコピーして使う
  • 元にした利用側の実装から CODEVIEW_LOCAL による無効化を外し、docstring に使い方と ccreel が要ることを足した
  • 設定の誤りは、本体が最初に呼ぶ css() の口で検証する。生成を始める前に error: で止めるため
  • tests/test_example_sessions.py を追加した。偽の ccreel と、Issue を返す小さな取り込み元をテストの中に置き、site フィクスチャで生成器を別プロセスで呼ぶ
  • README.md / README.en.md: 冒頭の特長リストに拡張の1行を足した。Extensions 節には「例: Claude Code のセッションを載せる」の小節を足し、設定例を載せた(Issue の指示より広いが、user の依頼で採った)
  • docs/guarantees.md に節 5 を足し、「About」の対象に例の拡張を足した。context/structure.md の構成の木に2ファイルを足した
  • 本体(codeview/)は変えていない

保証

保証 テスト(tests/test_example_sessions.py)
list の呼び出しと一覧、本文を show から書く test_list_and_session_pages, test_passes_config_dir_and_period, test_merges_config_dirs
応答の Markdown は生の HTML を出さずに描く / resume の行 test_reply_markdown_is_safe, test_list_and_session_pages
Issue(先頭の 0 を無視)とリポへのリンク、先が無ければリンクにしない test_links_to_issue_and_repo, test_unlinked_when_issue_or_repo_is_missing
show に失敗したセッションのページ test_unreadable_session_still_gets_a_page
ccreel が無い・list の失敗は警告して続ける test_build_survives_one_failing_config_dir, test_build_survives_missing_ccreel
トップの入口と件数、題は出さない test_top_menu_links_sessions_without_titles
設定の誤り test_rejects_bad_options
指紋は最新の更新時刻を every_hours の枠に丸める test_fingerprint_moves_only_across_windows, test_fingerprint_follows_every_hours
ページの使い回し・更新・Issue の状態・一覧から消えた分 test_second_build_reuses_unchanged_pages, test_session_page_side_has_no_counts, test_updated_session_is_rebuilt, test_issue_link_follows_issue_state, test_expired_sessions_leave_the_cache
href / src は相対パスで実在する test_links_are_relative_and_resolve

維持する保証(台帳 §1)は本体に触れないため、既存のテストがそのまま通る。

静的確認結果

  • nix develop -c pytest -q: 72 passed
  • 変更したファイル: README.en.md, README.md, context/structure.md, docs/guarantees.md, examples/plugins/sessions.py, tests/test_example_sessions.py, issues/done/07_example-sessions-plugin.md

確認者の判定

確認・保証 判定
nix develop -c pytest -q が通る(72 passed) 合
新しいテストは site から生成器を別プロセスで呼び、偽の ccreel を使う 合
list の呼び出し・新しい順・show から本文 合
発言と応答・safe に描く・resume の行 合
Issue とリポのリンク・無ければリンクにしない 合
show の失敗・ccreel が無い・list の失敗で止まらない 合
トップの入口と件数・題を出さない 合
未知のキーと型の誤りで error: を出し非0 合
fingerprint は最新の更新時刻を every_hours の枠に丸める 合
使い回し・作り直し・キャッシュの削除 合
href / src が相対で実在する先を指す 合
本体の台帳 §1 の維持 合
docs/guarantees.md の更新 合

## 変更内容
- `examples/plugins/sessions.py` を追加。ccreel の `list --json` / `show --json` から Claude Code のセッションを読み、一覧(`sessions/index.html`)と本文のページを足す拡張の例
- 利用側の実装から `CODEVIEW_LOCAL` による無効化を外し、docstring に写し方と ccreel が要ることを足した
- 設定の誤りは本体が最初に呼ぶ `css()` の口で検証し、生成を始める前に `error:` で止める
- `tests/test_example_sessions.py` を追加。偽の `ccreel` と、Issue を返す小さな取り込み元をテストの中に置き、`site` フィクスチャで生成器を別プロセスで呼ぶ
- README.md / README.en.md の特長リストに拡張の1行を足し、Extensions 節に例の小節(使い方と設定例)を足した
- docs/guarantees.md に節 5 を足し、「About」の対象に例の拡張を足した。context/structure.md の木に2ファイルを足した

## 保証
- list の呼び出しと一覧、本文を show から書く → tests/test_example_sessions.py: test_list_and_session_pages, test_passes_config_dir_and_period, test_merges_config_dirs
- 応答の Markdown は生の HTML を出さずに描く / resume の行 → test_reply_markdown_is_safe, test_list_and_session_pages
- Issue(先頭の 0 を無視)とリポへのリンク、無ければリンクにしない → test_links_to_issue_and_repo, test_unlinked_when_issue_or_repo_is_missing
- show に失敗したセッションのページ → test_unreadable_session_still_gets_a_page
- ccreel が無い・list の失敗は警告して続ける → test_build_survives_one_failing_config_dir, test_build_survives_missing_ccreel
- トップの入口と件数、題は出さない → test_top_menu_links_sessions_without_titles
- 設定の誤り → test_rejects_bad_options
- 指紋は every_hours の枠で動く → test_fingerprint_moves_only_across_windows
- ページの使い回し・更新・Issue の状態・一覧から消えた分 → test_second_build_reuses_unchanged_pages, test_updated_session_is_rebuilt, test_issue_link_follows_issue_state, test_expired_sessions_leave_the_cache
- href / src は相対パスで実在する → test_links_are_relative_and_resolve
- 維持する保証(台帳 §1 の拡張なしの出力・読み込めない拡張・相対リンク)は本体に触れないので既存テストのまま通る

## 静的確認結果
- `nix develop -c pytest -q`: 71 passed
- 本体(`codeview/`)への変更なし
- git diff --name-only --cached:
  README.en.md
  README.md
  context/structure.md
  docs/guarantees.md
  examples/plugins/sessions.py
  tests/test_example_sessions.py
## 変更内容
確認者の指摘を直した。`fingerprint()` のテストが、モジュールを直接読んで `_cache` を書き換えていたため、`site.fingerprint()` で別プロセスから呼ぶ形に替えた。セッションを2本にし、古い方が動いても最新を超えなければ変わらず、超えれば最新として拾うことを確かめる。`every_hours` を変えた枠も確かめる。

## 保証
- fingerprint は最新の更新時刻を every_hours の枠に丸める → tests/test_example_sessions.py: test_fingerprint_moves_only_across_windows, test_fingerprint_follows_every_hours

## 静的確認結果
- `nix develop -c pytest -q`: 全件通過
@yktsnet
yktsnet enabled auto-merge (squash) October 23, 2026 13:06
@yktsnet
yktsnet merged commit eab898c into main Oct 23, 2026
3 checks passed
@yktsnet
yktsnet deleted the claude/07-example-sessions-plugin branch October 23, 2026 13:08
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