Evidence catalogue

構成根拠

役割、実行単位、通信、データ、環境差を実装・設定・資料へ追跡できます。

調査基準は 2026-10-01 16:33 JST、main の 30b101f70ea31c11706ea148f7272fbc29053a69 です。開始時の作業ツリーはcleanでした。本資料と図は、このコミットのリポジトリ内容を読み取った結果であり、クラウド管理画面、稼働ホスト、実データ、ログ、資格情報には接続していません。DB旧方式の履歴基準だけはtag v2026.09.29です。

主図は「production用設定に基づく論理構成」です。コードや設定の存在と実稼働を区別し、全ての外部資源と本番プロセスは実稼働未確認として扱います。

先に押さえる結論#

  1. 通常のWeb/API通信も Cloudflare Edge と Tunnel を通ります。Cloudflare Accessによるスタッフ認証は admin hostだけで、一般利用者はアプリのopaque CookieとPostgreSQLセッションで認証されます。
  2. 一般利用者のブラウザはAuth WorkerやOpenAIを直接呼びません。same-originのNext.js APIがAuth Workerへ、productionのAI WorkerがOpenAIへサーバー側から接続します。
  3. 業務データと認証秘密は別保存先です。目標・成果物・相談・アプリセッション・AIジョブは自社管理PostgreSQL、パスワードハッシュ・OTPハッシュ・同意記録はCloudflare D1です。
  4. productionのAI要求はPostgreSQLの永続command/jobへ入り、AI WorkerがOpenAIを呼び、結果をPostgreSQLへ反映します。送信前に氏名alias化とメール・学生ID・電話・secretの置換を行い、Responses APIには store: false を指定します。
  5. ファイルupload/object storage実装は確認できません。タスクは外部HTTPS URLを保存し、利用者がそのリンクをブラウザから直接開きます。
  6. blue/green、監視契約、バックアップ入力例は存在しますが、実ホスト上の稼働、Cloudflareポリシー、OpenAIアカウント設定、定常バックアップは未確認です。
  7. 業務PostgreSQLの主要経路は、9月29日時点の組織全体snapshotと組織共通lockから、対象別queryとentity transactionへ移行しています。通常production APIの旧snapshot mutationは遮断されています。

利用者と権限#

役割主な用途サーバー側の認証・認可確認範囲
member自分または明示的に所属するチームの目標・成果物・相談を作成・更新PostgreSQLのsession/user/org/membershipを照合。viewer拒否、owner/team membership、組織、cycle、編集状態をAPI側で検査R001、R002、R003、R015、R016
viewer許可されたチーム、提出済み成果物、handoff済みprojectを閲覧canWriteOwner は常に拒否。team accessと提出状態/handoffをAPI側で検査R001、R002、R003
mentor管理hostから支援・運用機能を利用Cloudflare Access assertionをproxyとroute helperで再検証し、PostgreSQLのstaff identityへ結合。一般の管理操作を許可R004、R008、R009、R010
adminmentor機能に加え、admin-only管理操作通常の有効なAccess assertionを再検証し、requireAdminOnlyStaff でroleを再検査R004、R008、R009

画面の表示制御だけを権限根拠にはしていません。上表は proxy.ts、route helper、membership check、PostgreSQL session queryで確認できたサーバー側制御です。

実行単位と責任境界#

