Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
c38ac60
chore: checkpoint local Siftly setup
moemic Aug 14, 2026
02a5823
feat: add Obsidian archive pipeline
moemic Aug 14, 2026
0633ddd
fix: use X user id for bookmark imports
moemic Aug 14, 2026
33070df
feat: add category editing and deletion
moemic Aug 14, 2026
56f7cb2
fix: request and persist X Article content
moemic Aug 14, 2026
edf4240
fix: keep X Article repair available after token expiry
moemic Aug 15, 2026
03754fc
feat: add external link preview images
moemic Aug 15, 2026
c823c9a
fix: harden external link preview fallback
moemic Aug 15, 2026
0ba1f24
feat: consolidate Siftly archive and import improvements
moemic Aug 17, 2026
ad70530
feat: 定期インポートとAI分類の実行スクリプトを追加
moemic Sep 21, 2026
127a97f
Improve categorization retries and engine configuration
moemic Sep 23, 2026
97b2613
Track Siftly automation work and harden X import
moemic Sep 26, 2026
797ac7e
Persist scheduled X import pagination cursor
moemic Sep 26, 2026
b792162
Preserve deleted bookmarks during scheduled imports
moemic Sep 26, 2026
249d303
Stop LLM categorization retries on cancellation
moemic Sep 26, 2026
ecc9673
Keep categorization completion counts accurate
moemic Sep 26, 2026
affc333
Report scheduled task outcomes safely to Discord
moemic Sep 26, 2026
8cf0517
Verify scheduled task outcomes with fake HTTP
moemic Sep 26, 2026
45341ec
Redact Codex CLI failures from categorization logs
moemic Sep 26, 2026
a556b21
Support GPT-5.6 Luna categorization
moemic Sep 26, 2026
93a36e7
Verify OAuth categorization and harden local automation runtime
moemic Sep 26, 2026
de01b23
Record X quota verification blocker
moemic Sep 26, 2026
91d183a
Refresh Siftly quota gate status
moemic Sep 26, 2026
a97de8a
docs: record Discord notification verification
moemic Sep 26, 2026
960b118
docs: refresh Siftly verification ledger
moemic Sep 27, 2026
e96c116
docs: record Discord push test attempt
moemic Sep 27, 2026
193ba57
docs: recheck Siftly scheduled agents
moemic Sep 27, 2026
b8e8a6a
docs: record iPhone notification verification blocker
moemic Sep 27, 2026
c9134ab
docs: record fresh Siftly runtime verification
moemic Sep 27, 2026
f65607f
docs: record X portal access blocker
moemic Sep 27, 2026
8472e55
docs: record Siftly notification and quota status
moemic Oct 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .codex/plans/2026-08-16-category-thread-preview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# カテゴリ色・自己スレッド取得・外部リンク再読込 修正計画

作成日: 2026-08-16

## 目的

- 公式8カテゴリの色をSiftlyの初期値と既存データへ反映する。
- カテゴリ作成・編集画面で、選択した色の推奨用途を日本語・英語で表示する。
- OAuthによる手動インポート時に、ブックマークした先頭投稿から同一作者の自己スレッドを取得してDBへ保存し、AIタグ・カテゴリ分類へ渡す。
- YouTubeなどの外部リンク取得が一度失敗した後、ブラウザの24時間キャッシュで再試行不能になる問題を直す。

## 実装プラン表

| 段階 | 対象 | 実装内容 | 安全策・完了条件 |
|---|---|---|---|
| 1 | 外部リンクプレビュー | 失敗レスポンスを `no-store` にし、再読込時にYouTube oEmbed/OG画像取得を再試行できるようにする | 成功レスポンスの既存キャッシュは維持。502だけキャッシュされない回帰テストを追加 |
| 2 | 公式カテゴリ色 | `ai-resources=Violet`、`finance-crypto=Green`、`dev-tools=Cyan`、`design=Pink`、`funny-memes=Amber`、`productivity=Orange`、`news=Indigo`、`general=Slate` に統一する | 標準カテゴリの名前・説明などの利用者編集は上書きしない。既存の旧既定色だけを一度更新するデータmigrationを使う |
| 3 | 色選択UI | 色プリセットを「色値+日英の用途説明」にし、選択中の色について例(AI、開発、ニュース等)を表示する | 既存カテゴリで使う追加色も選択肢に残し、アクセシブルなtitle/aria-labelを付ける |
| 4 | OAuth自己スレッド取得 | ライブインポートの手動操作に「自己スレッドも取得」を追加し、公式X APIの `conversation_id` 検索をまとめて実行。同一作者かつ先頭から連結した返信だけを既存の `validatedThread` で確定し、既存 `ArchiveRecord.resultJson.thread` に保存する | 起動時には実行しない。検索ページ数・重複token・対象件数を制限し、第三者返信を除外。直近検索外の古い投稿は既存gallery-dlアーカイブ結果を保持し、取得不能を結果件数として画面に表示 |
| 5 | AIタグ・カテゴリ分類 | DBに保存済みの自己スレッド本文を、先頭投稿と区別した分類コンテキストとして既存categorizer/enrichmentへ渡す | プロンプトサイズを投稿ごと・全体で制限し、引用や第三者返信を学習材料へ混ぜない。スレッド未取得時は現行挙動を維持 |
| 6 | 検証・レビュー | 公開ルート/分類interfaceの回帰テスト、型検査、全テスト、production build、差分検査を実行する | 実DB・Obsidian Vaultは書き換えない。既存の未関連差分は変更・commitしない |

