Developer Documentation · 2026-09-14 検証

Davar Church システム構成

Davar Web(www2.davarkg.com)、Blogger、Member Web(d.cblh.us/members-home/)、Davar App、Davar AIがどのサーバーを通って連携し、公式サイト・みことばカード・毎週の資料・教会写真と動画・日次巡回の更新がどのようにiPhone・Apple TV・会員ページ・AI Knowledgeへ届くかを、実際の稼働構成に沿って整理した技術資料です。

最初に結論:Davar Webは教会の公式サイト www2.davarkg.com です。Member Webは会員ページとアプリAPIを担当し、アプリは通常 davar.jly.me、読取通信の接続障害時だけ d.cblh.us を使います。Homeなどは公開ですが、GET /app/config とBible AIは会員トークンが必要です。Davar固有の回答は、関連するDavar資料と出典を確認できた場合だけ返します。

アプリ

iPhone / iPad 公開版 1.19(Build 238)・App Review審査待ち/内部TestFlight 1.20(Build 248) · Apple TV 1.10(Build 107) · Android 1.20 Preview(versionCode 21)

AI

Open WebUI 0.11.0 · 7 Knowledgeを3モデルへ関連付け · 5つの回答canaryと必須4 corpusを日次監視

全体構成 実装照合結果 構成図 アプリ利用 内蔵聖書データ 教会写真・動画 みことばカード同期 www2公式更新 週次更新 Knowledge登録 AIの日次巡回 メールレポート 質問とRAG LiteLLM Ollamaの役割 外部連携台帳 データ境界

1. 全体構成

Davar Web(www2.davarkg.com)が教会の公式Web情報の正本、Blogger(davarjp.blogspot.com)が日本支部ブログとみことばカード原記事の正本、Member Web(d.cblh.us/members-home/)がそれらの更新と会員向けコンテンツを集約する会員ページ兼アプリAPIの入口、Davar AIが検索と回答生成の担当です。Dropboxは週次資料と生成物の受け渡し場所で、アプリがDropboxへ直接接続することはありません。

オンライン利用時の主経路

利用者iPhone / iPad
Davar App公開コンテンツはサインイン不要
Config・Bible AI用トークンはKeychainに保持
Member Webdavar.jly.me(優先)
d.cblh.us(読取fallback)
公開コンテンツHome、教会ページ、写真、カード、PDF / MP4 / VTT
サインインなしでWordPressから応答
Bible AIのときだけ会員認証 → rh10のローカルRAG
→ LiteLLM → Claude → 出典検証
アプリMember WebDavar AIDavar Web・外部サービス保存領域

Davar App