ID実行単位/サービス配置・技術役割稼働確認主な根拠
N01一般利用者ブラウザ利用者端末app hostの画面・same-origin API役割・route実装のみ確認R001–R003、R015
N02スタッフブラウザ利用者端末admin hostの管理画面役割・route実装のみ確認R001、R004、R008
N03Cloudflare Edge / TunnelCloudflareapp/admin公開HTTPSとTunnel中継設定例のみ、実resource未確認R005–R007
N04Cloudflare AccessCloudflareadmin hostのスタッフ認証SaaS側検証実装のみ、policy未確認R008–R010
N05cloudflared自社ホスト上のsystemd process外向きTunnel接続と固定originへの中継unit/orchestrator実装のみR006、R011
N06HAProxy自社ホスト上のsystemd processloopback固定portとactive Web slot切替unit/config生成実装のみR005、R012、R013
N07かけあい WebNext.js/Node.js Docker containerUI、API、session、Access再検証、認可、DB更新、job投入blue/green設定のみ、active slot未確認R014–R017
N08かけあい AI Worker同じNext.js imageのworker role containerdurable job claim、OpenAI呼出、結果反映blue/green設定のみ、live worker未確認R017–R020
N09業務PostgreSQLPostgreSQL 17 container/internal network業務、session、監査、AI queue/resultの正本compose/migrationsのみ、live DB未確認R021–R024
N10一般利用者Auth WorkerCloudflare Workers/Honodomain、OTP、password、reset、短命JWTproduction configのみ、deployed version未確認R025–R027
N11認証D1Cloudflare D1credential/OTP/reset hash、同意、rate limitbinding/migrationsのみ、live DB未確認R025、R028、R029
N12認証メール配信Cloudflare Email Sending bindingOTPとreset通知binding/codeのみ、配信設定未確認R025、R030
N13OpenAI API外部サービスResponses、Embeddings、Responses web searchintegrationのみ、account設定/実呼出未確認R031–R034
N14外部ファイル保管先利用者指定の任意HTTPS serviceファイル本体を保持URL fieldのみ確認、provider未特定R035、R036

同じNext.js imageをWeb roleとWorker roleに分けています。独立したコードベースのマイクロサービスではなく、OKR_CAI_RUNTIME_ROLE と個別containerで実行責務を分離したものです。

通信と認証#

実線矢印は要求・主要データの論理方向で、応答は同じ接続を戻ります。E05だけは要求方向ではなく、cloudflared が外向きにTunnel接続を確立する方向です。E15はアプリ通信ではなく、利用者による任意のリンク遷移です。

ID通信元 → 通信先目的・主要データ通信・認証状態主な根拠
E01N01 → N03公開ページ、ログイン後画面、same-origin API。Cookie、入力、目標、成果物、相談HTTPSconfig+実装、live未確認R006、R015、R037
E02N02 → N04admin hostアクセスHTTPS / AccessSaaS側実装、Access policy未確認R008、R010
E03N04 → N03認証済み管理要求Access assertion付きHTTP論理経路R008、R009
E04N03 → N05通常Web/APIを含むTunnel内の要求Cloudflare Tunnelconfig、live未確認R005、R006
E05N05 → N03connectorによる外向き接続確立Tunnel connection実装、live未確認R011
E06N05 → N06public hostを固定originへ転送loopback HTTP :3001、Host保持production config、live未確認R005、R012、R013
E07N06 → N07active Webへ転送、旧Webはdrainloopback HTTP :3002/:3003production config、active slot未確認R012、R013
E08N07 → N09session照合、業務読書き、監査、AI command/job投入PostgreSQL protocol。production例はTLS require実装+設定、live未確認R016、R021、R022、R038
E09N07 → N10登録OTP、登録、login、resetHTTPS POST、service client ID/secret。productionは非loopback HTTP拒否実装、live未確認R026、R039、R040
E10N10 → N11認証データの保存・照合、期限切れrecordの日次cleanD1 binding / Cron実装+設定、live未確認R025–R029
E11N10 → N12OTPとreset通知Email binding実装+設定、live未確認R030
E12N07 → N04Access JWTの再検証HTTPS JWKS、RS256、issuer/audience実装、実endpoint未確認R009、R010
E13N08 → N09job claim、lease、attempt、結果materializePostgreSQL protocol/TLS実装、live未確認R018–R020
E14N08 → N13生成、feedback、embedding、調査HTTPS POST、API key、最小化済み入力、Responsesはstore:false実装、account設定/実呼出未確認R031–R034
E15N01 → N14保存済みHTTPS URLを利用者が任意に開くBrowser direct HTTPSURL fieldのみR035、R036

公開ページ(login/register/reset/terms/privacy/health等)も保護ページ/APIも、同じapp hostの公開入口・Tunnel・HAProxy・Webを通ります。違いは、公開routeではアプリsessionの解決を省略し、保護routeではPostgreSQL sessionを要求することです。一般利用者のapp hostではCloudflare Access assertion/cookieを削除し、クライアントが偽装した x-okr-* headerも削除します(R015、R037)。

データの流れと保存#

補助図Eでは、認証・セッション、画面・業務データ、AI処理、外部ファイルの4経路を横方向に分け、どこを通り、どこへ保存されるかを示します。詳細は データの流れと保存先 にあります。