## 重要な制約

- X公式のRecent Searchは直近7日分が対象で、`conversation_id` によるスレッド取得が可能。古い投稿の完全取得はOAuthだけでは保証できないため、既存のgallery-dlアーカイブ結果がある場合はそれを再利用する。
- スレッド情報の保存先は新しいテーブルを増やさず、すでにスレッド保存に使われている `ArchiveRecord.resultJson.thread` を再利用する。
- ライブインポートは利用者がボタンを押したときだけ動き、Siftly起動直後にX同期を始めない。

## 主な回帰テスト

1. YouTube取得失敗の502は `Cache-Control: no-store` になる。
2. 公式8カテゴリのslugと色が指定値に一致し、既存の名前・説明は維持される。
3. OAuthインポートで、先頭→同一作者返信の連結だけがthreadとしてDB保存され、第三者返信は除外される。
4. 保存済みthread本文がAI分類入力へ入り、thread未取得bookmarkは従来どおり先頭本文だけを使う。
5. スレッド検索のページtoken重複・上限到達で無限取得しない。
14 changes: 14 additions & 0 deletions .codex/plans/2026-08-17-push-fork.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# フォークへの改修反映計画

| 手順 | 内容 |
|---|---|
| 1 | 現在のブランチ、リモート、未コミット差分、追跡対象を確認する |
| 2 | Siftlyの今回までの機能改修をまとめ、作業用ファイルや秘密情報を除外してコミットする |
| 3 | コミット内容を検査し、フォークの `origin` に `codex/obsidian-auto-archive` ブランチとしてプッシュする |
| 4 | リモート上のコミットと作業ツリーを確認して結果を報告する |

## 方針

- `origin`(`moemic/Siftly`)へプッシュし、元リポジトリの `upstream` へは送らない。
- `.env`、DB、ログ、`work/`、一時的な計画・添付ファイルはコミットしない。
- 既存のローカルコミットは保持し、未コミットの今回改修を同じブランチに追加する。
39 changes: 39 additions & 0 deletions .codex/plans/2026-09-21-siftly-scheduled-tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Siftly定期インポート・AI分類 計画

> 履歴資料。現在の完了/未完了と着手順は[2026-09-26作業台帳](2026-09-26-siftly-work-ledger.md)を参照。この文書にある相対`StartInterval`・睡眠時の説明・モデル名は当時の案で、現行の確定事項ではない。

## 目的

- X OAuthのライブインポートを3日ごとに実行する。
- 未処理ブックマークのAI分類を7日ごとに実行する。
- 各処理の成功・失敗結果をDiscord Webhookへ送る。

## 実施内容

1. 既存の `/api/import/x-oauth/fetch` と `/api/categorize` を呼び出す用途別ラッパーを追加する。
2. macOSのLaunchAgentを2つ登録する。初回起動時には実行せず、3日後・7日後から実行する。
3. OpenAI OAuthと `gpt-5.6-luna` はSiftlyの既存設定をそのまま使う。
4. X APIの月間上限エラーはDiscordへ通知し、上限回復後の次回実行で自動再試行する。
5. macOSのLaunchAgentではCodex CLIの実体パスを明示し、OAuth実行経路を安定させる。

## 検証

- シェル構文検査。
- plistの構文検査と `launchctl print` による実行形式確認。
- ネットワークへ書き込まないドライラン。
- X API上限が回復するまでは実際のインポートを手動実行しない。

## リスク

- Macが停止・ログアウト中の実行は遅延する。
- X API上限中はインポートが失敗するが、スケジュールは停止しない。
- AI処理はSiftly内のOpenAI OAuth設定とCodex CLIに依存する。

## 2026-09-22 コミット・プッシュ

- 目的・担当: Codexが、ユーザーの依頼に従ってここまでの変更を保存・共有する。
- 対象: 定期実行スクリプト、環境変数の記入例、Codex CLI実行と状態取得の修正、Luna等のモデル選択肢、本計画。
- 手順: 差分と秘密情報の混入を確認し、テスト・型検査・lint・シェル構文・ドライランを検証後、現在のブランチをコミットし、originへ通常のpushを行う。
- 対象外: `.env`の実値、DB、過去の作業メモ。LaunchAgentのplistはリポジトリ外のMac設定として残る。
- 未実装: 推論強度`xhigh`の指定とJev連携。
- リスク: GitHub上でブランチを共有する。履歴の上書きや本番サービスの再起動は行わない。
Loading