Releases: Pls-1q43/Dibao
Dibao v0.1.3
Dibao v0.1.3 Release Notes
Dibao v0.1.3 is a maintenance release for the v0.1 line. It focuses on feed-management usability, clearer reader metadata, and safer embedding provider behavior for Ollama and Gemini.
Release date: 2026-06-04
简体中文
主要变化
- 订阅源管理页进一步压缩垂直空间:添加订阅改为在订阅源行内打开弹窗,订阅源健康度归入列表筛选,减少大屏下仍然可见的布局拥挤。
- 来源筛选启用时,文章列表里的来源按钮现在会显示状态提示,避免用户无意打开来源筛选后误以为列表刷新异常。
- 推荐文章、最新文章、稍后读等页面在非英文界面下恢复英文副标题;英文界面继续保持无副标题。
- 文章列表、搜索结果和阅读界面现在会显示文章年份,跨年阅读时不必打开原文才能确认具体年份。
- Ollama provider 默认切片长度降为 4000 字符,并在设置界面增加中文长文/bge-m3 提示;遇到 Ollama 上下文过长错误时会自动用更短切片重试一次。
- Gemini embedding 维度请求更可靠:Google AI Studio 的 OpenAI-compatible 入口会发送
dimensions,原生 Gemini provider 会发送outputDimensionality,支持按配置使用 768 / 1536 / 3072 维。
升级影响
从 v0.1.2 升级到 v0.1.3 不需要新的 SQL migration,也不会触发 recommendation derived-data upgrade。保留同一个 /data volume 后替换镜像并重启容器即可。
升级前仍建议备份 /data/dibao.sqlite 或整个 Docker volume。升级后打开健康检查接口确认:
GET /api/system/health
返回 version: "0.1.3" 且 ok: true 即表示基础健康检查通过。
Docker 安装与升级
推荐镜像:
image: ghcr.io/pls-1q43/dibao:v0.1.3如需回滚,请先停止 v0.1.3 容器,用升级前备份恢复 SQLite 数据库,再启动上一版镜像。
已知限制
- Ollama 不同模型和上下文配置仍可能需要手动调低切片长度;如果 bge-m3 仍提示上下文过长,建议降到 3000 字符。
- Gemini/OpenAI-compatible 的维度能力取决于上游 provider 是否支持对应参数;Dibao 会对 Google Gemini 路径发送维度请求并继续执行返回向量维度校验。
English
Highlights
- Feed management uses less vertical space: adding a feed now opens from the feed row, and feed health is folded into list filtering instead of occupying a full-width row.
- The source filter button now shows an active state when source filtering is enabled, making accidental source filters easier to notice.
- Localized reader pages such as For You, Latest, and Read Later restore their English subtitles outside the English UI; the English UI remains subtitle-free.
- Article lists, search results, and the reader header now include the publication year so cross-year articles are unambiguous without opening the source page.
- Ollama provider defaults to 4000-character slices and shows guidance for Chinese long-form content/bge-m3. Ollama context-length failures retry once with a shorter slice.
- Gemini embedding dimensions are requested explicitly. Google AI Studio through the OpenAI-compatible endpoint receives
dimensions, and the native Gemini provider receivesoutputDimensionality, enabling configured 768 / 1536 / 3072-dimensional output.
Upgrade Impact
Upgrading from v0.1.2 to v0.1.3 does not add SQL migrations and does not trigger a recommendation derived-data upgrade. Keep the same /data volume, replace the image, and restart the container.
Back up /data/dibao.sqlite or the whole Docker volume before upgrading. After the restart, verify:
GET /api/system/health
The response should include version: "0.1.3" and ok: true.
Docker Install And Upgrade
Recommended image:
image: ghcr.io/pls-1q43/dibao:v0.1.3To roll back, stop the v0.1.3 container, restore the pre-upgrade SQLite backup, and start the previous image.
Known Limitations
- Ollama models and context settings may still require manual slice tuning. If bge-m3 still reports context length errors, try 3000 characters.
- Gemini/OpenAI-compatible dimensionality depends on upstream provider support. Dibao sends dimension requests for Google Gemini paths and still validates returned vector dimensions.
日本語
主な変更
- フィード管理画面の縦方向の余白を減らしました。フィード追加は行内のボタンからダイアログを開き、フィード健全性は一覧フィルターに統合しました。
- ソースフィルターが有効な場合、記事一覧のソースボタンに状態が表示されるようになり、意図せず絞り込んでいる状態に気づきやすくなりました。
- おすすめ、最新、あとで読むなどのページで、英語以外の UI では英語サブタイトルを復元しました。英語 UI では引き続きサブタイトルを表示しません。
- 記事一覧、検索結果、Reader のメタ情報に公開年を表示し、年をまたぐ記事でも元ページを開かずに年を確認できます。
- Ollama provider の既定切り出し長を 4000 文字に下げ、中国語長文 / bge-m3 向けの案内を追加しました。Ollama の文脈長エラーでは、より短い切り出しで 1 回だけ再試行します。
- Gemini embedding の次元数を明示的に要求します。Google AI Studio の OpenAI-compatible endpoint には
dimensionsを、native Gemini provider にはoutputDimensionalityを送り、768 / 1536 / 3072 次元の設定を使えるようにしました。
アップグレード影響
v0.1.2 から v0.1.3 へのアップグレードでは、新しい SQL migration はありません。recommendation derived-data upgrade も発生しません。同じ /data volume を使い、image tag を差し替えてコンテナを再起動してください。
アップグレード前に /data/dibao.sqlite または Docker volume 全体をバックアップすることを推奨します。再起動後、次の health check を確認してください。
GET /api/system/health
レスポンスに version: "0.1.3" と ok: true が含まれていれば、基本的な確認は通っています。
Docker インストールとアップグレード
推奨イメージ:
image: ghcr.io/pls-1q43/dibao:v0.1.3ロールバックする場合は、v0.1.3 コンテナを停止し、アップグレード前の SQLite バックアップを復元してから前バージョンのイメージを起動してください。
既知の制限
- Ollama のモデルや文脈長設定によっては、切り出し長を手動でさらに下げる必要があります。bge-m3 で文脈長エラーが続く場合は 3000 文字を試してください。
- Gemini / OpenAI-compatible の次元数指定は上流 provider の対応に依存します。Dibao は Google Gemini の経路で次元数を送信し、返ってきたベクトル次元も引き続き検証します。
Dibao v0.1.2
Dibao v0.1.2 Release Notes
Dibao v0.1.2 is a maintenance release for the v0.1 line. It focuses on clearer embedding provider failures, safer reader media rendering, and more direct feed/folder navigation.
Release date: 2026-06-01
简体中文
主要变化
- Embedding provider 测试失败现在会返回更可操作的公开错误:鉴权失败、模型/endpoint 不存在、rate limit、provider 不可用、网络不可达、响应格式异常等会被明确分类。
- Provider 错误会保留可公开展示的上游信息,同时会过滤 API key、token、Authorization 等敏感字段。
- 设置页与后台状态不再把 provider 的测试错误泄漏到不该展示的索引列表里。
- 订阅源管理拆分为“订阅源管理”和“订阅源分组管理”两个视图,减少长页面里混在一起的操作。
- 订阅源和分组管理行新增“查看文章”,可直接跳到对应 feed 或 folder 的 latest 文章列表。
- 文章列表 URL 现在会保留 feed/folder 筛选参数,方便刷新、分享或返回时维持当前上下文。
- 阅读器里的文章图片加载失败后会停止反复重试,避免失败图片持续触发布局抖动或重复网络请求。
升级影响
从 v0.1.1 升级到 v0.1.2 不需要新的 SQL migration,也不会触发 recommendation derived-data upgrade。保留同一个 /data volume 后替换镜像并重启容器即可。
升级前仍建议备份 /data/dibao.sqlite 或整个 Docker volume。升级后打开健康检查接口确认:
GET /api/system/health
返回 version: "0.1.2" 且 ok: true 即表示基础健康检查通过。
Docker 安装与升级
推荐镜像:
image: ghcr.io/pls-1q43/dibao:v0.1.2如需回滚,请先停止 v0.1.2 容器,用升级前备份恢复 SQLite 数据库,再启动上一版镜像。
已知限制
- Embedding provider 的错误信息取决于上游服务实际返回的内容;Dibao 会尽量分类并清理敏感字段,但无法修复 provider 本身的不可用状态。
- 文章正文中的远程图片仍取决于原站点、网络和防盗链策略;本版本的修复是避免失败图片反复重试。
English
Highlights
- Embedding provider test failures now return more actionable public errors. Authentication failures, missing models/endpoints, rate limits, provider outages, network failures, and malformed responses are classified separately.
- Provider errors preserve safe upstream context while redacting API keys, tokens, Authorization headers, and similar sensitive fields.
- Settings and backend status responses avoid leaking provider test errors into index lists where they do not belong.
- Feed management is split into Feed management and Feed folder management views, reducing mixed long-page operations.
- Feed and folder rows now include View articles, jumping directly to the corresponding latest article list.
- Reader URLs preserve feed/folder filter parameters so refresh, sharing, and back navigation keep the current context.
- Failed article images in the reader stop retrying after load failure, avoiding repeated requests and layout churn.
Upgrade Impact
Upgrading from v0.1.1 to v0.1.2 does not add SQL migrations and does not trigger a recommendation derived-data upgrade. Keep the same /data volume, replace the image, and restart the container.
Back up /data/dibao.sqlite or the whole Docker volume before upgrading. After the restart, verify:
GET /api/system/health
The response should include version: "0.1.2" and ok: true.
Docker Install And Upgrade
Recommended image:
image: ghcr.io/pls-1q43/dibao:v0.1.2To roll back, stop the v0.1.2 container, restore the pre-upgrade SQLite backup, and start the previous image.
Known Limitations
- Embedding provider detail depends on the upstream service response. Dibao classifies and redacts what it can, but it cannot repair an unavailable provider.
- Remote article images still depend on the source site, network, and hotlinking rules. This release prevents failed images from retrying repeatedly.
日本語
主な変更
- Embedding provider のテスト失敗が、より対応しやすい公開エラーとして返るようになりました。認証失敗、model / endpoint 不存在、rate limit、provider 停止、ネットワーク不可達、不正なレスポンスを分類します。
- Provider のエラーでは、表示してよい上流メッセージを残しつつ、API key、token、Authorization などの機密情報を伏せます。
- 設定画面とバックエンド状態レスポンスで、provider のテストエラーが不要な index 一覧へ漏れないようにしました。
- フィード管理を「フィード管理」と「フィードフォルダー管理」の 2 つのビューに分け、長い画面で操作が混ざりにくくなりました。
- フィードとフォルダーの行に「記事を見る」を追加し、該当 feed / folder の latest 記事一覧へ直接移動できます。
- 記事一覧 URL が feed / folder の絞り込みパラメータを保持するため、更新、共有、戻る操作でも文脈を保ちやすくなりました。
- Reader 内の記事画像が読み込みに失敗した場合、繰り返し再試行しないようにしました。不要な通信とレイアウトの揺れを抑えます。
アップグレード影響
v0.1.1 から v0.1.2 へのアップグレードでは、新しい SQL migration はありません。recommendation derived-data upgrade も発生しません。同じ /data volume を使い、image tag を差し替えてコンテナを再起動してください。
アップグレード前に /data/dibao.sqlite または Docker volume 全体をバックアップすることを推奨します。再起動後、次の health check を確認してください。
GET /api/system/health
レスポンスに version: "0.1.2" と ok: true が含まれていれば、基本的な確認は通っています。
Docker インストールとアップグレード
推奨イメージ:
image: ghcr.io/pls-1q43/dibao:v0.1.2ロールバックする場合は、v0.1.2 コンテナを停止し、アップグレード前の SQLite バックアップを復元してから前バージョンのイメージを起動してください。
既知の制限
- Embedding provider の詳細は上流サービスのレスポンスに依存します。Dibao は可能な範囲で分類と機密情報の除去を行いますが、provider 自体の停止は修復できません。
- 記事本文内のリモート画像は、元サイト、ネットワーク、防 hotlinking 設定に依存します。本リリースは、失敗した画像が繰り返し再試行されることを防ぎます。
Dibao v0.1.1
Dibao v0.1.1 Release Notes
Dibao v0.1.1 is a corrective release for the personalized recommendation profile introduced after v0.1.0. It focuses on interest-cluster quality, topic-family boundaries, upgrade safety, and Docker release reliability.
Release date: 2026-05-30
简体中文
主要变化
- 修复兴趣簇过度合并:避免不同主题被吸进一个超大兴趣簇,例如测试数据中出现过的“AI / 不是 / 你自己”式巨簇。
- 修复兴趣簇过度碎片化:避免升级后大部分兴趣簇退化成只有 1 篇文章。
- 新增每个 embedding index 独立的 calibration。Dibao 会根据当前 provider、模型、dimension 和本库向量分布,在重建/升级时生成并冻结本 index 的合并阈值。
- 合并逻辑加入约束:centroid 相似度、pairwise guard、标题/来源证据、最大簇规模、最大吸收步长都会参与判断。
- 主题组现在也有上限设置。默认值为 positive clusters 48、negative clusters 32、positive families 16、negative families 12,设置入口与兴趣簇上限放在同一区域。
- 推荐排序收紧 topic family 的作用:cluster 仍是语义匹配主依据,family 主要用于解释和多样性,宽泛主题组不会直接放大推荐匹配分。
- 升级界面会说明本次阻塞迁移只重建 derived recommendation data,不重算 embeddings,不会产生新的 embedding API 费用。
- labels/升级相关界面保持分批处理和让出事件循环,降低低功耗 NAS 上 CPU 100% 时“界面像升级失败”的误判。
- 修复在文章列表点击“加载更多”后,滚过第二页未打开文章可能不再自动标记为已忽略的问题。
- Docker 发布流水线要求注入私有 Sentry build config,正式镜像会同时包含服务端和浏览器端的运行期 Sentry 配置。
升级影响
从 v0.1.0 升级到 v0.1.1 会自动执行新增数据库迁移 018_interest_cluster_calibrations.sql,并在首次启动后进入一次阻塞式 recommendation derived-data upgrade。该升级会重建兴趣簇、主题组、labels 和 ranking rows,但不会调用 embedding provider,也不会重算 embeddings。
升级前请备份 /data/dibao.sqlite 或整个 Docker volume。首次启动时,普通阅读界面会暂时被升级进度页阻塞;升级完成后自动恢复。
Docker 安装与升级
推荐镜像:
image: ghcr.io/pls-1q43/dibao:v0.1.1保留同一个 /data volume 后替换镜像并重启容器即可。健康检查地址为:
GET /api/system/health
如需回滚,请先停止 v0.1.1 容器,用升级前备份恢复 SQLite 数据库,再启动上一版镜像。
已知限制
- 低样本库会使用保守 fallback calibration;推荐质量仍需要用户行为与 embedding 覆盖逐步积累。
- 低功耗 NAS 上首次 derived-data upgrade 可能需要一些时间,但界面会显示具体进度。
- 如果用户主动更换 embedding 模型或 dimension,历史 embedding 仍不能跨模型混用,需要为新 index 生成新 embedding。
English
Highlights
- Fixes over-merged interest clusters so unrelated topics no longer collapse into one large cluster.
- Fixes over-fragmented profiles where most clusters degraded into single-article clusters after an upgrade.
- Adds per-index calibration. Dibao now estimates and freezes thresholds for each embedding index from the active provider, model, dimension, and local vector distribution during rebuild or upgrade.
- Adds constrained merging with centroid similarity, pairwise guards, title/source evidence, maximum cluster size, and bounded absorb steps.
- Adds topic-family caps beside the existing interest-cluster caps. Defaults are positive clusters 48, negative clusters 32, positive families 16, and negative families 12.
- Tightens ranking usage of topic families. Clusters remain the primary semantic match signal; families are used for explanation and diversity rather than broad score amplification.
- The blocking upgrade copy now states that the migration rebuilds derived recommendation data only. It does not recompute embeddings and will not create embedding API cost.
- Labels and upgrade screens keep batched/yielding behavior so low-power NAS devices remain visibly alive under high CPU load.
- Fixes scroll-past ignore telemetry after using Load more, so unopened appended articles can still be marked ignored when scrolled past.
- Docker publishing now requires private Sentry build config so release images include both server and browser runtime Sentry configuration.
Upgrade Impact
Upgrading from v0.1.0 to v0.1.1 automatically runs the new SQL migration 018_interest_cluster_calibrations.sql, then performs one blocking recommendation derived-data upgrade on first start. The upgrade rebuilds clusters, families, labels, and ranking rows, but it does not call an embedding provider or recompute embeddings.
Back up /data/dibao.sqlite or the whole Docker volume before upgrading. During the first start, the normal reader UI is paused behind a progress screen until the derived-data upgrade finishes.
Docker Install And Upgrade
Recommended image:
image: ghcr.io/pls-1q43/dibao:v0.1.1Keep the same /data volume, replace the image tag, and restart the container. Health check:
GET /api/system/health
To roll back, stop the v0.1.1 container, restore the pre-upgrade SQLite backup, and start the previous image.
Known Limitations
- Low-sample libraries use conservative fallback calibration; recommendation quality still improves with behavior history and embedding coverage.
- The first derived-data upgrade can take time on low-power NAS devices, but progress is shown.
- If the user changes embedding model or dimension, old embeddings still cannot be mixed into the new index; the new index needs its own embeddings.
日本語
主な変更
- 関係の薄い記事が 1 つの巨大な興味クラスタへ吸収される問題を修正しました。
- アップグレード後にほとんどのクラスタが 1 記事だけになる過度な断片化を修正しました。
- embedding index ごとの calibration を追加しました。Dibao は rebuild / upgrade 時に、現在の provider、model、dimension、ローカルのベクトル分布から閾値を推定し、その index 用に固定します。
- centroid 類似度、pairwise guard、タイトル/ソースの根拠、最大クラスタサイズ、吸収ステップ上限を使う制約付きマージを導入しました。
- 既存の興味クラスタ上限と同じ設定エリアに topic family 上限を追加しました。初期値は positive clusters 48、negative clusters 32、positive families 16、negative families 12 です。
- 推薦ランキングでの topic family の扱いを抑制しました。semantic match の主役は cluster のままで、family は主に説明と多様性に使われます。
- ブロッキング upgrade 画面に、この移行は derived recommendation data の再構築だけであり、embedding の再生成や API 費用は発生しないことを明記しました。
- labels / upgrade 画面は分割処理と yield を維持し、低消費電力 NAS で CPU が高くなっても進行中であることが見えるようにしました。
- 「さらに読み込む」を使った後も、追加された未読記事を開かずに通過した場合に無視済みへ自動反映されるよう修正しました。
- Docker publish workflow は private Sentry build config を必須にし、正式イメージに server/browser 両方の runtime Sentry 設定を含めます。
アップグレード影響
v0.1.0 から v0.1.1 へアップグレードすると、新しい SQL migration 018_interest_cluster_calibrations.sql が自動実行され、その後初回起動時に recommendation derived-data upgrade が 1 回ブロッキングで実行されます。この upgrade は clusters、families、labels、ranking rows を再構築しますが、embedding provider は呼び出さず、embedding の再生成も行いません。
アップグレード前に /data/dibao.sqlite または Docker volume 全体をバックアップしてください。初回起動時は進捗画面が通常の reader UI を一時的にブロックし、完了後に自動復帰します。
Docker インストールとアップグレード
推奨イメージ:
image: ghcr.io/pls-1q43/dibao:v0.1.1同じ /data volume を使い、image tag を差し替えてコンテナを再起動してください。ヘルスチェック:
GET /api/system/health
ロールバックする場合は、v0.1.1 コンテナを停止し、アップグレード前の SQLite バックアップを復元してから前バージョンのイメージを起動してください。
既知の制限
- サンプルが少ないライブラリでは保守的な fallback calibration を使います。推薦品質は行動履歴と embedding coverage に応じて改善します。
- 低消費電力 NAS では初回 derived-data upgrade に時間がかかる場合がありますが、進捗は画面に表示されます。
- embedding model や dimension を変更した場合、古い embedding は新しい index に混在できません。新しい index 用の embedding が必要です。
Migration List From v0.1.0
SQL migration newly applied after v0.1.0:
018_interest_cluster_calibrations.sql
Blocking derived-data upgrade:
v0.1.1-interest-profile-calibration-rebuild
This derived-data upgrade reuses existing embeddings and does not recompute them.
Dibao v0.1.0
Dibao v0.1.0 Release Notes
Dibao v0.1.0 is the first public MVP release for a single-user, self-hosted, personalized RSS reader.
It is designed for people who want a local and controllable alternative to algorithmic feeds: recommendations happen only inside the user's own RSS/Atom subscriptions, with data stored in a self-hosted SQLite database.
Release Date: 2026-05-28
用户发布说明(简体中文)
邸报 v0.1.0 是首次公开发布版本。它提供一个可用 Docker 自托管的单用户 RSS 阅读器:你可以导入 OPML、管理订阅源和分组、阅读最新文章、使用收藏/稍后读/已读/不感兴趣等动作,并在自己的 RSS 信源内部获得可解释的个性化推荐。
本版本支持基础排序、OpenAI-compatible / Ollama embedding provider、sqlite-vec 向量索引、推荐状态诊断、后台刷新、搜索、PWA 应用壳、健康检查、备份和升级说明。首次安装不需要历史迁移;请使用 ghcr.io/pls-1q43/dibao:v0.1.0,并把 /data 挂载到持久化目录。升级前请备份 SQLite 数据库或 Docker volume。
已知限制:当前仅支持单用户自托管,没有官方托管服务、多用户协作、云同步、OAuth/密码找回、完整离线文章库或原生移动/桌面应用。推荐质量仍处于 MVP 阶段,效果取决于阅读反馈和 embedding 覆盖率。
ユーザー向けリリースノート(日本語)
Dibao v0.1.0 は最初の公開 MVP リリースです。Docker でセルフホストできる単一ユーザー向け RSS リーダーとして、OPML のインポート、フィードとフォルダー管理、最新記事の閲覧、保存・あとで読む・既読・興味なしなどの操作、自分の RSS 購読内だけで動く説明可能なパーソナル推薦を提供します。
このリリースには、基本ランキング、OpenAI-compatible / Ollama embedding provider、sqlite-vec ベクターインデックス、推薦状態の診断、バックグラウンド更新、検索、PWA アプリシェル、ヘルスチェック、バックアップとアップグレード手順が含まれます。初回リリースのため、以前の公開版からの移行はありません。インストールには ghcr.io/pls-1q43/dibao:v0.1.0 を使い、/data を永続ディレクトリにマウントしてください。アップグレード前には SQLite データベースまたは Docker volume をバックアップしてください。
既知の制限: 現在は単一ユーザーのセルフホストのみで、公式ホスティング、複数ユーザー、クラウド同期、OAuth / パスワード復旧、完全なオフライン記事保存、ネイティブアプリはありません。推薦品質は MVP 段階で、読書フィードバックと embedding カバレッジに依存します。
User Release Notes (English)
Dibao v0.1.0 is the first public MVP release. It provides a Docker self-hostable, single-user RSS reader with OPML import, feed and folder management, latest article reading, article actions, and explainable personalized recommendations that only rank content from the user's own RSS subscriptions.
This release includes baseline ranking, OpenAI-compatible and Ollama embedding providers, sqlite-vec vector indexes, recommendation diagnostics, background refresh, search, a PWA app shell, health checks, and backup/upgrade documentation. Because this is the first public release, there is no previous public release migration path. Install with ghcr.io/pls-1q43/dibao:v0.1.0 and mount /data to persistent storage. Back up the SQLite database or Docker volume before future upgrades.
Known limitations: Dibao is currently single-user and self-hosted only. There is no hosted service, multi-user collaboration, cloud sync, OAuth/password recovery, full offline article library, or native mobile/desktop app. Recommendation quality is MVP-stage and depends on user feedback and embedding coverage.
Highlights
- Single-user self-hosted RSS reader.
- Docker / Docker Compose deployment path.
- First-run setup with password-based auth.
- OPML import/export.
- Feed and folder management.
- Per-feed full content control with preview and current-RSS-only backfill.
- Search UI for local title, summary, and full-text article search.
- Article actions: favorite, read later, read/unread, not interested, and read progress.
- Reader Command cleanup for marking unread debt as read without recommendation feedback pollution.
- Background feed refresh, retention cleanup, embedding, ranking, and profile jobs.
- Settings for language, reader typography, retention, and embedding providers.
- OpenAI-compatible and Ollama embedding provider support.
- sqlite-vec vector storage, rebuild, and active-index backfill.
- Profile Algorithm v0 and Ranking v1 fusion.
- Recommendation diagnostics, safe jobs list, and explanation UI.
- PWA installability foundation with manifest, service worker, update prompt, and offline app shell.
- Desktop and mobile E2E smoke coverage.
What's Included
Reader
- Add RSS/Atom feeds manually.
- Discover RSS/Atom feeds from website homepages before adding.
- Preview feed title, URL, description, recent items, and duplicate status before confirming an add.
- Refresh a single feed or enqueue refresh for all enabled feeds.
- Browse latest and recommended article lists.
- Open article detail.
- Use article actions and reader scroll progress to shape future recommendations.
- Load more article list pages through cursor pagination.
- Search the local article library by keyword, filter by feed/folder/state/date, and open results in the existing reader.
- Clear unread debt in latest/recommended by all, older than 24h, older than 7d, or older than 30d; submitted search scopes can also be cleared through a confirmed Reader Command.
- Desktop feed/list/reader columns scroll independently.
Subscriptions
- Import OPML files.
- Export current subscriptions as
dibao-subscriptions.opml. - Create, rename, and delete folders.
- Edit feed title, folder, enabled state, and source weight.
- View feed health diagnostics, filter to unhealthy/disabled/never-successful feeds, and retry failing feeds.
- Keep Feed content as the default body source, or explicitly enable web full-content fetching per feed. Preview does not write the database; backfill only touches items in the current RSS response and is limited to 50 items.
- Soft-delete feeds without physically deleting historical article rows.
Recommendation
- Baseline ranking works without any embedding provider.
- OpenAI-compatible and Ollama embedding providers can be configured and tested.
- New articles can be embedded through background jobs.
- Active embedding indexes can be backfilled for missing/stale vectors.
- Full-content success updates the article effective
content_hash, making stale embeddings eligible for regeneration and subsequent ranking recalculation. - sqlite-vec indexes can be rebuilt from the SQLite authority table without calling the provider.
- User behavior updates positive and negative interest clusters.
- Reader Command
mark_scope_readis audited separately from behavior events and does not train the interest profile. - Full-content backfill is corpus maintenance, not user behavior: it does not write
behavior_events, does not mark articles read/favorited/read-later, and does not directly train the user profile. - Full-content refresh/backfill side effects are centralized in the server coordinator: content services return changed article IDs, then embedding, ranking, and recommendation maintenance are enqueued once.
- Recommended ranking combines interest match, source preference, freshness, state, and penalties.
- Search v0 supports relevance, latest, and recommendation-aware ordering inside matched results.
- Outbound RSS and full-content fetching now has request timeouts and response size limits. Local/private targets are logged as warnings but remain allowed for self-hosted LAN feeds.
- Login now rate-limits repeated failed attempts for the same username/IP combination.
- Bulk mark-read commands store sampled audit evidence instead of every affected article id, keeping large cleanup actions responsive.
- The system falls back gracefully when provider, embedding, or profile data is unavailable.
- Diagnostics show mode, coverage, behavior counts, clusters, rank context, pending/failed jobs, and warnings without exposing API keys or vectors.
Operations
- Single-container Dockerfile.
compose.yamlwith persistent/data/dibao.sqlitevolume.- Anonymous health check endpoint at
/api/system/health. - Server can serve the built Web app and API from one Fastify process.
- Static PWA assets are served with installability-friendly content types, including
/site.webmanifestand/sw.js. - Docker recommendation smoke covers setup, provider, backfill, diagnostics, and recommended articles.
- Performance script generates a 20k-article local benchmark and updates
docs/recommendation-performance.md. - README documents deployment, setup, backup, restore, upgrade, provider configuration, and troubleshooting.
Validation Status
The v0.1.0 release gate was validated on the release branch before tagging:
npm run typechecknpm testnpm run buildnpm run spike:sqlite-vecnpm run e2edocker build -t dibao:local .docker compose confignpm run smoke:docker-recommendationnpm run perf:recommendationDIBAO_RUN_OLLAMA_TESTS=true npm run test:ollama:optionalgit diff --check
The E2E and Docker smoke suites use local RSS and embedding fixtures and do not call real external services. The optional Ollama probe is intended for a local Ollama service; for this release the expected local model is bge-m3 with dimension 1024.
Migration List
This is the first public release, so there is no previous public tag to upgrade from. A fresh v0.1.0 database applies these migrations automatically on startup:
001_initial_schema002_article_state_likes003_profile_event_jobs004_recommendation_v2005_recommendation_v2_completion006_recommendation_maintenance_schedule007_embedding_usage_and_profile_evidence_snapshots008_interest_cluster_labels009_interest_cluster_merge_candidates011_remove_corpus_topic_snapshots012_gemini_embedding_provider013_embedding_provider_limits014_reader_command_events015_feed_full_content_mode016_auth_username017_interest_families
Known Limitations
- Single-user only.
- No official hosted service.
- No multi-device cloud sync.
- No OAuth or password recovery.
- No offline full article reading or IndexedDB article cache.
- No native iOS / Android / desktop app packaging yet.
- No full mobile layout hardening beyond MVP smoke coverage.
- No custom HTTP or embedded-local provider adapter yet.
- No provider API key encryption beyond current MVP local SQLite storage.
- No advanced diversity reranking or duplicate penalties yet.
- No full model migration UX for changing embedding dimensions/models.
- Search v0 does not support semantic search, complex search syntax, or external search services.
- Bulk reader cleanup only supports marking unread articles as read; it does not support bulk delete, bulk favorite, bulk read-later, ...