データの種類発生元送信先・経由先処理主体永続保存先一時保存・ログ・バックアップ削除・保持の確認範囲根拠
app session bearerN07がlogin完了時に発行、N01がCookie保持N01 ↔ N03→N05→N06→N07Webがraw tokenをSHA-256化して照合N09にtoken hash、user/org/role、失効・期限。raw bearerはDB保存しないBrowserはHttpOnly/SameSite=Lax/Secure production cookie。通常8時間。DB backup実装は未確認期限・logout/reset失効は実装。backup保持は未確認okr-cai-saas/src/lib/session.ts:43-46,86-104,232-242,250-317、R016、R023
一般認証情報N01の登録/login/reset入力N01→N07→N10→N11、OTPはN12Auth Workerがdomain、OTP、PBKDF2 passwordを検証N11にemail、password salt/hash、credential version。OTP/reset tokenもhash。N09はauth subjectとcredential floorのみWorker structured logは有効、invocation log/tracesは無効設定。raw password/OTPの永続保存は実装上なし短命recordの日次clean実装。provider log/Time Travel/本番保持は管理画面未確認R025–R030、R039、R040
規約・プライバシー同意N01の登録N07→N10→N11Auth Workerが登録と同一atomic writeN11のdocument type/version/accepted_atD1復旧履歴はprovider機能。実設定未確認policyは通常環境終了後1年以内。実運用・削除jobは未確認R027、R029、docs/legal/terms/02_かけあい_プライバシーポリシー_v1.6.md:147-157
profile・組織・team・role登録、招待、管理操作N01/N02→N07→N09Web/APIとPostgreSQL repositoryN09JSON logはbody/PIIを保存しない契約。DB backupは未確認policy上、目標等以外は終了後1年以内。実削除運用は未確認R001–R004、R022、.github/release/production-observability.v1.json:10-38
目標・成果物・提出版N01、N02N01/N02→N07→N09Webがrole/owner/team/org/cycleを検査N09のartifacts/version/submission等app processの一時object、Docker json-file log。binary fileは含まないpolicy上は固定年数なしで必要性を定期見直し。実削除/返却運用は未確認R002、R003、R022、docs/legal/terms/02_かけあい_プライバシーポリシー_v1.6.md:147-157
活動記録・task進捗N01/N02N07→N09Web/APIN09log本文は監視契約上禁止DB schemaに保持。個別retention jobは未確認okr-cai-saas/db/postgres/migrations/0001_initial.sql:610-706、R024
相談本文・会話N01N07→N09(永続command)→N08→N13→N08→N09Webが権限・rate limit・idempotencyを検査、WorkerがAI処理N09のworkflow messages、command/job、生成されたassistant内容OpenAI送信前にalias/redaction。Web非production経路にはprocess memory response cacheがあるがproduction durable経路はPostgreSQLOpenAI requestのstore:falseは実装確認。providerのabuse log/契約保持はrepoだけでは保証不可。policy記載は最長30日等R031、R032、R034、R038、okr-cai-saas/db/postgres/migrations/0001_initial.sql:472-563
feedback・AI生成物成果物/提出版とAI応答N07→N09→N08→N13→N08→N09Workerがfenceを再検査し業務entityへmaterializeN09のfeedback/artifact versions等。AI runはhash、token count、provider IDs等provider responseは処理中memory。監査telemetryは本文ではなくhash/count中心app側結果は業務データと同方針。provider側保持は別確認R020、R022、R031、R032
matching用embeddingN09のmember profile/回答等N08→N13Workerが正規化・重複排除・氏名等を最小化vectorは呼出結果として処理。永続vector storeは確認できず、matching結果はN09process内Map cache。provider側ログは未確認cache TTL/生存期間はprocess依存。provider保持は別確認R031、R033、okr-cai-saas/src/lib/admin-matching-openai.ts:23-62
企画調査企画の相談・既存文脈N08→N13。OpenAIのweb_search toolが外部情報を検索OpenAI Responses APIsource metadataと生成内容をN09の会話/結果へ反映store:false。検索先の選択・外部処理地域はアプリから制御・確認できないprovider側保持・search先はrepoから未確認R031、R034
外部ファイルN01が既存ファイルのURLを登録URLはN07→N09。ファイル閲覧はN01→N14 directWebはHTTPS URL形式だけ検査N09にURLとfilename。ファイル本体はN14N14側のcache/log/backupはprovider依存外部providerと利用者契約に依存し未確認R035、R036
スタッフAccess identityN02/Cloudflare AccessN02→N04→N03→N07、N07→N04 JWKSAccessがedge認証、WebがJWTを再検証しN09 staff identityへ結合N09のstaff identity。Access側ログの有無・保持は管理画面依存policyは標準Access log 24時間と記載するが現契約/設定は未照会実保持は未確認R008–R010、docs/legal/terms/02_かけあい_プライバシーポリシー_v1.6.md:103-113
application/DB logN05–N10container stdout/json-file、Worker observabilityDocker/Cloudflarehost logまたはprovider logapp containerは10MB×5、DBは10MB×3のrotation設定。監視契約はPII/body/query禁止・30日blue/green container log rotationは実装。集中log sink/30日運用は未確認deploy/local-bluegreen/local-bluegreen.mjs:232-287、R021、R025、.github/release/production-observability.v1.json:10-38
backup/recoveryN09/N11想定backup repository、D1 Time Travel運用者/provider定常backup先は未確定policyは復旧backup 3暦月、production入力例は30日。定常pg backup jobは見つからない実行schedule、暗号化、offsite、復元試験、D1復旧点は未確認docs/legal/terms/02_かけあい_プライバシーポリシー_v1.6.md:147-157、config/pc-deploy.inputs.example.env:62-73、docs/operations/backup/backup-capacity-estimate_okr-cai-saas_2026-08-27.md:1-25