表示と操作を担当します。Home、教会ページ、メディアは公開APIを使い、サーバー設定とBible AIは会員トークン付きAPIを利用します。どちらもWordPress側の /wp-json/davar/v1/app/* が入口です。

Member Web

d.cblh.us/members-home/で会員ページを提供し、Davar Webの公式更新を定期取得してアプリ用Home Snapshotへ整形します。同じWordPressホストが週報・動画アセット、公開アプリAPI、Bible AI認証、質問のレート制限・出典検証・プロキシも担当します。

Davar AI

Open WebUI上のKnowledge、ローカル検索、検索結果の再順位付け、モデルへのコンテキスト注入を担当します。

Davar Web / Blogger / 外部サービス

Davar Web(www2.davarkg.com)は公式Web情報、Bloggerは日本支部ブログとみことばカード原記事の正本です。Dropboxは週次ファイル交換、AWS Pollyは音声生成、Anthropic Claudeは通常のBible AI回答生成に使います。接続先と境界は外部連携台帳にまとめています。

実際のコード・稼働仕様との照合結果

以下は、iOS App、Member Web、Davar AI、週次処理のコードと2026年9月3日の本番read-backを対応付けた現在値です。画面上の名称ではなく、通信・保存・失敗時動作を基準にしています。

経路認証主なendpoint/実装失敗時
公開読取会員token不要GET /app/home/newsletter-text/media-series/content/photos/memory-verse-cardsHomeは端末の前回snapshot、menu/pageは最後の正常版または内蔵版、各画面は空表示などへ安全に縮退
会員機能共通passwordから発行した端末別tokenGET /app/configPOST /app/chatPOST /app/logout401時は再認証。Davar固有回答に関連資料がなければ生成文を破棄して503
用途限定操作機能別session/admin token写真・動画投稿、みことばカード/Blogger投稿、通知管理、注文/復元、部屋割りBible AIのtokenと混用しない。権限・整合性を満たさない変更は拒否
通信先TLS優先 https://davar.jly.me、fallback https://d.cblh.usDNS/host接続失敗時のGET/HEADだけ別originを再試行。POST/PATCH/DELETEは重複変更を避けるため再送しない

Server-managed menuの防御

/app/contentは512 KiB、schema v1、menu 20組×20項目、50 page、各100 block、100 announcementまでです。HTTPS・port 443・認証情報なし・davarkg.comcblh.usjly.medavar.org配下だけを許可し、ETagで再検証します。不正な新文書は最後の正常版を置き換えません。

現在利用中と、実装済みだが自動ではないもの

現在のiOS会員認証は共通password→端末別tokenです。次回のiOS更新では設定の最上部にUser Setupを置き、このログインと1つ以上の所属支部が揃った時だけ完了表示にします。password自体は保存せず、発行された端末別tokenだけをKeychainへ保存します。個人account/Sign in with Appleのserver実装は現在のiOS標準経路ではありません。Ollamaは手動選択、YouTubeへの週次uploadは実装されていますが既定offで、いずれも自動fallback/自動公開ではありません。

Server-driven書籍:iOS 1.20 build 248以降の「神のかたちに」は、認証済みcatalogが示すSHA-256 revisionと保護packageを使います。Bible画面を開く時と連続表示のプル更新で新revisionだけを取得し、完全検証後にatomic保存します。通信・検証・保存に失敗した場合は最後の正常な端末cacheを維持します。本文の見出し、聖句引用、字下げ、太字はserver Markdownが指定し、書籍固有のpage条件をappへ追加しません。
RAG設定の正本:Open WebUI 0.11.0の実行値はコンテナ環境変数ではなく、webui.dbのPersistentConfigです。本番read-backは BAAI/bge-m3、hybrid検索、BM25 weight 0.5、top-k 8、BAAI/bge-reranker-v2-m3、rerank後top-k 6、chunk 800/overlap 100でした。

実装に照合した構成図

システム全体の相関、オンライン連携、www2公式更新、週次更新とKnowledge登録、ユーザー質問とRAGを図にまとめています。静的SVGのため、外部の描画サービスやJavaScriptを必要としません。

完全相関図:Davar Web / Member Web / App / AI / Weekly Task

www2の公式更新、ユーザーのオンラインアクセス、WordPressの配信とAI Gateway、rh10のRAG・モデル経路、週次4資料の生成・配布・Knowledge登録を一枚に統合しています。

Davar Webの公式更新とBloggerのみことばカード原記事をMember Webへ集約する経路、ユーザー、Davar App、ブラウザ、Davar AI、外部サービス、Mac上のWeekly Taskを結び、Home配信、みことばカード差分同期、Chat、PDF動画配信、RAGとClaude、手動選択のOllama fallback、DropboxからMember WebとKnowledgeへの週次処理を示す完全相関図
AppはDavar WebやBloggerを更新確認のため直接巡回せず、Member Webが公式情報とみことばカードを検証・集約して配信します。Dropboxやrh10への直接接続もありません。Ollamaは自動切替ではなく、ローカルモデルを手動選択した場合の経路です。 図を拡大

全体連携:Davar Web / Member Web / App / AI

www2からWordPressへ公式更新を集約する経路、アプリの入口、Bible AIだけがrh10へ分岐する経路、ClaudeとOllamaの役割を一枚で示します。

Davar Webの公式更新とBloggerのみことばカード原記事をMember Webが取得・検証し、利用者がDavar Appから公開Home JSONとカードギャラリーを受け取り、会員認証が必要なBible AIだけがrh10のOpen WebUI、ローカルRAG、LiteLLM、Claudeまたは手動選択のOllamaへ進み、出典検証を経て回答する全体構成図
Davar Webは公式情報、Bloggerは日本支部ブログとみことばカード原記事の正本です。Member Webは収集・検証・キャッシュ・配信の中継点です。通常コンテンツは公開され、Bible AIだけが会員認証を必要とします。AppはDropboxやrh10へ直接ログインしません。 図を拡大

公式サイト更新:Davar Web → Member Web → iPhone

教会スタッフがDavar Webを更新してから、Member Webが6時間ごとに取得・整形・保存し、Davar AppのHomeへ届ける流れです。

教会スタッフがDavar Webを更新し、日本語・英語Storeの商品APIとともにMember WebのWordPressが6時間ごとに取得してHome Snapshotと日次通知を更新し、公開Home JSONをiPhoneのDavar Appが取得・キャッシュ・言語選択して表示する流れ
一覧表示はMember Webのスナップショットから取得します。項目をタップするとDavar Webの元記事、YouTube動画、またはStore商品を開きます。週報・説教朗読動画は別のDropbox週次処理です。 図を拡大

週次更新:4資料からWebとKnowledgeへ

Dropboxの4入力からPolly・ffmpegで配布物を作る経路と、同じ入力をDropbox-only collectorでdavar-sermonsへ登録する経路です。

Dropboxの日本語英語の説教サマリーと週報をローカルMacで処理し、Pollyとffmpegを経てDropbox、Member Web、アプリ、members-homeへ配布し、rh10のcollectorでdavar-sermonsへ登録する週次フロー図
生成物の配布とKnowledge登録は別経路ですが、どちらも4つの期待資料と失敗0件を確認して完了します。 図を拡大

質問処理:ローカルRAGから回答と出典まで

アプリの質問がWordPress、Open WebUIの検索、LiteLLM、Claudeを通って戻る順序と、Ollamaを選んだ場合の分岐です。

会員のBible AI質問がDavar App、WordPress、Open WebUI、ローカルRAGを通り、通常はLiteLLMからClaudeへ送られ、Davar固有の質問では関連資料の出典検証に合格した回答だけがアプリへ戻るシーケンス図。Ollamaは手動選択の別経路
通常経路では検索で選ばれた断片だけをLiteLLM経由でClaudeへ渡します。Davar固有の質問で関連資料を確認できなければ回答を破棄してHTTP 503で安全停止します。Ollama経路は自動フェイルオーバーではありません。 図を拡大

2. ユーザーがアプリを使うとき

Home、教会ページ、メディア、ニュースレターはサインインなしで利用できます。設定画面自体は開けますが、serverのAI設定を取得するGET /app/configは会員tokenが必要で、未認証時は内蔵設定を使います。Davar Web由来の項目をタップした後は、元記事をアプリ内ブラウザで開きます。

公開コンテンツ → 必要な場合だけBible AIへサインイン

1
Davar App
GET /app/home、教会コンテンツ・メディア・ニュースレターなどの公開endpointを、会員トークンなしで呼びます。GET /app/configは会員token付きです。
2
WordPress
Davar Webから定期取得したイベント・本部ブログ・ニュースレター・Website更新情報と、週報、動画、暗誦聖句などを返します。不正な新menu文書や取得失敗は、端末の最後の正常版を置き換えません。正常版がなければ内蔵版を使います。
3
Davar App
言語設定に合わせて日本語/英語を選び、PDF・MP4・VTTを公開URLから表示します。通常の内容更新はアプリの再ビルドなしで反映できます。
4
Bible AI利用時
教会から案内された共通パスワードを POST /app/login へ送り、Member Webが端末ごとの会員トークンを返します。アプリはKeychainへ保存します。
5
Bible AI
POST /app/chatだけが会員トークン、レート制限、質問ログ、Davar AIへの中継、回答根拠の検証を通ります。
コルネリオ会:MediaメニューのLive Streaming直下に、Member Webが許可済みの組み込み識別子 corneliusFellowship を配信します。更新後のiOS Appはこの識別子を固定URL https://messages.davarkg.comへ対応付けてApp内で開き、読込中、再読込、pull-to-refresh、通信失敗時の再試行を提供します。この新しい組み込みメニューを表示するにはAppの更新が必要です。
通信の境界:アプリは rh10、Open WebUI、Dropboxへ直接ログインしません。WordPressが公開コンテンツと認証済みBible AIの共通APIゲートウェイです。

聖書機能は端末内データ、Bible AIはnetwork機能

聖書本文、原語、Strong’s辞書、コメンタリー、TSKクロスリファレンス、福音書並行箇所は、アプリに同梱した読取専用DavarBible.sqliteから表示します。聖書を読むたびにMember Webや外部Bible APIから本文を取得する構成ではありません。

端末内で動く機能

口語訳、KJV、WLC旧約ヘブライ語、Delitzsch新約ヘブライ語訳、Swete LXX、Robinson-Pierpontギリシャ語新約、WEB、節番号対応、検索・並列表示・学習資料を同梱しています。ハイライト、メモ、検索履歴も端末内だけに保存し、cloud同期しません。

networkへ出る機能

Bible AIへ送信した質問と直近6件までの会話はMember WebとDavar AIを通ります。アプリの「出典とライセンス」でeKotoba、BibleEngine、OpenScriptures、Wikisource、First1KGreek、STEPBible、eBible.org、Bible Researcher等の公開元リンクを利用者が選んだ場合はbrowserを開きます。

区別:これらのBible提供元は同梱databaseを作る際の出典・ライセンスまたは利用者が開く参照linkです。通常の聖書閲覧中に自動同期する外部serviceではありません。

教会写真・動画の収集と公開

Version 1.7以降の「教会写真・動画」は、管理者が運用する恒久的な素材ライブラリです。一般的なSNSではなく、ダイレクトメッセージ、公開プロフィール、フォローはありません。恒久ギャラリーは全体を表示し、2026 JBS/SBSの入口はserver所有のイベントタグで対象素材だけに限定します。投稿用sessionはBible AIの会員サインインと分離されています。

選択 → background upload → server検証 → Public配信

1
投稿者
iPhone / iPadで共有・教会利用の許可を確認し、写真または動画を選びます。最大500件、写真・動画は1ファイル最大10 GiBです。取得できる場合は撮影日時も読み取ります。
2
Davar App
写真をJPEG、動画をMP4とposterへ準備し、SHA-256、種類、サイズ、撮影日時を付けてupload開始を要求します。進捗はbatch全体を一行で表示し、完了項目は残しません。
3
background URLSession
サーバー指定の8 MiB chunkへ分割し、アプリがactiveな間に未完了chunkをすべてbackground sessionへ登録します。delegate callbackは完了記録に使い、次chunkを初めて作る唯一のschedulerにはしません。
4
Member Web
各chunkのhashとquotaを検証し、全chunkが揃ってからfinalizeします。現在の対応clientがpublicationMode=immediateを明示し、本番flagが有効な場合だけ直ちにPublicとして保存します。古い/不明なclientは引き続きpending / Privateです。
5
タグと管理
serverが恒久ギャラリー、2026JBS2026SBSのscopeを割り当てます。タグはmedia rowと同じtransactionで保存し、schema・read・writeを検証できなければHTTP 503で停止します。管理者は公開状態、タグ、回転、download、削除を管理します。
6
公開クライアント
一般利用者向けのslideshowにはPublic素材だけを撮影日順に返します。教会写真・動画の全albumは別の投稿用sessionで開き、一括downloadは管理者だけに表示します。Apple TVはPublic写真とmuted動画をHome背景/写真tabで再生します。

権限とセッション

  • 一般利用者:公開slideshowの閲覧。公開変更、download、削除は不可
  • 投稿用session:全albumのPublic閲覧、投稿、通報。downloadや公開変更は不可
  • 投稿者:有効な同一投稿session中、自分の素材を閲覧・削除
  • 管理者:Privateを含む閲覧、Public / Private変更、回転、download、削除
  • 期限付きsession、署名付きURL、server側hash化credential、server所有タグで境界を維持

閲覧・取得

  • Public / 投稿 / Downloadを別tabに分離
  • 写真/動画、撮影開始日/終了日でfilterし複数選択
  • 写真を1080p / 720p / 480p / 240pへ一括変換
  • iOS slideshowは写真/動画/Mix、random、Ken Burns、動画音量に対応
即時公開と通知:対応clientが明示的に即時公開を要求した新規素材だけをPublicにします。写真・動画、みことばカード、週報、Home/サイトの変更はLA時間午前8時に1日最大1回のInbox通知へまとめます。管理者通知とは購読列とpayload channelを分離し、ファイル名、投稿者、素材内容はpushへ含めません。5分間隔のWordPress cron起動が日次eventを実行します。
build 198の再送とviewer:clientは最初にbatch全件を送信し、その後に再試行可能な失敗だけを再送して、最終失敗だけを表示します。画面を閉じてもbackground queueへ登録済みの処理は続きます。動画の操作panelは2秒間操作がなければ隠れ、開いている素材の削除後は次に新しい素材、それがなければ次に古い素材へ移動します。

実装・release QAで確定した運用原則

領域確認された失敗恒久ルール
background uploadchunk N完了callback後にN+1を作る方式では、suspend中に連鎖が止まり、再度アプリを開くまで続かなかったactive中に全missing chunkをbackground sessionへ登録し、callbackは完了管理、全chunk確認後にfinalizeする
2列cardouter insetに加えてgrid内でもhorizontal paddingを引き、右列と管理者操作が画面外へ出た利用可能幅からouter insetと列間隔を一度だけ引く。存在確認だけでなく左右両列の全操作がwindow bounds内かをUI testで検査する
Simulator QA/Volumes/XcodeSimはAPFS表示でも、実体が外付けT9上のsparsebundleだった固定のDavar SBS LocalSSD QAだけを使い、Simulator data、DerivedData、xcresultの実pathが内蔵SSDかを個別確認する
審査中build差し替えbuild uploadだけでは審査submissionの添付buildは変わらない新buildのVALIDとTestFlight groupを確認し、dry-run後に対象iOS submissionだけを差し替え、screenshot・添付build・iOS/tvOS両stateをread-backする
完全UI後の部分修復完走した完全UIでtest側の検索・同期・fixture・assertionが失敗すると、同じ数時間の完全suite再実行が必要になっていた全失敗を個別に原因特定し、製品sourceが不変でtest/harnessだけを修正した場合は、同じproduction controlと下流assertionを保つ該当部分testの合格と独立reviewで閉じる。未完走、未解明、runtime前提不足、製品失敗・製品source変更は完全suiteを再実行する
データ境界:原本とPrivate metadataはMember Webの教会運用Linux serverに保存し、未公開素材を一般公開pathへ直接置きません。削除後も障害復旧backupの循環期間中に限り残る場合があります。パスワード、hash、session token、Cookie、署名付きURLの値はこの資料やrepositoryへ記録しません。

3. Bloggerとアプリのみことばカード投稿を同期するとき

davarjp.blogspot.comの「みことばカード」ラベル付き原記事をMember Webへ取り込む定期処理に加え、認証済みアプリ投稿画面はBlogger投稿フォームとして動作します。フォームからの投稿はすべてBloggerへ公開しますが、アプリのギャラリーは現在のラベルに完全一致する「みことばカード」がある投稿だけを表示します。

Blogger原記事 → 事前照合 → 投稿日+原画像+縮小画像 → Member Webギャラリー

1
Bloggerを全件確認
https://davarjp.blogspot.com/search/label/みことばカードから「前の投稿」リンクを最後までたどり、各記事のJSON-LDから題名、投稿日、原記事URL、画像URLを読み取ります。原記事はdavarjp.blogspot.com、画像はblogger.googleusercontent.comだけを許可します。
2
変更前に差分確認
公開ギャラリーAPIのsourceURLdeletedSourceHashesを照合します。登録済みURLと、利用者または管理者が削除したURLは、認証・画像download・uploadより前に除外します。新規が0件なら認証も本番変更も行いません。
3
新規分だけ準備
新規がある場合は、みことばカード表と画像directoryのbackupを作り、別場所への復元を確認してから進みます。取得した原画像bytesは変換せず将来の印刷用に保持し、同じbytesから一覧用の最大420×420 PNGを作ります。題名、投稿日、原記事のsourceURL、原画像、縮小画像を一緒に送ります。
4
Member Webで再確認
upload APIもsourceURLと画像内容の重複を検査します。削除済みURLならHTTP 409 mikotoba_card_deletedで拒否するため、古い/独自のimport処理からも復活できません。削除記録を保存できない場合は、カードを消さずHTTP 503で安全停止します。
5
完了を読み戻す
全ページをもう一度照合して新規待ちが0件であること、今回の画像URLがHTTP 200であること、公開APIとギャラリーページが正常であることを確認して完了します。途中失敗は成功として扱いません。

Home掲載対象と重複防止

Member WebはBloggerフィードを1回取得し、「みことばカード」と通常の支部記事をラベルで分けます。それぞれ直近7日以内の全件と支部ラベルごとの最新1件を選びます。カード側は選定した原記事URLをHome Snapshotへ保存し、iOS 1.20 build 248以降がギャラリーのsourceURLと正規化して照合します。「みことばカード」記事は通常の「各国支部のブログ」一覧へ入らないため二重表示しません。Bloggerにない固定のPasadena(本部)から架空の投稿は作りません。

削除は「次回また戻る」にしない

削除時は原記事URLのSHA-256だけを独立した非autoloadの削除記録として残し、公開APIにはhashだけを返します。意図的な復元は、自動同期とは別の承認済み本番データ操作として対象hashを指定して行います。

アプリ投稿の書込境界:Member Webは画像とカード行を保存した時点でclientへ完了を返し、JLY画像を使うcanonical Blogger記事を即時作成します。Mail-to-Bloggerは1時間単位でBlogger保管画像を得る用途だけに使い、取得後は同じ記事ID/permalinkの画像を差し替え、検証後にstaging draftを削除します。専用投稿者のtitle、comment、複数label、回転/画像差し替え、削除を同期し、labelは1時間ごとに再照合します。「みことばカード」を外すとアプリから隠れますが画像差し替えは続き、その後の編集はBloggerで行えます。従来の外部Blogger原記事importは読取専用のままです。

4. Davar Webの更新がiPhoneへ届くまで

Davar Web(www2.davarkg.com)は、教会の英語/日本語公式サイト、イベント、本部ブログ、ニュースレター、Church School情報の正本です。日本語・英語のStore公開商品APIもMember Webの収集元です。Davar Appがこれらを毎回直接読み取るのではなく、Member Web(d.cblh.us/members-home/)と同じWordPressが定期的に集約し、安定したアプリ用JSONへ変換します。

公式サイト更新 → 集約 → Home表示

1
教会スタッフ
www2.davarkg.comの英語/日本語サイトへ、投稿、固定ページ、イベント、ブログ、ニュースレターなどを掲載・更新します。
2
Member Web
WordPressのWP-Cronが6時間ごとに起動し、Davar WebのWordPress REST APIと公開HTML、Store公開商品APIから更新情報を取得します。
3
収集・整形
タイトル、日付、リンク、要約を正規化し、重複を除いて新しい順に並べます。取得できなかった区分はsectionErrorsへ記録します。
4
WordPress DB
Web用のmembers-homeを更新すると同時に、アプリ用のdavar_ai_app_home_snapshotを保存します。GET /app/homeは外部サイトを再取得せず、この保存済みスナップショットを返します。
5
Davar App
起動時またはPull to Refreshで、会員tokenを付けずに公開GET /wp-json/davar/v1/app/home?lang=ja|enを呼びます。成功時は端末にも保存し、通信できないときは前回の内容を表示します。
6
クライアント表示
言語タグがある項目は言語設定に合わせて選び、イベント、ニュースレター、本部ブログ、Church School、Website更新情報としてHomeへ表示します。storeUpdatesはiPhone / iPadのHome末尾、Apple TVの更新ticker末尾に置き、項目を選ぶと商品URLを開きます。
Homeの区分主なwww2取得元アプリでの動作
アナウンスメント/Website更新情報英語・日本語WordPressの投稿/固定ページREST API。更新日が31日以内のものを最大16件タイトルの言語タグで選択し、元ページを開く
イベントThe Events Calendar REST API開催日とタイトルを表示し、詳細ページを開く
ロスアンゼルス本部ブログ/jp/blog/の公開HTML最新記事を表示し、元記事を開く
ニュースレター婦人/Youth・Juniorの公開HTMLアプリ内のNewsletter表示へ進む
Church School日本語WordPress REST APIと案内ページ英語設定では英語タイトル/案内URLへ置換
Store新着入荷情報日本語・英語Storeの公開商品API。31日以内・各言語最新8件日英の言語タグで選択。iPhone / iPadの最終Home section、Apple TV tickerの最終カテゴリとして表示し、商品URLを開く。基準作成後の新商品は日次通知へ区分別件数と商品リンク付きで保存
役割の違い:Davar Webは公式情報を編集・公開する正本、Member Webは複数の情報源を集約して会員ページとアプリへ安定配信する中継点、iPhoneはそのスナップショットを表示するクライアントです。週報PDFと説教サマリー朗読動画はDavar WebではなくDropboxの週次処理、日本支部ブログはBloggerから取得します。

5. 毎週の資料・動画更新

週次タスクは4つの原稿を一組として扱います。新しくダウンロードしたファイルだけを処理し、生成物、Web公開物、AI Knowledgeを同じ週にそろえます。

4資料 → 音声・動画 → Dropbox / Member Web

Dropbox: 週次入力 4点説教サマリー 日/英
週報PDF 日/英
ローカルMacprocess_latest_and_update_web.py
今回取得した新規ファイルだけを選択
AWS Polly + S3英語: Ruth long-form
日本語: Takumi neural
音声とspeech marksを生成
ffmpeg画像・音声・字幕をMP4 / SRT / VTTへ整形
Dropboxへアップロード日英のMP4 / SRT
サイズ・ハッシュを確認
Member Webへ配置日英PDF / MP4 / SRT / VTT
日本語はmembers-home、英語はアプリ専用
入力をアーカイブ拡張子ではなくファイル名規則で保存先を決定
公開後のMember WebWordPressテーマ内の最新週次アセット
Davar App日/英の週報・動画を参照
members-home日本語のPDF・短編動画・VTTを参照

定期orchestratorは最新の4資料を一組として処理します。一方、基礎pipeline自体はPDF/DOCXを1件ずつ処理できます。YouTube upload機能もありますが既定値はoffで、週次処理の通常完了条件には含めません。

週報の読みやすいtext抽出はMember Webのmembers-home-auto.phpが担当し、pdftotextとOCR fallbackの結果をアプリがAPIから表示します。「聖日礼拝〜報告」「今週の暗誦聖句」「黒丸ごとのお知らせ」「その下の予定」「原PDF 3 page目の説教サマリー」を別blockにする構造化は次の改修として記録済みで、build 198の実装済み機能には含めません。

成功判定:コマンドの終了コードだけでは判定しません。4入力の取得、変換、Dropboxアップロード、公開URL、Knowledge登録を個別に確認し、期待ファイルに失敗が1件でもあれば週次タスクは失敗です。

6. Davar AIへKnowledgeを登録するとき

4資料がDropboxへそろった後、rh10上でDropbox専用collectorを実行します。週次処理ではWeb全体を再収集する collect.py all は使いません。

Dropbox-only collector

1
前提確認
日/英の説教サマリーと日/英の週報、合計4ファイルがDropboxにあることを確認します。
2
rh10
collect.py dropbox がDropboxだけを一覧し、対象ファイルを取得します。
3
変換
DOCX / PDFから本文を抽出し、検索・引用に使えるMarkdownへ正規化します。
4
重複判定
内容ハッシュと出力名を照合します。同じ内容は再登録せず、既登録として安全にスキップします。
5
Open WebUI
新規/変更分をファイルとして登録し、Knowledge davar-sermons へ関連付けます。
6
検証
4つの期待ファイルが「新規登録」または「ハッシュ/出力名による既登録」のどちらかであること、失敗件数が0であることを確認します。
Open WebUI SQLiteファイル・Knowledge・モデル関連などのメタデータ
Chroma分割チャンクと埋め込みベクトル
モデル関連付け済み7 Knowledgebible-web / bible-kjv / bible-kougo
davar-sermons / davar-info / davar-web / davar-archive
「7」と「4」の違い:本番3モデルには上記7 Knowledgeが関連付けられています。回答経路guardが必須として内容を検査するDavar corpusは davar-sermonsdavar-infodavar-webdavar-archive の4つです。commentaryは日次件数表の対象ですが、現在の3モデルへは関連付けられていません。

7. Davar AIのcronが毎日巡回するとき

本番rh10では、サーバーのAmerica/Los_Angeles時刻で毎日02:00run_weekly_collect.shを実行します。ファイル名には歴史的にweeklyが残っていますが、現在の実行頻度は日次です。ここでいう「学習」は、収集した文章をKnowledgeへ追加・更新してRAGの検索対象を増やすことであり、ClaudeやOllamaのモデル重みを再訓練する処理ではありません。

日次巡回:収集元からKnowledge・索引・レポートまで

10種類のcollectorを4グループで巡回し、用途別Knowledgeへ差分投入した後、索引、過去版、質問からの改善候補、日次レポートを更新します。

毎日2時のDavar AI cronがOpen WebUIへ認証し、教会サイト、YouTube、外部検索、Dropboxとinboxを4グループで巡回してMarkdown化と重複判定を行い、davar-sermons、davar-info、davar-web、Davar AIモデルの予定情報へ反映した後、固定索引、過去版、前日の質問分析、日次レポートを更新する流れ
同じ接続先を扱うcollectorは直列にして負荷を抑え、接続先が異なる4グループだけを並列化します。 図を拡大

何を、どのように巡回するか

Collector巡回元と取得内容反映先主な境界・安全策
rssDavarの公式Podcast RSS 4系列からエピソードノートを取得davar-sermons音声は取得・文字起こししない。ローカル説教原稿とタイトル重複を除外
hcdavarkg.com/hc/のHouse Church学びの記録を内部リンクで巡回davar-sermons最大500ページ。一覧、タグ、著者、feed、削除済みなどのノイズURLを除外
sitesDavar Web、旧Davarサイト、davar.org、Jun Asai公式サイトと、davar.orgから確認できた関連ミニストリーdavar-infoドメインごとに最大10,000ページ。管理画面、API、feed、Store経路を除外
storestore.davarkg.comdavarkg.com/storejp/の商品一覧・紹介文davar-info最大400ページ。購入済み本文、download、cart、checkout、account、決済は巡回しない
eventsDavar WebのThe Events Calendar APIから今後の予定Davar AI 3モデルのsystem promptKnowledge文書にはしない。毎回マーカー区間だけ置換し、API失敗時は既存予定を変更しない
webDavar WebとJun Asai公式サイトのWordPress REST APIから固定ページ・投稿davar-web決済・アカウント・フォーム系slugを除外。全取得失敗時は現行Knowledgeを変更しない
youtubeDavar Churchの現行・旧2チャンネル、指定archive playlistの字幕、Jun Asaiチャンネルの動画メタデータ字幕はdavar-sermons、Jun Asai情報はdavar-info通常は手動字幕のみ。指定playlistだけASRを許可し、字幕なしは記録してスキップ。Whisperは使わない
discoverDuckDuckGoへ教会名・牧師名など5 queryを送り、第三者サイトの掲載情報を発見davar-info公式サイトへの参照、牧師名、Pasadena+教会語彙などの本人性filterを通過したページだけ
dropbox設定済みDropbox共有folderを再帰一覧し、DOCX / PDFの説教Summary・週報を取得davar-sermonsDropbox content hash、相対path、期待出力名で重複判定。OAuth失敗時は共有ZIP取得を試す
inbox/opt/davar-ai/inbox/へ正規に置かれたDOCX / PDF教材davar-sermons成功後はprocessed/へ移動。MP3は保管だけで文字起こししない

1回のcronで行う処理

1
回答経路guard
収集用signinより先に3モデル設定、5 canary、必須4 corpusを検査します。既知のfunction_calling=legacyずれだけをbackup後に限定修復し、read-back失敗時はrollbackします。Knowledge欠落や一般障害は自動修復しません。
2
実行時認証
ローカルOpen WebUIへsigninして収集用API tokenを取得します。失敗時もguard結果を日次報告へ残して終了します。
3
収集・正規化・upsert
collect.py allが10 collectorを4グループで巡回します。ポライト取得、Markdown正規化、SHA-256差分判定を行い、Open WebUIのupload・処理・関連付け成功後だけ台帳を更新します。
4
削除保護
davar-webで元ページが消えた場合も過去版保存後だけ現行Knowledgeから外します。未確認が20件超かつ取得済みの25%超なら部分障害として一括削除を停止します。
5
3つの索引
暗誦聖句、説教内聖句頻度、聖句→説教の構造化索引を再生成し、davar-archiveへ再投入します。失敗時は既存索引を維持します。
6
過去版
archive_memory.pyが削除/更新前のWeb文書をappend-onlyで保存します。
7
質問分析
stats_autolearn.pyが前日の質問を分類し、既知集約は決定的索引へ、新資料が必要なものだけpendingへ残します。
8
日次報告
daily_report.pyが収集、Knowledge件数、pending、backup鮮度、最初に実行したguardの状態をHTML/textメールへまとめます。
週次タスクとの違い:Macの週次タスクは4資料がそろった後にcollect.py dropboxだけを明示実行し、期待する4ファイルを1件ずつ確認します。日次cronのcollect.py allは広い情報源を追随する定常巡回で、同じDropbox collectorも含みます。
失敗の扱い:1つのcollectorが失敗しても索引・過去版・質問分析・メール報告へ進みます。末尾のdoneだけでは全巡回成功を意味しません。メール、guard state、cron.logを確認します。2026-09-03の本番read-backでは、3モデル、5 canary、必須4 corpusが正常で、修復・error・連続失敗は0でした。

8. デイリーメールは何を調べ、どう対応するか

daily_report.pyは日次巡回の最後に動き、件名[davar] デイリーレポート YYYY-MM-DDのHTML/テキストメールをローカルsendmailから送ります。件名の日付はメール生成日、本文の利用状況は原則として前日の質問です。02:00に開始した全処理の最後に送るため、配信時刻は巡回時間に応じて変わります。

調査 → メール生成 → 受信後の判断

メールは複数の状態を一通へ集約します。異常を見つけたら、表示欄の元データまで戻って原因を切り分けます。

daily_report.pyがMember Webの前日質問、stats_autolearn、Open WebUI Knowledge件数、cronログ、回答経路guard、バックアップ成功マーカー、サーバーのパッチ状態を調べてメールを生成し、受信後に未着、バックアップ異常、不自然な件数、収集失敗、AI回答経路異常、改善候補、再起動、費用変化へ対応する流れ
メールは一次判定の入口です。収集の完全な成否はメールだけでなくcron.logでも確認します。 図を拡大

メールを作るために何を調べているか

メール欄調査元・判定方法報告内容読み方の注意
利用サマリーMember Webの保護された/qstatsから前日の質問ログを取得ユニーク利用者数、質問総数、重複を除いた質問数メールはユーザー別内訳を表示しない。ただし取得失敗が現在は0件表示に見える場合がある
質問の仕分け質問文だけをHaikuで分類。失敗時は「一覧・件数・分布」などの語によるheuristic「うまく返せたと思う質問」と「事前学習候補」回答本文を取得・採点していないため推定。実際の回答品質を保証しない
自己改善ループ当日のstats_autolearn.jsonを読む自動生成した索引、既存索引の更新、新データが必要なpendingpendingは対応・解決登録まで毎日残る。単に通知を消すためにresolveしない
Knowledge件数Open WebUI SQLiteのKnowledgeと関連ファイルを数えるdavar-sermons / info / web / archive / bible-kougo / commentaryの件数と合計件数は存在確認であり、本文品質・検索品質・全collector成功を保証しない
curated docsdata/curated/*.mdのファイル数と見出しを読む事前計算済み索引・要約・集計docの件数件数が同じでも内容更新はあり得る
本日の収集当日のcron.logから特定形式のcollector summaryとingest_records行を抽出一部collectorのnew / changed / skipped、Knowledgeのadded / replaced / failedログ全体のエラー検索ではない。形式が違うRSS、YouTube、Dropbox等の結果や一般ERRORが表に出ない場合がある
回答経路guardatomicに保存したhealth stateと当日のguard結果を読む3モデル設定、5 canary、4 corpus、修復、直近error、連続失敗支部・過去セミナー・Davar固有の聖書理解を含む保護対象の実回答経路を確認。異常時は失敗通知、復旧時は復旧通知を送る
バックアップlast_backup_ok.jsonの成功時刻と保存先を現在時刻と比較正常、成功マーカーなし、または既定48時間超の警告マーカーは最後の成功記録。保存物そのものの復元試験結果ではない
セキュリティ/patchrh10needs-restartingとMember Web hostへのSSH読取両hostの要再起動、WordPress plugin保留件数、直近image更新log「不明」は正常ではなく調査取得失敗。自動更新後も翌日残る場合は要確認
API費用質問数に固定の想定token数と参考単価を掛け、日別台帳から月合計を算出当日・当月のSonnet/Haiku概算実tokenと請求額ではない。傾向を見る値で、最終確認はprovider請求情報を使う

メールを受け取ったら何を確認するか

1
メール到着
朝に当日件名のメールがあるか確認します。未着なら「利用0件」ではなく監視障害として、cron.logの開始/doneメール送信完了daily_report failed、mail queue、sendmail/Postfixを確認します。
2
最上部のbackup
緑なら最終成功時刻と保存先を確認します。赤なら保存先のmount/空き容量、Mac側backup log、last_backup_ok.jsonを調べ、再実行後に新しい成功時刻と保存物を確認します。
3
件数の妥当性
質問0件やKnowledge N/Aが普段と違わないか確認します。不自然な0件は「利用なし」と決めず、qstats認証・endpoint、Open WebUI DB接続、当日のcron実行を切り分けます。
4
AI回答経路
guardが3モデル/5 canary/4 corpusすべて正常か確認します。異常時は自動修復のread-backとrollback結果を確認し、未解決ならDavar固有の回答を安全停止したまま原因を直します。
5
収集の完全確認
メールの収集表だけで完了判定せず、cron.logERRORWARNerrors=1以上failed=1以上を検索します。異常sourceを直した後、そのcollectorだけを承認済み手順で再実行し、投入件数と失敗0件を確認します。
6
改善候補
prelearnは推定なので、まず既存Knowledge・索引で本当に答えられないか確認します。pendingは必要資料/集計を追加し、Knowledge登録と質問検証が終わってからstats_autolearn.py --resolve <ID>で通知を閉じます。
7
patchと費用
要再起動が翌日も残る、plugin件数が増える、状態が不明なら自動更新logとservice healthを確認します。費用概算の増加は質問数と照合し、必要時だけ実請求を確認します。
8
対応完了
原因、実行した修正、再実行結果、Knowledge件数、backup成功時刻など、コマンドで確認した証拠を運用記録へ残します。翌日のメールで同じ警告が消えたことも確認します。
監視の読み方:回答経路guardは保護対象の実回答を検査しますが、collector表はcron.logの一部形式を要約したものです。メール受信だけで全collector成功とは判断せず、qstatsの不自然な0件も「利用なし」と決めません。guard stateと元logの両方を確認します。
正常時の終了条件:メールが届いた、回答経路guardが3/3・5/5・4/4で正常、backupが新しい、件数が普段の範囲、cron.logに未確認のERROR/WARN/正数failedがない、pendingに未判断項目がない、patch警告が残っていない、の順に確認します。

9. ユーザーがBible AIへ質問したとき

「内部DBからClaudeへデータを渡す」という理解は概ね正しいですが、その役割を担うのはOllamaではなくOpen WebUIのローカルRAGです。全文DBを渡すのではなく、検索で選ばれた少数の本文断片だけをClaudeへ送ります。Open WebUI 0.11.0でbrowser sessionのないAPI質問にもKnowledgeを確実に挿入するため、本番3モデルはlegacy RAGを明示しています。

質問 → ローカル検索 → Claude → 回答

1
Davar App
現在の質問と直近の会話を POST /app/chat へ送ります。
2
Member Web
トークン認証、レート制限、質問ログ、言語判定を行い、最大直近6メッセージと質問をOpen WebUIへ中継します。
3
Open WebUI
検索用質問のAI生成は無効です。そのため、ユーザーの質問文をそのまま検索キーとして使います。
4
ローカルRAG
bge-m3で埋め込みを計算し、BM25 50%Chroma vector 50%のハイブリッド検索で上位8件を取ります。
5
再順位付け
bge-reranker-v2-m3で関連度を再評価し、上位6件へ絞ります。埋め込み・検索・rerankはすべてrh10内です。
6
コンテキスト作成
選ばれた断片を出典情報付きの <source> として最後のユーザーメッセージへ挿入し、別メッセージのシステム指示と直近履歴を一緒にモデルへ渡します。
7
LiteLLM → Claude
通常モデル davar-bible-assistant-fastclaude-sonnet-4-6へ送られ、回答を生成します。
8
根拠を検証
支部・本部、過去セミナー、Davar固有の教え・解釈・説教・信仰・立場への質問は、承認済みKnowledgeに質問内容と関連するDavar資料と抜粋があるか検証します。なければ生成回答を破棄し、HTTP 503で安全停止します。
9
回答を返す
WordPressが分類ラベルをserver側で付け、Knowledge名、本文中の[N]、スコア上位の根拠抜粋最大5件をアプリへ返します。一般的な聖書質問は通常回答としてHTTP 200で継続します。
項目稼働値場所
Open WebUI0.11.0、legacy RAGを明示rh10
埋め込みBAAI/bge-m3ローカル
検索BM25 0.5 + vector 0.5、top 8ローカル
rerankerBAAI/bge-reranker-v2-m3、top 6ローカル
チャンク800文字相当、overlap 100ローカル
通常の回答モデルclaude-sonnet-4-6、temperature 0.3Anthropic

Davar固有の回答

「Davar固有の回答(Davar資料・出典で確認済み)」と表示します。質問に関連する承認済みDavar資料・出典・抜粋を取得できない場合は、推測せずHTTP 503で停止します。

通常回答

「通常回答(Davar固有の教え・見解としては検証されていません)」と表示します。一般的な聖書の説明は利用できますが、Davar Church固有の教えを示すものではありません。

server所有の表示:分類ラベルはモデルに選ばせません。serverが予約済みラベルを回答・履歴から除去し、出典検証後に正しいラベルを付けます。空、不可視、ラベルだけの回答はHTTP 502です。

10. LiteLLMは何をしているか

LiteLLMは、Open WebUIとAnthropic Claudeの間に置かれた内部専用のモデルゲートウェイ兼変換アダプターです。Open WebUIはOpenAI互換形式でモデルを呼び出し、LiteLLMがそのリクエストをAnthropic形式へ変換してClaudeへ中継します。

Open WebUIとClaudeの「通訳・受付」

Open WebUIRAGで選んだ断片を含む
OpenAI互換リクエスト
LiteLLM内部ネットワークの:4000
外部へポート公開なし
Anthropic ClaudeAnthropic形式で回答生成
Open WebUIへ応答OpenAI互換形式にそろえて返す

LiteLLMが行うこと

  • 共通インターフェース:/v1/models/v1/chat/completionsのOpenAI互換APIをOpen WebUIへ提供します。
  • モデルの振り分け:claude-sonnet-4-6claude-haiku-4-5を対応するAnthropicモデルへマッピングします。
  • パラメーターの正規化:Anthropicが受け付けないOpenAI/Ollama由来の項目を落とし、余分な入力によるHTTP 400を防ぎます。
  • 認証の集約:Anthropicの認証情報をrh10の実行環境だけに保持して、上流APIへ付与します。

LiteLLMが行わないこと

  • Knowledgeの保存、文書分割、埋め込み生成
  • BM25/Chroma検索やrerankerによる絞り込み
  • どの本文断片をClaudeへ渡すかの判断
  • Claude障害時のOllamaへの自動切り替え

これらのRAG処理はOpen WebUI、ローカル回答はOllama、アプリ認証と公開APIはWordPressの担当です。

Open WebUI側生成先経路
davar-bible-assistant-fastclaude-sonnet-4-6LiteLLM → Anthropic
davar-bible-assistantclaude-haiku-4-5LiteLLM → Anthropic
davar-bible-assistant-localqwen3:8bOllamaへ直接(LiteLLMを通らない)
なぜ置くのか:Open WebUI側は同じOpenAI互換の呼び方を保ったまま、Claudeを利用できます。モデル固有のAPI形式、認証、非対応パラメーターの差をLiteLLMで吸収するため、Open WebUIのRAG処理と外部モデル接続を分離できます。

11. Ollamaは何をしているか

通常のClaude経路

Open WebUI RAGLiteLLMClaude Sonnet 4.6

  • 埋め込み、BM25、vector検索、rerankはOpen WebUI側
  • Ollamaは検索にも、DBからClaudeへの受け渡しにも入らない
  • アプリ/Webの現在の既定経路

ローカル回答モデル

同じOpen WebUI RAGOllama qwen3:8b

  • davar-bible-assistant-localを選んだ場合に回答生成を担当
  • Claudeを使わず、同じ選定済みRAG断片をローカルモデルへ渡す
  • 手動/設定変更による代替経路
重要な訂正:Ollamaは「使えるフォールバックモデル」ですが、現在のWordPressは davar-bible-assistant-fast を固定指定しています。Claude障害時に自動でOllamaへ切り替わる処理は確認できません。現状は運用者がモデル設定を変更して使う代替経路です。

12. 外部連携台帳

外部の情報源、生成API、通知、配信、利用者が開くサービスを一つの台帳にまとめます。「自動でデータを交換する連携」と「リンクを開くだけの連携」は同じものとして扱いません。2026年9月3日に、Davar App、Member Web、Davar AI collector、週次処理、配布scriptの実装と運用記録を照合しました。

外部連携方向と用途送受信するもの失敗時・境界
Davar Webと教会運営site
davarkg.com / www2.davarkg.com / youth.davarkg.com / davar.org / junasai.com / www2.junasai.com、確認済み関連ministry
Member WebとDavar AIが定期取得公開記事、固定page、event、newsletter、Church School、公式情報区分ごとの取得失敗を記録し、未確認内容を新しい事実として扱わない
Blogger / Blogspot
davarjp.blogspot.com
blogger.googleusercontent.com
日本支部blog取得、定期import、認証済みアプリ投稿の作成・編集・削除・画像保管差し替え公開記事metadata、title/comment、label、投稿日、原記事URL、公開原画像専用投稿者、immutable marker、記事ID、host、sourceURL、削除hash、原画像hash、mail間隔、書込後read-backを検証
Dropbox API / 共有folder週次入出力、Davar AIのDropbox collector日英の説教Summary・週報、生成MP4 / SRT4入力、hash、公開URL、Knowledge登録を個別確認。AppはDropboxへ直接接続しない
iCloud Photos / OneDrive / Amazon Photos / Dropbox Transfer / Dropbox共有folderMember Webが利用者指定の公開共有URLから教会写真・動画をserver側import選択前manifestと、利用者が確定した公開共有media公開HTTPS共有URLだけ。login/password必須共有は拒否し、provider障害時は端末uploadを案内
YouTubeAppの最新動画RSS・再生、Davar AIの字幕/catalog収集公開feed、playlist、動画metadata、利用可能な字幕対象channel/playlistを固定。取得不能動画を成功扱いにせず、AppはWeb/YouTube appへfallback
DuckDuckGo / Davar StoreDavar AIの限定検索と商品情報collector公開検索結果、許可domainの公開商品説明5つの固定queryと本人性/domain filterを通った情報だけを候補にする
AWS Polly / S3週次処理と案内動画scriptから音声を生成英語Ruth long-form、日本語Takumi neuralへ渡す原稿、合成音声、speech marks認証情報は実行環境だけに保持。task結果、生成、長さ、後続media変換を確認する
Anthropic Claude APILiteLLM経由でBible AI回答と一部運用分類を生成質問、直近履歴、system指示、検索で選ばれた断片Knowledge全文は送らない。Davar固有回答は関連資料をserverで再検証し、不足時はHTTP 503
Apple Push Notification service (APNs) / Firebase Cloud Messaging (FCM)Member WebからiOS/Androidへ管理者確認済み通知、またはLA時間午前8時の日次サイト更新を送信端末登録識別子、2種類の購読選択、注文通知用の自己申告の所属支部ID、公開Inbox項目とchannelを指す最小通知payloadprovider credentialはserverだけに保持。管理者/サイト更新の対象者をserverで分離し、公開と送信をidempotency keyで結ぶ。注文通知の予約対象は固定し、配信時点の所属支部との一致を判定。構成不足は503
Vimeo / IBM VideoAppが既存の外部配信動画を表示または開く公開動画URLと再生要求教会media原本の保存先ではない。provider別表示から安全な外部URLへ渡す
コルネリオ会
messages.davarkg.com
利用者がMediaメニューから選んだ時だけ、固定された公開pageをApp内Web画面で表示選択された公開HTTPS pageと通常のWeb requestbackground同期、Bible AI認証、Member Webへの内容取込は行わない。serverは許可済み組み込み識別子を送り、正確なURLはAppが保持する
Facebook / Instagram / Apple Maps / Google Maps / Amazonほか案内link利用者操作時だけ外部appまたはbrowserを開く選択された公開URLbackground同期ではない。server配信文書は4つの許可root domainだけ、内蔵linkはAppに明示したURLだけを開く
Zippopotam.us
api.zippopotam.us/us/{ZIP}
Member Webで米国ZIPから会員間のおおよその近さを計算米国ZIP codeだけを送信し、緯度・経度を受信氏名、住所、member IDは送信しない。API失敗時は距離情報を使わない
Bible本文・学習資料の配布元/出典link
eKotoba、BibleEngine、OpenScriptures、Hebrew Wikisource、First1KGreek、Byzantine Majority Text、eBible.org、STEPBible、CrossWire、Bible Researcher
build時に同梱databaseを作成。利用者操作時に出典linkを開く公開聖書本文、原語tag、辞書・注解・引照・節番号対応・出典URLruntime自動同期ではない。ライセンスと既知の欠落をApp内に表示し、利用者のメモ等は送らない
Apple App Store / App Store ConnectiOS・tvOS build、metadata、screenshot、TestFlight/公開配布署名済みbuildとstore情報runtime content経路とは分離。TestFlight内部配布とApp Review/公開は別gateでread-back確認する
Cloudflare edgesoftware.jly.mesoftware.cblh.us等の公開入口TLS Web requestとcache可能な公開静的content技術資料と図は認証後もprivate, no-store。公開後はHTTP 200だけでなく両hostのhashを照合
運用・注文送信emaillocal Postfix/sendmailの日次reportとserver生成の注文メール集約監視情報・対応可能error、または管理者指定To/Ccへ送る日英注文内容credential・Knowledge全文は送らない。注文宛先は管理者設定とし、送信内容と履歴を監査する

iOS 1.20 build 242以降:Member Webは設定済み2チャンネルの公開YouTube Atom feedと、日本語・英語のStore公開商品APIから新着を収集します。更新ページ、動画、みことばカード、Store商品のタイトルとURLを日次お知らせに固定保存し、Pushは区分別件数の要約と参照IDだけを送ります。利用者は通知→詳細→正確な公開ページ・動画・商品へ進めます。YouTubeとStoreは初回の正常取得を静かな基準作成とし、取得失敗時は以前の基準を保持します。Storeは言語ごとの最新公開日と同日のURL集合をwatermarkとして管理し、Store取得エラーがある回は両言語の基準を進めません。Instagram・Facebook・Xの自動収集は公式API接続待ちです。期限未設定のお知らせは公開30日後に期限切れとなり、注文自体は削除しません。

更新ルール:外部service、domain、API、公開共有provider、通知provider、配布先を追加・削除・用途変更するときは、この日英台帳、該当する構成図、データ境界、検証scriptを同じ変更で更新します。文書検証は全台帳IDが日英両pageにそろっているかを確認し、片方だけの更新を失敗にします。

13. 保存場所と外部へ出るデータ

データの境界

Member WebWordPress DB、認証、質問ログ、復元対象chat/注文identity、注文設定・変更・送信履歴、Home Snapshot、みことばカードBlogger所有権・label・画像、教会メディア原本・metadata、公開アセット
Davar AI ローカルOpen WebUI SQLite + Chroma
Knowledge全文、チャンク、埋め込み
Anthropic Claude質問、直近履歴、システム指示、検索で選ばれた断片だけ
外部へ送られないもの:Knowledgeの全文DB、ChromaのベクトルDB、全チャンク、埋め込み値、WordPressの認証データ、IP/セッション由来の質問ログ識別子はClaudeへ丸ごと送られません。

週次データの正本と配布先

  • Dropbox:週次入力とMP4 / SRT生成物
  • Member Web:アプリ/members-home向けPDF / MP4 / VTT
  • Member Web:みことばカードの投稿日、無変換の原画像、一覧用縮小PNG、原記事のsourceURL、削除URLのhash
  • Member Web Private領域:教会写真・動画の原本、撮影日folder、公開状態とevent tag metadata
  • ローカルMac:処理中ファイルと完了後アーカイブ

AI検索用ストア

  • Open WebUI SQLite:ファイル、Knowledge、モデルの関連
  • Chroma:検索用チャンクと埋め込みベクトル
  • Claude:問い合わせごとに選ばれたコンテキストだけを処理
Bloggerの境界:Bloggerは公開原記事の正本として残ります。Member Webは外部原記事の読取importと、専用投稿者によるアプリ投稿の作成・更新・削除を分離し、専用OAuth/mail credentialはserver secretだけに保持してアプリへ渡しません。原画像、一覧用縮小版、投稿日、原記事URL、所有権、label snapshotを別項目で保持します。
聖書データの境界:DavarBible.sqliteと利用者のhighlight・note・検索履歴は端末内です。Bible AIを使った質問だけがMember Web、Davar AI、選択した回答modelへ送られます。