Skip to content

Release v1.49.0 - #1056

Merged
hitalin merged 9 commits into
mainfrom
develop
Aug 12, 2026
Merged

hitalin merged 9 commits into
mainfrom
develop

Conversation

@hitalin

@hitalin hitalin commented Aug 12, 2026 •

Copy link
Copy Markdown
Collaborator

主な変更

編集履歴に「誰が・なぜ」が残るようになった (#1052)

これまで編集履歴は「いつ・何が」しか持たず、AI の編集と自分の手編集が同じ見た目で並んでいた。

  • 帰属 — スナップショットに権限の principal をそのまま記録する。履歴一覧で「自分 / AI / HEARTBEAT / プラグイン「〇〇」」を見分けられる
  • 理由 — write 系 capability の reason で受け、承認ダイアログに表示する。承認前に見せた文字列がそのまま履歴に残るので、見せていない理由が記録されることはない。本人の手編集はデバウンス自動保存で理由を書く機会が無いため付かない
  • 保持方針 — 古い順のリングをやめ、溢れたら「本人の手編集かつ理由なし」から先に落とす。AI の編集と理由付きが最後まで残る。本人の連続した自動保存は畳んで積まない
  • 履歴行は git のコミット履歴と同じ並び (固定幅のメタ列 → 可変長の理由が最右) にした

同梱アイテムを廃止して配布に一本化した (#746)

同梱アイテムは修正版を届ける手段がユーザーによる削除・再シードしかなく、「実装の変化に追従して育つ」性質と噛み合っていなかった。#969 で作者系 6 本を MisStore へ移した続きとして、残る skill 3 本 (notedeck-guide / notedeck-memo / self-profile) とプラグイン 1 本 (ai-actions) も配布へ移し、同梱をゼロにした。

  • 手元に残っている旧同梱アイテムは起動時に storeId 付きへ変換される。削除ではなく変換なので、本文やソースを書き換えていても壊れない。以降はストアから更新を受け取れる
  • 同梱シード機構ごと削除。更新はストアの更新検知 (misstore 配布アイテムの更新検知と更新適用 #1040) が担う
  • 管理カラムの出自分類から「ビルドイン」を撤去し、サイドロードとストア配布の 2 分類にした
  • テーマの既定値 (Mi Dark / Mi Light) だけは 0 個が成立しない (無いと画面を描画できない) ため本体が持ち続ける。配布物とは別概念なので「デフォルト」と呼び分けた

変更一覧

関連 PR (MisStore)

Closes #1052

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Edit history now records who made changes and why, with clearer timestamps and reasons.
    • Confirmation dialogs display the provided edit reason.
    • History retention and grouping have been improved, preserving important entries.
    • Skills, plugins, themes, styles, and widgets support edit attribution.
    • Previously bundled skills and plugins migrate to MisStore and can be managed like other installed items.
    • Built-in skills and plugins can now be removed.
  • Documentation

    • Updated distribution, security, and edit-history documentation.
  • Chores

    • Updated the application version to 1.49.0.

hitalin and others added 9 commits August 13, 2026 02:13
編集履歴は「いつ・何が」しか持たず、AI の編集と本人の手編集が同じ見た目で
並んでいた。帰属・理由・保持方針は同じスキーマ変更で入るのでまとめて入れる。

- 帰属はスナップショットに principal をそのまま格納する。確認ダイアログ・
  Spotlight・履歴で粒度が揃う。store の編集 mutator が optional 引数で受け、
  UI から直接の編集 (省略) は本人扱いになる
- 理由は write 系 capability の reason パラメータで受け、dispatcher が承認
  ダイアログへ注入する。承認前に見せた文字列がそのまま履歴に残る (承認後に
  再取得しない)。本人の手編集はデバウンスの自動保存で理由を書く機会が無いため
  付かない — 欄が無いエントリを前提に UI を組む
- 保持は古い順のリングをやめて優先度付きにする。溢れたら「本人の手編集かつ
  理由なし」から先に落とし、AI・プラグインの編集と理由付きを残す。全件が保護
  対象なら最古から落とす
- 本人の連続した自動保存は畳んで積まない。スナップショットは「その編集の直前
  の状態」なので、連続保存では後続の push を捨てるのが正しい向きになる。AI の
  編集は 1 回ごとに理由が付くため畳まない

MisStore の再インストール経路は dispatcher を通らず principal を取れないため、
帰属を渡していない (記録なしのまま)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
理由をアイコンの有無でしか示しておらず、一覧を眺めるだけでは「AI が何のために
触ったか」が拾えなかった。行の主役を理由 (subject 相当) にして左に置き、帰属と
時刻を右のメタ列に寄せる。

- 理由は可変幅で省略表示。全文は選択時に diff の上へ出す (従来どおり)
- 理由が付くのは AI の編集だけなので、本人の手編集では列が空のまま残る。
  空欄を埋めるためのダミーは置かない
- 時刻は相対表記をやめて絶対時刻に統一する。tooltip に逃がさないので、
  タッチ環境でも補足情報に到達できる (#975)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
理由を左に置いたため、帰属ラベルの長さ (「自分」/「HEARTBEAT」/
「プラグイン「〇〇」」) の差がそのまま右の列のガタつきになっていた。

tig (line-number → id → date → author → commit-title)、lazygit、gitui の
いずれも固定幅のメタ列を左に並べ、可変長の subject を最右に置いている。
author はどれも固定幅で切り詰める。同じ並びに直す。

- 時刻・帰属を固定幅にし、理由を最右の可変列にする
- 帰属は 8em で切る。「プラグイン「〇〇」」は伸びるので、全文表示より
  縦の整列を優先する
- 「直前」タグは可変列の手前に残す。tig の refs や lazygit の tags と同じく、
  ズレを可変列の内側に閉じ込める

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
このスキルは HEARTBEAT 経由で無人のまま自分の本文を書き換える。編集履歴に
理由を残せるようになったので、何を根拠に更新したかを reason に書かせる。
省くと、本人の知らないうちに自己像が変わったように見える。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
同梱アイテムは修正版を届ける手段がユーザーによる削除・再シードしかなく、
「実装の変化に追従して育つ」性質と噛み合っていなかった。#969 で作者系 6 本を
MisStore へ移した続きとして、残る skill 3 本とプラグイン 1 本も配布に移す。
これで更新はストアの更新検知 (#1040) が担い、同期機構を新たに作る必要が無い。

- notedeck-guide / notedeck-memo / self-profile を STORE_MOVED_SKILL_IDS に追加。
  手元の旧同梱版は storeId 付きへ変換される (削除ではなく変換なので、本文を
  書き換えていても壊れない)
- プラグインにも同じ移行を用意する (storeMovedPlugins)。installId は履歴や設定の
  参照先なので変えず、storeId を足すだけにする
- 同梱シード機構 (planBuiltInSeed / seedMissingBuiltIns / syncBuiltInsMetadata)、
  テンプレ読込、seed 済み id の localStorage キーを削除
- 管理カラムの出自分類から「ビルドイン」を撤去し、サイドロードとストア配布の
  2 分類にする。skill / plugin / query の 3 種別すべてで実体が無くなったため
- skills.uninstall の builtIn 削除ガードを外す。同梱がゼロで発動しえず、不可逆
  操作の保護は確認ダイアログが担う

builtIn フラグは移行判定にだけ残る (新しく true になる経路は無い)。テーマの
DARK_BASE / LIGHT_BASE は配布物ではなく描画の土台なので対象外 (#1046 の
フォールバック先)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
同梱の配布物は全廃したが、テーマだけは 0 個が成立しない。skill / plugin /
query / widget は無ければ何も起きないだけなのに対し、テーマが無いと画面を
描画できず、ストアから取得するまでの間を埋めるものが要る。

同梱をやめた「ビルドイン」と同じ語のままだと、実体 (削除も編集もできない
既定値) と食い違う。呼び分けて、なぜテーマだけ残るのかをコードとドキュメント
両方に残す。

スキルカラムに残っていた未使用の builtin セクションキーも落とす。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions github-actions Bot added 📖Doc Documentation related issue/PR rust Pull requests that update rust code javascript Pull requests that update javascript code labels Aug 12, 2026
@github-actions

Copy link
Copy Markdown

API surface diff

外部アプリ向け API 面 (src-tauri/openapi.json / src/bindings.ts) が変更されています。
互換性への影響 (#709) をレビューしてください。

src-tauri/openapi.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Full diff
diff --git a/src-tauri/openapi.json b/src-tauri/openapi.json
index 2e236d6..3f41c7d 100644
--- a/src-tauri/openapi.json
+++ b/src-tauri/openapi.json
@@ -6,7 +6,7 @@
     "license": {
       "name": "MIT"
     },
-    "version": "1.48.0"
+    "version": "1.49.0"
   },
   "paths": {
     "/api": {

@hitalin hitalin self-assigned this Aug 12, 2026
@hitalin
hitalin merged commit 85ffcbf into main Aug 12, 2026
20 of 22 checks passed
@coderabbitai

coderabbitai Bot commented Aug 12, 2026 •

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 56b97873-0164-410a-9ee7-91f14ccf8014

📥 Commits

Reviewing files that changed from the base of the PR and between 8e314a5 and d488048.

⛔ Files ignored due to path filters (1)
  • src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (53)
  • DEVELOPMENT.md
  • ROADMAP.md
  • SECURITY.md
  • SKILLS.md
  • package.json
  • src-tauri/Cargo.toml
  • src-tauri/openapi.json
  • src-tauri/tauri.conf.json
  • src/aiscript/plugin-api.test.ts
  • src/capabilities/builtins/plugins.ts
  • src/capabilities/builtins/skills.ts
  • src/capabilities/builtins/styles.ts
  • src/capabilities/builtins/theme.ts
  • src/capabilities/builtins/widgets.ts
  • src/capabilities/dispatcher.test.ts
  • src/capabilities/dispatcher.ts
  • src/capabilities/editAttribution.test.ts
  • src/capabilities/editAttribution.ts
  • src/components/common/AppConfirm.vue
  • src/components/deck/DeckPluginManagerColumn.vue
  • src/components/deck/DeckQueryManagerColumn.vue
  • src/components/deck/DeckSkillColumn.vue
  • src/components/deck/DeckThemeManagerColumn.vue
  • src/components/deck/ThemeCard.vue
  • src/components/window/ColumnQueryEditorContent.vue
  • src/components/window/EditHistoryContent.vue
  • src/components/window/SkillEditContent.vue
  • src/defaults/plugins/ai-actions.is
  • src/defaults/plugins/ai-actions.meta.json5
  • src/defaults/skills/.gitkeep
  • src/defaults/skills/notedeck-guide.md
  • src/defaults/skills/notedeck-memo.md
  • src/defaults/skills/self-profile.md
  • src/services/builtInSeed.test.ts
  • src/services/builtInSeed.ts
  • src/services/editHistory.test.ts
  • src/services/editHistory.ts
  • src/services/storeMovedPlugins.test.ts
  • src/services/storeMovedPlugins.ts
  • src/services/storeMovedSkills.test.ts
  • src/services/storeMovedSkills.ts
  • src/stores/columnQueries.ts
  • src/stores/confirm.ts
  • src/stores/plugins.test.ts
  • src/stores/plugins.ts
  • src/stores/skills.test.ts
  • src/stores/skills.ts
  • src/stores/skillsFileSync.test.ts
  • src/stores/theme.ts
  • src/stores/widgets.ts
  • src/utils/historyFs.test.ts
  • src/utils/historyFs.ts
  • src/utils/storage.ts

📝 Walkthrough

Walkthrough

This release adds edit attribution and reasons to history, changes coalescing and retention, removes bundled skill and plugin seeding, migrates moved assets to MisStore, updates built-in classifications, and removes built-in skill deletion guards.

Changes

Edit history and capability attribution

Layer / File(s) Summary
History attribution, retention, and display
src/services/editHistory.ts, src/utils/historyFs.ts, src/stores/*, src/components/window/EditHistoryContent.vue
History stores principals and reasons, coalesces consecutive edits, evicts lower-priority entries first, and displays actor and reason data.
Capability reason and confirmation flow
src/capabilities/*, src/stores/confirm.ts, src/components/common/AppConfirm.vue
Write capabilities accept reason, confirmation dialogs display trimmed reasons, and stores receive derived attribution.
MisStore migration and built-in removal
src/services/storeMoved*.ts, src/stores/plugins.ts, src/stores/skills.ts, src/components/deck/*, SKILLS.md
Bundled assets migrate to MisStore records. Seeding and built-in classifications are removed. Installed skills can be uninstalled.
Release metadata and documentation
DEVELOPMENT.md, ROADMAP.md, SECURITY.md, package.json, src-tauri/*
Documentation describes the new history and distribution behavior. Version metadata changes to 1.49.0.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Capability
  participant Dispatcher
  participant Confirmation
  participant Store
  participant History
  Capability->>Dispatcher: Submit edit with reason
  Dispatcher->>Confirmation: Show trimmed reason
  Confirmation->>Store: Approve edit
  Store->>History: Record attribution and reason
  History->>History: Coalesce and evict snapshots
Loading

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📖Doc Documentation related issue/PR javascript Pull requests that update javascript code rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 編集履歴に「誰が・なぜ」を残す — 帰属・理由・保持方針

1 participant