「国内サーバーに保存」はプライバシーポリシーの記載であり、N09の実所在地をリポジトリだけで実証したものではありません。また、N03/N04/N10/N11/N12/N13では通信処理・ログ・復旧履歴等が生じ得るため、「業務DBが国内なら全処理が国内」とは扱っていません。

環境と運用差#

項目production用設定(主図)stagingdevelopment/localstandalone demo
app runtimeblue/green Web + Worker、bridge networkblue/green Web + Worker、host networknext dev/standalone、通常SaaSはPostgreSQL別workspace/build、sample data
公開originloopback :3001 → HAProxyloopback :3200 → HAProxylocalhost。公開Tunnelは必須でないprofile demo / port 3100例
Web slot:3002 / :3003:3201 / :3202単一process単一demo process
Worker slot:3012 / :3013:3211 / :3212role未指定ならcombinedscripted/sample AIを許可
PostgreSQLinternal Docker network、TLS require例host公開local Docker DB、PITR代替ではない.env.local.exampleのDBsample store(demo限定)
一般利用者認証Auth Worker production env + D1Auth Worker staging env +別D1設定optional dev authは非productionだけdemo auth
スタッフ認証Cloudflare AccessCloudflare Accessoptional dev staff sessiondemo role
OpenAI keyResponses/Embeddingsを分離共有を許可developer設定scripted demo可
実稼働確認未確認未確認この調査では起動せずこの調査では起動せず

根拠: config/local-bluegreen.production.example.json:1-52、config/local-bluegreen.staging.example.json:1-48、docs/operations/bluegreen/local-bluegreen-deployment.md:3-56、okr-cai-saas/package.json:6-10、okr-cai-saas/.env.local.example:1-21,49-83,112-153、compose.yaml:1-121。

compose.yaml には単一のcombined runtimeも残ります。主図は2026-10-01時点で別途実装されているproduction用blue/green構成を選びましたが、実ホストがどちらを採用したかは確認できません。CIはbuild/test/sign/approval evidenceを作りますが、production deployment自体は外部実行が必要です(.github/workflows/promote-release.yml:420-587)。

Blue-Green Deployment構成と旧構成#

補助図C/Dは、production runtime方式の違いだけを同じ粒度で比較します。実ホスト上の採用方式を断定するものではありません。

観点Blue-Green Deployment構成旧・単一runtime構成根拠
入口cloudflared → 固定HAProxy :3001cloudflared → 単一container :3000R041、R042、R045
実行単位active slotにWeb ×1 + AI Worker ×11 combined container内にWeb/API + WorkerR043、R046–R048
AI Worker container数平常時1、更新中のみ新旧2平常時1。更新時は旧を停止後に新を起動R043、R044、R045
Worker内processorfeedback、generation、command materializerの3系統同じ3系統がcombined process内で動作R046、R047
更新順序空slot起動 → readiness → HAProxy切替旧container停止・削除 → 新container起動 → readiness後Tunnel開始R044、R045
旧Web新規流入を止め、接続数0までdraincontainer停止で終了R041、R044、R045
AI処理中の更新旧Workerが旧release処理を継続。job・attempt・command・provider leaseが全て0で停止combined process停止時に終了。shutdown drain既定OFFR041、R043、R044、R049–R052
DB新旧slotで共有するPostgreSQLcontainer外のPostgreSQLR041、R042、R045、R048
更新制約同じmigrationVersionの通常更新。初回移行・非互換DB変更は計画停止blue/greenのmigration gateと同時稼働はないR041、R045

停止時間を生じさせない切替は、repositoryが定義するBlue-Green Deploymentの通常リリース手順です。可用性SLA、drain timeout超過時の継続性、強制killやhost停止、実環境での成功実績は確認していません。詳細説明は Blue-Green Deployment構成と旧・単一runtime構成の比較 にあります。

DB操作・処理の新旧方式#

補助図F/Gは業務PostgreSQLだけを対象に、read、write、AI Workerの同じ3経路で比較します。旧方式はtag v2026.09.29へ固定し、現在方式は上記の調査基準commitで確認しました。

観点2026-09-29時点現在根拠
Readrevision別cache。miss時は組織内41業務表を全量read・decoderoute、actor、team、artifact等の必要行を限定SQL・cursor/LIMITで取得R053、R055
画面用data組織全AppDataからhandlerが配列検索取得行だけのDTOまたはAppData互換projectionR053、R055
Write lockorganization共通pg_advisory_xact_lock対象行lockまたはentity revision/lease CASR053、R056、R058
Write処理全量read・structuredClone後、変更aggregateを書き、組織revision更新・全量再検証live認可後、対象行・必要な履歴/監査/outboxだけを短いtransactionで更新R053、R054、R056、R058
独立write同じ組織なら共通lockで直列化異なるentityは原則として独立。同一entityの競合だけを検出R053、R054
AI queue永続job、claim、leaseは存在永続構造を維持し、release条件とSKIP LOCKED claimを使用R019、R054、R059
AI文脈組織全snapshotから対象を解決対象workflow graph、参照元、直近messageへ限定R054、R060
Provider待機前後のDB処理がsnapshot依存provider I/OをDB transaction外で実行R054、R060
Pool保護lock待ちがconnectionを保持し、pool枯渇が他処理へ波及checkout前のbounded admission、critical予約枠、期限超過を503 + Retry-Afterへ変換R053、R057、R061
旧repository通常read/writeの中心import・保守・bootstrap・非本番fallback用。通常production mutationは遮断R054、R062

「対象別query」は1 SQLを意味しません。対象の認可、依存関係、最近の履歴を、複数の限定SQLで組み立てます。また、advisory lockを全廃したわけではなく、AI enqueueのsingle-flight等は対象を狭めたlockを使います。詳しい処理順と履歴ソースの再現方法は DB操作・処理の新旧比較 にあります。

主要ノード・接続の追跡方法#

主図のN01–N14・E01–E15と、補助図のZ01–Z08・ZE01–ZE10・L01–L06・LE01–LE06・F01–F21・FE01–FE17・O01–O17・OE01–OE13・C01–C17・CE01–CE13は architecture-model.json の evidenceRefs から次の根拠台帳へ追跡できます。状態の意味は次の通りです。

  • repository-confirmed: 実装またはschemaを確認した。実稼働を意味しない。
  • repository-confirmed-live-unverified: production向け設定・unit・連携実装を確認したが、外部resourceやprocessの稼働は未確認。
  • repository-confirmed-historical: Git履歴と後続の障害調査資料で旧時点の実装を確認した。
  • repository-confirmed-staging: 実装に加えてStaging検証記録を確認した。本番稼働を意味しない。
  • documentation: 資料上の記述。実装根拠とは区別する。

根拠台帳#

Ref相対パス:行種類確認内容
R001okr-cai-saas/src/lib/types.ts:3-13,120-143,183-196実装member/viewer、mentor/adminの型
R002okr-cai-saas/src/lib/route-helpers.ts:67-195実装owner/team/org/cycle/提出状態を考慮した読書き認可
R003okr-cai-saas/src/lib/team-membership.ts:3-21実装更新は明示team membershipを要求
R004okr-cai-saas/src/lib/route-helpers.ts:198-258実装staff/admin-only認可
R005docs/operations/bluegreen/local-bluegreen-deployment.md:3-56設定資料Tunnel→HAProxy→blue/green Web/Worker/PostgreSQL
R006okr-cai-saas/deploy/cloudflared-config.example.yml:1-15設定例app/admin hostを同じloopback originへ中継
R007okr-cai-saas/.env.local.example:49-83設定例public host、Auth Worker、Access設定名
R008okr-cai-saas/src/proxy.ts:68-99,101-215,268-312実装host分離、admin hostの通常Access認証、内部rewriteでの再検証。追加のsensitive audienceは使用しない
R009okr-cai-saas/src/lib/cloudflare-access.ts:21-42,44-90実装単一のissuer/audience/JWKSでAccess assertionを検証
R010okr-cai-saas/src/lib/verified-staff.ts:20-54,56-88実装assertionの独立再検証とstaff解決
R011deploy/local-bluegreen/local-bluegreen.mjs:1257-1284実装readiness後のcloudflared外向き接続
R012deploy/local-bluegreen/local-bluegreen.mjs:202-230実装HAProxy loopback frontendとWeb slots
R013config/local-bluegreen.production.example.json:1-52設定例production origin :3001、Web :3002/:3003、Worker :3012/:3013、network/drain/key分離
R014Dockerfile:72-118設定Next.js/Node.js 22 runner-saas image
R015okr-cai-saas/src/proxy.ts:385-467,469-554,721-737実装public path、一般session、protected path
R016okr-cai-saas/src/lib/db/postgres/session-auth.ts:59-149実装token hash indexとuser/org/membership検査
R017deploy/local-bluegreen/local-bluegreen.mjs:232-294実装Web/Worker container role、network、log rotation
R018okr-cai-saas/src/instrumentation.ts:9-44実装Worker起動時のdurable processors
R019okr-cai-saas/src/lib/ai/generation-job.ts:558-725実装永続job、lease、claim
R020okr-cai-saas/src/lib/ai/feedback-job.ts:907-950,1123-1165実装結果materializeとsanitized telemetry
R021compose.production-db.yaml:1-46設定PostgreSQL 17、volume、internal network、log rotation
R022okr-cai-saas/db/postgres/migrations/0001_initial.sql:3-67,96-159,375-595schemaorganization/user/session/artifact/workflow/AI/feedback
R023okr-cai-saas/db/postgres/migrations/0032_password_auth_sessions.sql:20-69schemapassword sessionとcredential floor、secret分離
R024okr-cai-saas/.env.local.example:7-38設定例production業務storeはPostgreSQLのみ
R025okr-cai-auth-worker/wrangler.jsonc:1-46,95-157設定Worker/Cron/Email/D1/production env。実識別値は転載しない
R026okr-cai-auth-worker/src/index.ts:17-58,96-102実装auth endpoints、JWKS、health、daily clean
R027okr-cai-auth-worker/src/password.ts:62-136,139-305,394-468実装domain、OTP、register、password、login/reset
R028okr-cai-auth-worker/migrations/0003_password_credentials.sql:1-69schemapassword/OTP/reset grant hashes
R029okr-cai-auth-worker/migrations/0004_legal_document_acceptances.sql:1-10schemalegal acceptance version/time
R030okr-cai-auth-worker/src/password.ts:558-584実装Email binding送信
R031okr-cai-saas/src/lib/ai/data-minimization.ts:18-115,117-237実装alias/redaction/response reference validation
R032okr-cai-saas/src/lib/ai/openai-responses.ts:399-410,758-792,825-853,1286-1294実装Responses送信、store:false、prompt hash
R033okr-cai-saas/src/lib/ai/openai-embeddings.ts:107-124,296-324実装最小化済みEmbedding送信
R034okr-cai-saas/src/lib/ai/proposal-research.ts:276-309,312-319実装Responses web searchとstore:false
R035okr-cai-saas/db/postgres/migrations/0030_project_task_output_file_url.sql:1-13schemaHTTPS URLだけを保存
R036docs/operations/backup/backup-capacity-estimate_okr-cai-saas_2026-08-27.md:55-60資料外部ファイル本体をbackup対象に含めない
R037okr-cai-saas/src/proxy.ts:625-633実装spoofable auth header除去
R038okr-cai-saas/src/app/api/workflows/[sessionId]/messages/route.ts:67-168実装production相談をpersistent commandへenqueue
R039okr-cai-saas/src/app/api/auth/login/route.ts:27-58実装same-origin login→Auth Worker→app session
R040okr-cai-saas/src/lib/auth-worker.ts:104-192,238-324,393-399実装service-authenticated HTTPS POST
R041docs/operations/bluegreen/local-bluegreen-deployment.md:3-38,40-47設定資料固定origin、blue/green Web/Worker、readiness、切替、drain、初回計画停止
R042config/local-bluegreen.production.example.json:1-52設定例production origin、blue/green Web/Worker ports、network、drain設定
R043deploy/local-bluegreen/local-bluegreen.mjs:26,232-294実装各slotのWeb/Worker 2 role、container identity、release label、Worker drain設定
R044deploy/local-bluegreen/local-bluegreen.mjs:583-688,985-1050,1177-1236実装candidate Worker/Web起動とreadiness、HAProxy切替、旧slot回収、rollback
R045deploy/production/host-runtime.mjs:29-45,65-72,98-140実装combinedの単一containerをstop/remove/create/startし、readiness後にcloudflaredを起動
R046okr-cai-saas/src/lib/runtime-role.ts:1-33実装role未指定時はcombined。Worker shutdown drainは未指定時false
R047okr-cai-saas/src/instrumentation.ts:9-44実装worker/combined roleの1 process内でfeedback、generation、command materializerを起動
R048compose.yaml:1-121設定単一okr-cai-saas service、loopback :3000、PostgreSQL利用、restart: no
R049okr-cai-saas/src/lib/db/postgres/runtime-control.ts:170-240実装release別job・attempt・command・provider leaseが全て0のときdrained
R050okr-cai-saas/src/lib/ai/generation-job.ts:540-555,1979-2011実装generation workerのrelease fenceとdrain modeでの完了待ち
R051okr-cai-saas/src/lib/ai/feedback-job.ts:235-332,950-971実装feedback workerのrelease別claimとdrain modeでの完了待ち
R052okr-cai-saas/src/lib/ai/production-command-job.ts:557-593,869-900実装command materializerのrelease別claimと実行中promise完了待ち
R053docs/engineering/history/100-concurrent-db-remediation-plan-2026-09-30.md:84-128履歴調査9月29日方式の組織共通lock、全AppData読込・clone・差分書込と、lock待ちからpool枯渇への障害連鎖
R054docs/engineering/history/100-concurrent-db-remediation-plan-2026-09-30.md:28-38,200-239,241-330,418-438実装・検証記録対象別read/write/AI、CAS、通常snapshot mutation遮断、admission controlと学生側Staging結果
R055okr-cai-saas/src/lib/db/postgres/dashboard-reader.ts:18-90,120-170実装主要画面を本人・担当team・対象artifact・bounded historyへ限定し、互換projectionへdecode
R056okr-cai-saas/src/lib/db/postgres/profile.ts:13-62実装本人プロフィールのlive認可、対象行lock、revision CAS
R057okr-cai-saas/src/lib/postgres-entity-api.ts:13-68実装actor解決、repository側live DB認可、admission/runtime失敗とRetry-After
R058okr-cai-saas/src/lib/db/postgres/workflow-collaboration.ts:32-72,101-177,188-228実装session/artifact/lease対象行、row lock、条件付きUPDATE。snapshot load・organization revision writeなし
R059okr-cai-saas/src/lib/db/postgres/ai-generation-jobs.ts:187-288,364-430実装永続AI job enqueue、release条件、FOR UPDATE SKIP LOCKED claim、lease
R060okr-cai-saas/src/lib/db/postgres/ai-workflow.ts:16-137実装provider入力を1 workflowとsource graph・直近messageへ限定し、provider I/Oをtransaction外で実行
R061okr-cai-saas/src/lib/db/postgres/pool-admission.ts:19-51,57-143,166-184実装checkout前のbounded queue、期限、normal/critical予約枠、admission観測
R062okr-cai-saas/src/lib/postgres-request-store.ts:174-217実装通常production HTTPのsnapshot mutationを遮断し、全量writerを保守/import・非本番へ限定