Lilas Project Status

產生時間:2026-07-18 03:28:08 UTCHEAD 1c7e506
目前 Phase

Phase 34

Project Status Page
92%
Open Known Bugs

0

共 18 筆(含已修)
Open Backlog

23

共 53 筆(含已完成 / 已領走)
ADR

28

28 Accepted / 0 Proposed
Deploy

v0.0.66

api 2 / client 2 / worker 2

Roadmap

92%
Phase 0

Project Foundation and Decision Baseline

已完成(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 1

Tenant, Organization, Project, and API Shell

已完成(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 1.5

Organization and Project Product Surface

已完成(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 2

Core Collaboration Objects

已完成(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 2.6

Internationalization

已完成(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 3

Memory Engine MVP

已完成(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 4

Ambient AI MVP

已完成(2026-06-01 live browser e2e 全鏈驗證)(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 4.5

System Notification Center

已完成(本地 e2e 已驗證)(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 5

External Work Source Integration - GitHub Adapter MVP

已完成(本地 e2e 已驗證;真實 GitHub App 接通留 production)(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 6

Memory Intelligence

已完成(2026-06-10;M1–M9 全交付)(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 6.5

Self-Authored Procedural Skill Induction

已完成(2026-06-10;M1–M6 全交付)(本行為 2026-07-17 Phase 34 收斂補註,交付細節見本段內文與 root CLAUDE.md 階段表)。
Phase 7

Production Hardening and Multi-Agent Expansion

已完成(7a 2026-06-11 全交付關閉;原 7b backlog 於 2026-07-06 遷入 `docs/roadmap/backlog.md`。本行為 2026-07-17 Phase 34 收斂補註)。 - Deployment bootstrap: **已完成 as-is(2026-06-10)**。GKE namespace `lilas`、single host `https://lilas.kusabanabiyori.com`、Helm umbrella chart、Docker images、Traefik/cert-manager ingress、`apps/api` + `apps/client` + consolidated `apps/worker` 三 Deployment 已落地。As-built record: `docs/plans/gke-deployment.md`。 - Production hardening: **7a 完成並關閉(2026-06-11)**:M1–M10 全交付(含 M9 production e2e 全項 PASS 與 dead-letter replay UI 實測);CI(Quality+Isolation)全綠、CI/CD 自動部署運轉、Cloud Monitoring 告警基線就緒;7b 剩餘 backlog 已於 2026-07-06 遷入 `docs/roadmap/backlog.md`(BL-01–BL-06),「7b」不再作為待啟動 phase 存在。依使用者裁示拆為 **7a(UAT/上線必需,M1–M10)** 與 **7b(上線後強化 backlog)**;UAT 階段刻意續用共用 dev 資料庫與共用 R2 bucket(拆分正式環境延後,屆時乾淨起步)、secrets 維持手動 k8s Secret(不導入 Vault/ESO)、observability 採 GCP Cloud Trace + Cloud Monitoring。
Phase 8

Post-Launch and Long-Tail Features

未啟動(backlog 文件已建)。
Phase 9

Conversational Intake

已完成(2026-06-12 live e2e 全鏈驗證 PASS;期間修 3 個 live bug——卡片 hydration、上傳音訊白名單、轉錄 trigger uuid;同日完成度稽核後六項收尾修正,並以 release v0.0.8 部署上線,CI / Deploy 全綠)。
Phase 10

Conversational Surface

已完成(2026-06-13 live e2e 全鏈驗證 PASS;wave 1–3 全交付——後端 cursor 分頁 + conversationActivity SSE、chat surface 本體、cmd+K quick capture、ADR 0010 Amendment;implementation plan 見 `docs/roadmap/archive/phase-10-implementation-plan.md`「As-built 紀錄」)。
Phase 11

Platform-Native Demo Site Generator

已完成(2026-07-09 GKE Job codegen + Cloudflare preview + renderer publish live e2e PASS;ADR 0015 Accepted (implemented in Phase 11))。
Phase 12

Grounded Read-Only Q&A in Capture Thread

已完成(2026-07-07 同日簽核、交付、live e2e PASS;ADR 0019 Accepted (implemented)。M1+M2 合併交付;pnpm check + i18n:check 全綠、獨立黑箱稽核零 blocker、九場景 live browser e2e 見 implementation plan §7)。
Phase 13

Intake 候選卡就地編輯

已完成(2026-07-07 同日裁示+交付,merge d92f4ee;2026-07-09 baseline gates 全綠;2026-07-10 Phase 20 W4 live browser + DB 驗證並由 fresh independent V14 VERIFIED)。
Phase 14

宣告式授權防線

程式交付+live e2e PASS(2026-07-07;自 backlog BL-35 領號)。
Phase 15

Standing-Facts Memory Layer

已完成(2026-07-09 core implementation、M8 misplaced rows migration、conversation/UI live e2e、document upload → AI maintainer live e2e 全部通過;KB-11 clean retest 結案)。
Phase 16

Provider Key Env Elimination

已完成(2026-07-08 code + shared DB migration + local live e2e PASS;未 push,故未觸發 GKE rollout/deployment watch)。
Phase 17

Passkey Authentication

已完成(2026-07-10 M9 amendment — discoverable credential、username-less challenge、Conditional UI;產品擁有者同日確認真人 real-authenticator browser e2e 正常。repo-wide worker regression 由 Phase 20 W3 收斂,非 passkey failure)。
Phase 18

Conversation Knowledge Intake

已完成(2026-07-09 core MVP;2026-07-10 Phase 20 W6 補齊 ADR 0011 auto-approval gate、BL-40–BL-44 並獨立 V12 VERIFIED)。
Phase 19

Memory Connectivity & Dynamic Views

Phase 19 scope W1–W4 已完成(2026-07-09);ADR 0018 W5/W6 另由 Phase 20 W7 於 2026-07-10 完成並獨立 V11 VERIFIED,不回改 Phase 19 歷史 scope。
Phase 20

ADR Closure & Independent Verification

已完成(2026-07-10;W1–W8 VERIFIED;fresh V15 final audit zero findings)。
Phase 21

MCP Capture and Recall Adapter

已完成(2026-07-10;local Codex + Claude host、remote Streamable HTTP/OAuth、shared DB migration與independent final verification全綠)。
Phase 22

Prompt Cache Governance and Context Assembly

已完成(2026-07-11 同日啟動並全交付;M0–M7、`pnpm check` 全綠、OpenAI 路徑 live e2e 獨立驗證 VERIFIED(extraction 第三呼叫 cache_read 1792)、migration 已套用;Anthropic/GPT-5.6 路徑 config-gated 留待 review triggers;殘項分流 BL-46/BL-47)。
Phase 23

Notification Read-State Integrity and Content i18n

已完成(2026-07-12 同日啟動並交付;M1–M3 全綠、migration 已套用、live browser e2e PASS、獨立驗證 VERIFIED 0 issues;詳見 phase-23 spec §4 交付紀錄)。
Phase 24

Notification Aggregation and Seen Semantics

已完成(2026-07-12 同日啟動並交付;M0 設計稽核 PASS(第一輪 critical 聚合鍵公式修正)、M1–M4 `pnpm check` 全綠、migration + backfill 已套用共用 DB、M5 live browser e2e PASS、獨立實作稽核 VERIFIED;詳見 phase-24-implementation-plan.md §8)。
Phase 25

Worker Prompt LPRC Rollout

已完成(2026-07-13 同日啟動並交付;獨立驗證 VERIFIED、`pnpm check` 全綠、live worker smoke PASS;after 遙測待營運回填)。
Phase 26

Upload Content-Type Verification

已完成(2026-07-13 同日啟動並交付;獨立驗證 VERIFIED、live 上傳 e2e PASS——合法檔全鏈就緒、造假檔 PUT 階段被拒且顯示翻譯錯誤)。
Phase 27

Reconcile Quality Stage 1

已完成(2026-07-13 同日啟動並交付;獨立驗證兩輪 VERIFIED(round 1 揪出 I6(b) 缺陷、round 2 修復後全過);離線重放異框架案例 ADD→REFINE 訊號確認)。
Phase 28

Entity-Anchored Cross-File Reconciliation

已完成 Encore S0-S14 live 重放與獨立驗證(2026-07-14;25 documents、36 maintainer actions、 50 REFERENCES、14 multi-file HIGH、UPDATE recall 2/2、production worker 0 -> 1 Ready);M0-M7 全部 VERIFIED。raw cross-file duplicates 33 -> 54 且 density 0.0456% -> 0.0533%,relation coverage / review volume 殘項分流 BL-49。
Phase 29

Forgot Password

2026-07-14 code 交付+同日 live browser e2e 全鏈 PASS(真實 SendGrid 寄信、 Gmail 收信、重設連結、新密碼登入、token 單次使用複驗、防列舉 UI 複驗)。auth/email/ client/api 測試全綠、全 repo typecheck / lint / build / `pnpm i18n:check` PASS;獨立稽核 1 HIGH finding(member-base `changePasswordWithToken` 吞掉密碼政策錯誤)已以 `PasswordValidatorService` 前置預檢修復並複驗;live e2e 另揪出並同日修復 app-chrome NO_SHELL_PREFIXES 缺漏等三項(見 phase doc)。未 commit。
Phase 30

Claude/Codex Integration Guide

2026-07-14 spec+裁示(remote 統一 `lilas`、developer local stdio 改 `lilas-local-dev`、skill 散佈採方案 A、Codex × Project 依工具差異給適合做法)+ M1-M4 交付並獨立驗證 PASS;2026-07-15 M5 live browser e2e PASS(四組合 UI、 endpoint byte-identical、Claude × Global 真實實裝、skill 觸發 → capture → `CANDIDATES_CREATED` 全鏈);KB-12 已修、新發現 KB-15 已登記。未 commit。
Phase 31

Relation Coverage and Review Calibration

2026-07-15 使用者裁示採 measurement-first 推進,M0 spec / plan / verified code map 已完成並由獨立 verifier zero-findings VERIFIED;下一個新 phase 編號為 32。
Phase 32

Transactional Email Deliverability

2026-07-16 啟動;spec 已寫、SMTP provider 切換與共用品牌信件版型(含 invitation / reset-password / notification 三類 × 兩語系)程式碼交付中。
Phase 33

Worker Horizontal Scaling

2026-07-17 同日啟動並交付;M1–M4 全交付(AI suggestion partial unique index、event_outbox.lease_owner+lease 調參、push claim/github advisory lock/document_source_texts unique 三項冪等補強、replicas 2+PDB),四筆 migration 已套用 shared DB,M5 本地雙連線並行 claim live 驗證 PASS,獨立 opus 稽核 PASS(1 MEDIUM 已修);production rollout 完成(Deploy run 29546382008 success、lilas-worker 2/2 Ready v0.0.65、worker PDB 建立、 雙 pod readiness 通過、近一小時 outbox failed=0)。
Phase 34

Project Status Page

進行中、僅餘部署裁示(2026-07-17 同日啟動並交付:M1–M5 完成——scaffold、collector+21 測試、Mezzanine dashboard UI、本地 live 瀏覽器 1440x900 e2e PASS、`pnpm check` 全綠、獨立黑箱驗證 VERIFIED;附帶 SSOT 修正:本檔早期 11 個 phase 補 Status 行、Phase 7/9/10 heading 補正。唯一未竟項:Cloudflare Pages 實際部署待 spec §8 存取範圍/更新機制裁示)。

ADR

Accepted 28Proposed 0其他 0
ADR-0001

Use Nx Integrated Monorepo

Accepted (implemented via Phase 0)
ADR-0002

Use DB-Backed Memory Repository First

Accepted (implemented via Phase 3)
ADR-0003

Organization Owner / Admin Automatically Inherits Project Admin Permissions

Accepted (implemented via Phase 1.5)
ADR-0004

Internationalization Strategy

Accepted (implemented via Phase 2.6)
ADR-0005

Org-Scoped Layered Memory Namespace

Accepted (implemented via Phase 6)
ADR-0006

Bi-Temporal, Weighted Memory Model on Postgres + pgvector

Accepted (implemented via Phase 6)
ADR-0007

Human Knowledge Edits Apply Directly, Destructive Edits Stay Reviewed

Accepted (implemented)
ADR-0008

System Notification Center — Per-Recipient Fan-Out, SSE Push via LISTEN/NOTIFY, Never-Delete

Accepted (implemented via Phase 4.5; reconnect-catch-up closure independently verified via Phase 20 W1 on 2026-07-10)
ADR-0009

Platform Admin Layer

Accepted (implemented via Phase 7a)
ADR-0010

Chat-as-Capture Conversational Intake

Accepted (implemented via Phase 9/10; amended by ADR 0019)
ADR-0011

Tiered Memory Governance — Ambient Auto-Commit by Default, Review by Exception

Accepted (implemented; amended 2026-07-01 — Decision 6: human-initiated block removal direct-applies for non-confirmed SEMANTIC blocks; amended 2026-07-03 by [ADR 0016](0016-episodic-provenance-confidence-decoupling.md) — the EPISODIC changelog provenance partition decouples from the extraction confidence band, keeping only the 0.5 floor)
ADR-0012

Tenant BYO API Keys and Per-Capability Model Selection

Accepted (implemented 2026-06-23; provider × modality matrix, key-version cache, and attribution closure independently verified via Phase 20 W2 on 2026-07-10) **Amendment 2026-07-08**:本 ADR 的 `env_fallback` 機制(§D4 末段「既有 env key 以 seed 方式轉為 PLATFORM credential」所建立的 env-fallback row 形態)與 Context 所述 legacy transport 直讀 `process.env` 的運輸層,已由 [ADR 0021](./0021-eliminate-provider-env-keys.md) 全面取代並退役 (實作追蹤:Phase 16,2026-07-08 已完成)。本 ADR 的 D1–D5 capability binding / BYO scope / quota 主體決策不變。
ADR-0013

Distilled-Proposition Memory Units — Structured Block Body, Source Separation, Write-Time Reconcile

Accepted (implemented 2026-06-23 — see Implementation Notes)
ADR-0014

Impact-Graded Supersede — Review by Architectural Impact, not Blanket

Accepted (implemented 2026-06-25) — amends the supersede clause of [ADR 0011](0011-tiered-memory-ambient-autocommit.md) (its line 99 "any … supersede … always routes to human review" and Review Trigger "SEMANTIC rewrites … must keep classifying HIGH").
ADR-0015

Platform-Native LLM-Codegen Demo Site Generator

Accepted (implemented via Phase 11; reliability, publish-rail, and KB-02–04 closure independently verified via Phase 20 W3 on 2026-07-10) > 2026-07-02 產品裁示簽核通過並啟動實作(「新產品面 + AI 自動產出對外交付物」雙重 checkpoint 已確認)。2026-07-09 完成 GKE Job codegen、Cloudflare Pages preview、renderer publish live e2e;對應規劃書:`docs/roadmap/phase-11-demo-site-generator.md`;實作計畫與驗證紀錄:`docs/roadmap/phase-11-implementation-plan.md`。
ADR-0016

EPISODIC Provenance Events Decouple from the Extraction Confidence Band

Accepted (implemented 2026-07-03) — amends the additive-gate confidence coupling of [ADR 0011](0011-tiered-memory-ambient-autocommit.md) for the EPISODIC changelog partition only. Companion to [ADR 0014](0014-impact-graded-supersede-review.md), which made the same "impact, not blanket" move for supersedes.
ADR-0017

Org-Scope Direct Authoring & Organization Decay

Accepted (implemented 2026-07-04; status line corrected 2026-07-06 — M2–M6 were delivered on 2026-07-04, commits `6dae280` / `36aadf7` / `70a5b54` / `7ef886e` / `f3c4fed`, only this line was never flipped)
ADR-0018

Memory Connectivity, Dynamic Views & Vault Export

Accepted (implemented: W1–W4 via Phase 19; W5 / BL-25 and W6 / BL-26 independently verified via Phase 20 W7 on 2026-07-10)
ADR-0019

Grounded Read-Only Q&A Inside the Capture Thread

Accepted (implemented) — delivered 2026-07-07 as Phase 12 (M1 + M2 combined, live e2e verified; see [`docs/roadmap/phase-12-implementation-plan.md`](../roadmap/phase-12-implementation-plan.md)). Amends [ADR 0010](0010-chat-as-capture-intake.md): lifts the tier B (conversational read-only query) exclusion recorded in its 2026-06-12 amendment, under the rails fixed below. Tier C (chat-first query and command over existing objects) remains prohibited.
ADR-0020

Standing-Facts Memory Layer (`facts.md`)

Accepted (implemented as Phase 15 on 2026-07-09) — design approved by the product owner on 2026-07-07 and delivered from backlog BL-36. Implementation completed the canonical `facts.md` file, branch/policy migrations, Memory Maintainer and conversation consolidation routing, entity index projection, UI/i18n surface, audited Encore misplaced rows migration, and live e2e validation for conversation/UI plus document upload → AI maintainer. Resolves the pending "facts.md canonical file" question raised by the Encore e2e run (`e2e-fixtures/encore/VERIFICATION-REPORT.md:40`) and tracked as backlog BL-32 item (c). Extends the memory taxonomy fixed by [ADR 0011](0011-tiered-memory-ambient-autocommit.md); reuses the bi-temporal supersede model of [ADR 0006](0006-temporal-weighted-memory-model.md), the impact-graded supersede review of [ADR 0014](0014-impact-graded-supersede-review.md), and the distilled-proposition block format of [ADR 0013](0013-distilled-proposition-memory-units.md). Does **not** amend [ADR 0010](0010-chat-as-capture-intake.md) — the intake→memory rail is unchanged.
ADR-0021

Eliminate Provider API Keys from Environment Variables

Accepted (implemented 2026-07-08) — 由產品擁有者裁示啟動並於同日完成 Phase 16 code + shared DB migration + local live e2e;對應實作紀錄見 [`docs/roadmap/archive/phase-16-implementation-plan.md`](../roadmap/archive/phase-16-implementation-plan.md)。 本 ADR **部分取代** ADR 0012(§D6 的 `env_fallback` 機制、以及 Context 所述「全 app 單一 process-level env key」的遺留運輸層);ADR 0012 的 capability binding / BYO / quota 主體維持原效。
ADR-0022

Passkey Authentication

Accepted (implemented 2026-07-09; amended 2026-07-10 — Phase 17 M9 adds discoverable credentials, username-less authentication challenges, and Conditional UI while retaining email-first passkey and password fallbacks. Changed-scope lint, typecheck, tests and the repo-wide production build are green. The six pre-existing `worker` local-process-dispatcher spec failures were closed by Phase 20 W3;the Phase 20 W8 fresh no-cache repo suite passes. The product owner confirmed successful human real-authenticator browser e2e on 2026-07-10.)
ADR-0023

Conversation Knowledge Intake

Accepted (implemented via Phase 18 core MVP on 2026-07-09 and Phase 20 W6 governance/full-knowledge-family closure independently V12 VERIFIED on 2026-07-10). The delivered rail covers all five knowledge families, typed edit-before-confirm, work ↔ knowledge and knowledge ↔ knowledge reclassification, first-class calibration dimensions, cross-message content-fingerprint dedup with auditable duplicate provenance, and the ADR 0011 auto-approval gate. Confirm and post-confirm reclassification side effects are full-snapshot-CAS guarded and transactionally rollback-safe. BL-40–BL-44 are closed by Phase 20 W6.
ADR-0024

MCP Capture and Recall Adapter

Accepted (implemented via Phase 21; verified local stdio and remote Streamable HTTP/OAuth)
ADR-0025

Provider-Agnostic Prompt Cache Governance and Conversation Context Assembly

Accepted (implemented 2026-07-11 as Phase 22; OpenAI-path live-verified; Anthropic `cache_control` and GPT-5.6 explicit mode remain config-gated pending their review triggers)
ADR-0026

Notification Aggregation and Seen Semantics

Accepted (implemented 2026-07-12 as Phase 24; M1–M5 delivered same day — live browser e2e PASS and independent implementation audit VERIFIED; awaiting commit approval)
ADR-0027

Entity-Anchored Cross-File Memory Reconciliation

Accepted (implemented by Phase 28; M7 independently verified)
ADR-0028

Worker Horizontal Scaling(多 replica 水平擴展)

Accepted (implemented 2026-07-17 by Phase 33 — M1–M4 delivered, shared-DB migrations applied, local dual-claim live verification PASS, independent audit PASS, production 2-replica rollout live: lilas-worker 2/2 Ready v0.0.65 + worker PDB)

Known Bugs

Open
0
KB-01HIGH

Memory Maintainer 多文件**並行**上傳會產生語意重複的 memory block(無語意去重;commit 層 branch 鎖只序列化寫入、不擋重複知識)。修法三階段全交付:per-branch advisory lock 序列化+同專案多文件合併抽取(per-item attribution、union refs)+burst 後即時 entity consolidation;同時修掉重驗中發現的多 chunk anchor 碰撞+事件級冪等吞 chunk(靜默知識遺失)。**→ 已修(2026-07-06,44ece00+11747cc+DI 增補;Encore e2e R4 全輪重驗完成 2026-07-07:S0 合併 pass、全批次唯一性 PASS,見 e2e-fixtures/encore/VERIFICATION-REPORT.md)**

`docs/plans/maintainer-dedup-chunk-fix-plan.md`(根因逐行查證+設計);2026-07-05/06 Encore e2e S0/S1 實測(ISRC ×2、advance/recoupment ×3、周小姐 ×2;音檔 chunk 2/3 遺失);commits `44ece00`、`11747cc`、`dde441a`、`1dae1f8`
KB-02MEDIUM

Demo build:專案在 BUILDING 中途被 archive 時,該 build 永久停留 BUILDING(handler 跳過 archived 專案、無自動失敗轉換)**→ 已修(2026-07-10,Phase 20 W3;transaction-internal project lock + interleaving regression;global V3 / W3 round 2 獨立 VERIFIED)**

Phase 20 W3 / global V3;`archive/`…原 phase-11 plan「已知未竟」(2026-07-06 分流至此)
KB-03LOW

Demo build 完成通知收件人固定為 plan 作者(`generatedByMemberId`),非實際觸發 build 者。**→ 已修(2026-07-10,Phase 20 W3;persist actual requester + legacy fallback;global V3 / W3 round 2 獨立 VERIFIED)**

Phase 20 W3 / global V3;原 phase-11 plan「已知未竟」(2026-07-06 分流至此)
KB-04LOW

Tier 1(RENDERER)demo spec 使用相對路徑,renderer 公開部署需 spec 絕對 URL 才能脫離 api 依賴。**→ 已結案(2026-07-10,Phase 20 W3 global V3 / W3 round 2 獨立證實 renderer dist + 同站 `/spec.json` 為 self-contained public deploy)**

Phase 20 W3 / global V3;`docs/roadmap/phase-11-implementation-plan.md` 的 renderer / Cloudflare Pages 發佈紀錄
KB-05HIGH

Production worker replica 曾於 2026-07-05 Encore e2e 期間縮至 0,需確認已恢復(一次性 ops 確認,非程式缺陷)。2026-07-06 更新:e2e 重驗期間 replicas 刻意維持 0。**→ 已結案(2026-07-07,e2e 收尾恢復 `kubectl scale --replicas=1`,pod 1/1 Running 實查確認)**

2026-07-05/06 工作階段;`kubectl` 一查即可結案
KB-06MEDIUM

client 測試套件在 main 上有 23 個既存失敗(7 個 spec 檔):`0b390a6 chore(i18n): refine zh-TW/en-US term translations` 調整了 catalog 用語(如「輸入你的名字(選填)」「已移除」「等待你處理」)但未同步更新斷言這些字串的 spec,`pnpm test` 全套因此無法過閘。**→ 已修(2026-07-07,Phase 12 收尾隨行修復:7 個 spec 檔斷言對齊現行 catalog 用語(你→您、決策→決議、核可→核准、駁回/移除→忽略等),catalog 與產品碼未動;`nx run client:test` 240/240 綠)**

2026-07-06 KB-01 修復驗證時於乾淨 main(937cd3f)實測 `nx test client`:23 failed / 198 passed;字串僅存在於 spec、catalog 已無
KB-07HIGH

Reconcile 的 embedding 相似度 dedup 對「剛 commit 的 blocks」全盲:`findSimilarActiveBlocks` 只查 `memory_block_embeddings`,而新 block 的 embedding 由 `MEMORY_COMMIT_CREATED_EVENT` 非同步補寫、且會被同一 AI poller 的 long pollOnce(多 chunk 音檔 4 分鐘)卡到整批結束才寫入 → 長文件 chunk 之間、鄰近批次之間的重述照樣 ADD(entity-keyed 的 glossary/stakeholders 不受影響)。修法方向:maintainer commit transaction 內同步產 embedding,或 reconcile 對缺 embedding 的 ACTIVE block 現場計算補比。**→ 已修(2026-07-06,dde441a;maintainer 於 advisory lock 內 commit 後同步 refreshBranchEmbeddings,async 路徑留作 backstop;Encore e2e R4 全輪重驗完成 2026-07-07:逐 pass 同步刷新實錄、跨 chunk dedup 生效)**

2026-07-06 Encore e2e R2 S1 實測:音檔 3 chunk 序列 commit(13:48/13:49/13:50)但 embeddings 遲至 13:50:44 一次寫 128 筆;ledger 決策 ×2、flat ×3、R-1 ×2 跨 chunk 重複;`memory-reconcile.service.ts:399`
KB-08HIGH

Maintainer 抽取/reconcile 的「具體事實被一般規則吸收」(specificity loss):來源片段中的具名個案事實未落地——slack-encore 4/30 的「《午夜計程車》林佳恩/小林五五對拆」與「Spotify 一行 ISRC TWA472600099 對不到→丟 suspense」兩個種子,該批 26 NOOP/8 UPDATE 處理後 memory 全文無「午夜」「099」任何 block(同批其他事實正常落地);無法區分抽取層遺漏或 reconcile 被既有一般規則(suspense 流程、拆帳比例)判 NOOP 吞掉——candidate 級 NOOP 無記錄可稽(觀測性缺口一併在此)。影響:依賴該種子的後續 supersede(S3 午夜 50/50→60/40)無標的可改。**→ 已修(2026-07-06,1dae1f8;兩層修法:抽取 prompt 補 standing-data-facts 指引(重放種子命中 1→9)+雙 judge 加個案不併規則守則(099 案例 NOOP 3/3→ADD 3/3)+candidate 級 reconcile log 補觀測;Encore e2e R4 全輪重驗完成 2026-07-07:S2 種子+S11 六項行級事實全落地)**

2026-07-06 Encore R3 S2 實測:fixture `fragments/slack-encore.md:75-76` vs `memoryBlocks(branchId a4b01398…)` 全文檢索;worker log 17:24:21 該批 26 NOOP
KB-09LOW

`withBranchLock` 的 unlock 失敗會向上拋出並遮蔽 fn() 原始結果:DB 連線中斷時(實測 2026-07-06 網路中斷)專用 QueryRunner 死亡 → finally 內 unlock 拋 `Query runner already released` → 已成功 commit 的 pass 被標失敗、事件多跑一次重試(chunk 冪等會收斂,資料無損但噪音+浪費一次 attempt)。修法:unlock 失敗只 log(連線死亡時 PostgreSQL session 終止會自動釋放 advisory lock,吞掉安全)**→ 已修(2026-07-09,Phase 15 收尾;`memory-maintainer.handler.ts` withBranchLock unlock 加 try/catch 吞掉並 log)**

2026-07-06 Encore R4 S5 實測:19:08/19:10 兩次 `Query runner already released`+`Connection terminated unexpectedly`,chunk 3 第三次重試成功
KB-10MEDIUM

Intake extractor 對「標題+條列」高密度訊息的 specificity loss:7 條獨立事實(單機部署風險、3→5 nodes 變更、Git 同步架構決策、今年完成期限…)被收成**單一** TASK 候選(細節僅存 description、卡片不顯示),RISK/DECISION/MILESTONE 全數未分解——`buildExtractionPrompt` 無任何逐條分解與類型對映指引(KB-08 同款問題修在 memory maintainer,intake extractor 未同步)。修法:抽取 prompt 補分解指引+卡片顯示 description 摘要,比照 KB-08 離線重放驗證。**→ 已修(2026-07-07:extraction prompt 補 DENSE LIST 分解與類型對映指引(含散文不過度分解防退化)+SummaryCardItem/卡片補 description 摘要(worker 200 字/client 80 字雙層截斷);離線重放 gpt-5.4-nano——富蘭克林訊息修前 1 候選全 TASK 高變異、修後三輪穩定 7 候選(RISK×2/TASK×3/DECISION/umbrella MILESTONE),散文對照無退化)**

2026-07-07 使用者實測「富蘭克林移轉」訊息(message 2dffc911,candidates 僅 1 筆 TASK/ASK/0.740,DB 實查);`intake-extraction.service.ts:1663-1730` prompt 全文檢視
KB-11HIGH

Phase 15 document upload → AI maintainer live path 一度未產生 standing-fact proposal:初查時測試文件上傳與 document parsing 已完成,但 `document.source_extracted.v1` 的 AI consumer 停在 `pending attempts=3`,尚未建立對應 `ai_actions` 或包含 `TWA472600099` 的 proposal。後續原事件第 4 次 retry 自然收斂並 committed;另以 clean retest 重跑 service upload path,AI consumer `attempts=1` processed,Memory Maintainer 建立 target `facts.md` proposal/commit,`requirements.md` 未承擔測試 facts。**→ 已結案(2026-07-09,Phase 15 closeout)**

初始事件:document `78147ff7-f57c-4c64-9b9b-2928238c12fe`、action `275b904c-62f0-4d0b-adc9-50383fc7e13e`、proposal `87aab63d-d667-4699-8102-488e118298dd`;clean retest:document `1f5162b5-d3ee-43bd-975b-b8c7faf1f573`、action `a20c0cfb-041c-46cd-be4d-5d8e3171af70`、proposal `ff379be1-53d7-4005-b05b-101ed4b76281`、value-change proposal `02160a5a-72fb-4cda-9c23-44a92adeda49`
KB-12LOW

MCP runbook 與帳號頁 setup guide 的 Codex server 命名不一致:`docs/runbooks/mcp-integration.md:100` 的 Codex remote 範例用 `lilas-remote`,但帳號頁實際產生的指令(`apps/client/src/app/account-mcp-setup-guide.tsx`)Codex 用 `lilas`、Claude 才用 `lilas-remote`。功能無礙(server 名稱任意),但兩份使用者面向文件對不上,照著 runbook 設定的人與帳號頁指引產出的設定名稱會分歧。修法:擇一命名並同步兩處(建議以帳號頁為準)。**→ 已修(2026-07-14,Phase 30 M1:remote 統一 `lilas`、developer local stdio 改 `lilas-local-dev`,五處同步含 spec 測試;全 repo 掃描無非預期殘留、獨立驗證 PASS)**

2026-07-14 `lilas-capture` skill 交付物獨立稽核(本 session)發現;`docs/runbooks/mcp-integration.md:100` vs `apps/client/src/app/account-mcp-setup-guide.tsx:30-36`(Codex 分支 :30-34 用 `lilas`、Claude 分支 :35-36 用 `lilas-remote`)比對
KB-13LOW

Sign-in 頁 React hydration mismatch:`auth-form.tsx` 的 passkey 條件式 UI(`authPasskeyMethod` div)只在 client 端渲染(WebAuthn 可用性判斷),SSR HTML 與 client 首次 render 不一致 → console 每次載入都拋 `Hydration failed`、整棵樹 client 端重建(dev 顯示 1 issue badge;功能無礙但有重建成本與噪音)。修法方向:以 `useEffect` 後置 state 控制 passkey 區塊顯示(首次 render 與 SSR 一致),或該區塊改 dynamic no-ssr。**→ 已修(2026-07-14:`browserSupported` 改為 `useState(false)` + `useEffect` 後置 `browserSupportsWebAuthn()` 判斷,SSR 與首次 client render 一致;live 驗證兩次載入 console 零 hydration 錯誤、dev issue badge 消失、passkey 按鈕 mount 後正常顯示;client 303/303 / lint / typecheck 全綠)**

2026-07-14 Phase 29 live e2e 實測:console EXCEPTION `Hydration failed...` 指向 `<AuthForm mode="sign-in">` 下 `+ <div className="...authPasskeyMethod">`(三次載入均重現);`apps/client/src/app/auth-form.tsx` passkey conditional UI
KB-14HIGH

重設密碼後帳號仍鎖定、且鎖定被誤報為「帳號或密碼不正確」:member-base 預設 `loginFailedBanThreshold=5` 且未設自動解鎖,`login()` 在驗證密碼**之前**就拋 `MemberBannedError`;而 `changePasswordWithToken` 不歸零 `loginFailedCounter` → 使用者忘記密碼連錯 5 次後,即使成功重設密碼也永遠登不進去;又因 `AuthService.signIn` 裸 catch 把所有錯誤壓成 `AUTH_INVALID_CREDENTIALS`,使用者只看到「帳號或密碼不正確」,無從得知已鎖定。**→ 已修(2026-07-14 同日:(1) `resetPasswordWithToken` 成功後歸零 `loginFailedCounter`(重設即證明信箱所有權,解鎖自助化);(2) `signIn` 對 `MemberBannedError` 改拋新錯誤碼 `AUTH_ACCOUNT_LOCKED`(403)+雙語訊息引導走忘記密碼;auth 83/83、live 驗證鎖定訊息顯示、重設後計數 5→0、新密碼登入成功);上游同款修法已隨 `@rytass/member-base-nestjs-module@0.4.0` 發佈(2026-07-15 升級採用,應用層補償同日移除、live 重驗計數歸零由套件完成)。同版新增的 `defaultAdminAccount`(授 `::SUPER_ADMIN::` guard 層全域 allow-all)經評估**不採用**:語意與 Phase 7a M5/D6 的 org-less `platform_admin`(僅 /platform 面)不符、且過不了 `PlatformAdminGuard`,seed script 維持原樣(2026-07-15 產品裁示)**

2026-07-14 使用者實測回報(fantasyatelier@gmail.com 重設成功仍無法登入);DB 實查 `loginFailedCounter=5`(07:41-42 五筆 failed login logs)、`passwordChangedAt` 10:37 已更新;`member-base.service.js:253-268` ban 判斷先於密碼驗證、`changePasswordWithToken` 未觸碰計數
KB-15LOW

**→ 已修(2026-07-18)**:`resolveActiveConversationOrThrow` 共用 helper 拆三情境——tenant 內查無 / 配錯 project → `MCP_INPUT_INVALID`,真非 ACTIVE 才回 `MCP_TARGET_FROZEN`;tenant 過濾留在 SQL WHERE 維持跨 tenant 不可枚舉;早期檢查與 transaction 內行為一致;新增 2 個 failpoint 測試。原始問題:`MCP_TARGET_FROZEN` 語意過載:`mcp-capture-submission.service.ts` 的 conversation 查核(id+tenant+projectId+ACTIVE 的 findOne)落空時一律回 `MCP_TARGET_FROZEN`——「projectId 與 conversationId 配對不符/不存在」與「目標真的被封存」共用同一錯誤碼,MCP client 端 agent 會誤判為專案凍結、回報「清單顯示可寫但送出被凍結」的假性資料不一致。修法方向:同 tenant 內的配對不存在改回 `MCP_INPUT_INVALID`(或獨立 not-found 語意),跨 tenant 仍維持不可枚舉。

2026-07-15 Phase 30 M5 live e2e 實測:headless agent 第一輪送出配錯 project/thread 配對收到 FROZEN 並誤判;DB 實查該 project `archived_at IS NULL`、conversation `status='ACTIVE'`;同配對修正後重送成功(submission `03ef71f7`)
KB-16HIGH

多 replica 下 Casbin enforcer in-memory policy 與 DB 分歧:production `lilas-api`(2 replicas,v0.0.60)其中一個 pod(`bhzqh`)自 2026-07-15 13:14 UTC 起對 org owner 的繼承專案存取一律 enforce false(`findProject` 拋 `PROJECT_PERMISSION_DENIED`),另一 pod(`jhm5s`)同請求正常 allow——同一 token 對 `project(id)` 連打 10 次呈 `DENIED,OK` 完美交替(round-robin)。DB `casbin_rule` 規則完整(offline 以相同 model+DB 規則重放 enforce = true;member 的 `organization_owner` grouping 與 org domain 全套 project policy 都在),故為壞 pod 的記憶體態分歧,非規則遺失、非部署落後(v0.0.60 = main HEAD)。根因類別:casbin typeorm-adapter 無 watcher/跨 pod policy 同步機制,任一 pod 開機後其 in-memory policy 只反映自身寫入;該 pod 開機(07-15 00:07)後正常 13 小時才開始 denial,確切觸發事件未定位(07-15 當日有 Phase 30 M5 live e2e 與大量 AI memory 活動)。使用者可見症狀:org owner 側欄看得到所有專案、點任何專案間歇(或經 SPA 快取後穩定)顯示「您沒有存取此專案的權限」。緊急處置:`kubectl rollout restart deploy/lilas-api -n lilas`(重載 policy 即復原)——**已於 2026-07-16 執行並驗證復原**(同 token 10 連發 `project(id)` 全 OK、專案頁完整渲染)。**→ 已修(2026-07-16,0330a6b;v0.0.62 已部署上線)**:根治修正:`libs/auth` 新增 `CasbinPolicyReloadService`——週期性(`CASBIN_POLICY_RELOAD_INTERVAL_MS`,預設 60s)將 `casbin_rule` 與 enforcer 記憶體 diff,以 `selfAddPolicy` / `selfRemovePolicy`(watcher 回呼原語,不寫回 DB、增量重建 role links)只修 delta,避免 `loadPolicy()` 清空視窗競態;偵測到分歧記 warn log 供觀測。6 項 spec 全過(含 KB-16 情境重現:分歧 enforce false → reconcile 後 true)。

2026-07-16 live 診斷:pod log `bhzqh` 192 次 `PROJECT_PERMISSION_DENIED`(首筆 07-15T13:14:03Z)vs `jhm5s` 0 次;browser 同 token 10 連發 `project(id)` DENIED/OK 交替;offline casbin 重放(DB 2225 p + 222 g rules)enforce true;audit_logs `project.accessed_via_organization_inheritance` 同分鐘內有 allowed 紀錄
KB-17MEDIUM

AI suggestion ACTIVE 去重為 check-then-act 競態:`hasActiveSuggestionWithTitle`(`libs/ai-core/src/lib/ai-suggestion.service.ts:143`)先 `findOne` 查有無 ACTIVE 列、呼叫方再自行 insert,中間有 TOCTOU 空隙;`ai_suggestions` 僅有 `@Index(['projectId', 'status'])` 一般索引(`libs/ai-core/src/lib/ai.entities.ts:640`),無 `(project_id, suggestion_type, title, status)` unique constraint。三個呼叫點(`memory-unlinked-mention.handler.ts:170`、`structured-activity-observer.handler.ts:156`、`project-observer.handler.ts:371`)皆受影響。單 replica 下同一 poll tick 以 `Promise.all` 平行處理多個 claimed event 即有機率重複(同 project 同 term 的 GLOSSARY_GAP 疊卡);worker 多 replica 會放大。修法:partial unique index `(project_id, suggestion_type, title) WHERE status = 'ACTIVE'` +寫入端 `ON CONFLICT DO NOTHING`,見 [ADR 0028](../adr/0028-worker-horizontal-scaling.md) 決策 4。**→ 已修(2026-07-17,Phase 33 M1)**:migration `1786500000000` 清 ACTIVE 重複列+partial unique index `IDX_ai_suggestions_project_type_title_active`(已套用 shared DB);`createSuggestion` 改 `.orIgnore()`、conflict 回 null 不發 audit;全部 6 個呼叫點(含 spec 未列的 project-observer decision 路徑、github ×2、intake ask 路徑)null 安全;獨立稽核 PASS、ai-core 399 spec 全綠

2026-07-17 worker 水平擴展研究(三方獨立 code 查證):service/entity/呼叫點行號如左;`ai.entities.ts:638-640` 實查僅一般複合索引、無 unique
KB-18MEDIUM

**→ 已修(2026-07-18)**:`*_status_updated_at` 欄位+claim 放寬(PENDING 或逾時 SENDING,`NOTIFICATION_SENDING_TIMEOUT_SECONDS` 預設 600s)+handler no-op 語意修正(終態才 no-op,新鮮 SENDING 丟例外交還 outbox 退避重試);migration `1786500000004` 一次性把既存卡死 SENDING 標 FAILED(其 outbox 已 PROCESSED 無法重驅動)。原始問題:Notification email/push 卡 SENDING 即永久漏寄:email(`apps/worker/src/notification/notification-email.handler.ts:86-104`)與 push(Phase 33 M3 起同款 claim 機制)都以原子 `UPDATE ... SET *_status='SENDING' WHERE *_status='PENDING'` claim 後才寄送,若 process 在 SENDING 期間死亡(pod 重啟/OOM),該列狀態永遠停在 SENDING——之後任何重試都 claim 不到(非 PENDING),信件/推播靜默漏發,無補償機制。與 Phase 33 的「防重寄」修法方向相反(重寄防護正確依賴 SENDING 排他),需獨立設計補償(如 SENDING 超時掃描回退 PENDING+attempts 上限,或 outbox 式 lease)。

2026-07-17 Phase 33 M3 冪等審查(獨立子代理)發現;email claim 機制既有、push 為 M3 新增同款語意

Backlog

open 23已領走 9卡產品決策 4已完成 17
BL-01open

Multi-agent coordination policies:ADR + 現況 event/artifact 協調文件化 + guardrail 測試(設計工作,非新子系統)

BL-03open

外部 queue provider 評估(GCP Pub/Sub + Cloud Tasks 或 Redis + BullMQ)

條件觸發:outbox 觀測顯示不足
BL-04open

Production DB / R2 與 dev 拆分 cutover(乾淨起步);屆時一併評估 HPA

BL-05open

Notification retention 分區/歸檔(仍不刪除)

BL-53open

Multi-replica 冪等強化殘項(Phase 33 M3 收尾分流):(a) GitHub backfill(`runBackfill` 的 `backfillPullRequests`/`backfillIssues`/`backfillReleases`)逐筆 upsert transaction 未套 entity 級 advisory lock,與同 entity 即時 webhook 並行時為 last-write-wins 冗餘覆寫(cost-only,webhook 端已有鎖、per-link event 由 `detectAndPublish` repo 級鎖涵蓋);(b) document extraction 的 OCR/LLM 呼叫在 lease 超時極窄窗口可能重複執行(資料/事件重複已由 `document_source_texts` unique index 擋下,僅成本),可選 per-documentVersion `pg_advisory_xact_lock` 消除。兩項皆非正確性缺口,依營運觀測(lease 超時頻率、backfill 使用頻率)決定是否補。

條件觸發:營運觀測到 lease 超時重複處理
BL-08open

ADR 0012 BYO-keys 棧的 production live 驗證:取得 Anthropic(等)API key → capability binding 指向 → live smoke + browser smoke(原 items J/K 收斂;transport 與 binding 機制已於 2026-06-23 交付,剩驗證非實作)

需真實 provider API key
BL-09open

真實 OCR / document extraction provider 接入(原 item L;ADR 0012 之後即 `VISION_OCR` slot 的 provider 選擇問題):第一層 text-layer PDF,掃描件再評估;含成本/隱私/timeout/audit 設計

BL-10open

GitHub milestone drift detection(前置:milestone projection 或裁示 title-only weak matching)

BL-11open

高歧義 entity link AI ranking:AI 直接建 `github_entity_links` candidate rows(`created_by_kind = AI`),沿用既有 confirm/reject

BL-12open

Confirmed-link deterministic read model:把 `findConfirmedLinks()` ad hoc 直查升級為 materialized read model + invalidation(讀取路徑已運行,屬 hardening)

BL-13open

Transcript 候選的 thread 卡片連結(conversationId 反查或 event payload 補欄)

BL-14open

Extractor 模型升級評估(gpt-4o-mini → gpt-4o)

需用量與準確率資料佐證
BL-16open

Edit 信號入校準迴路(標題大改的 update mutation 信號)

BL-17open

UPDATE 候選的 FK 欄位 matching(`milestoneId` / `ownerMemberId` 解析)

BL-18open

`.mp4` 視訊音軌提取(ffmpeg / cloud transcoding 評估)

BL-19open

Whisper 繁體輸出 OpenCC 確定性後備(現況為引導 prompt,非 100% 保證)

條件觸發:實際觀察到簡體輸出
BL-33open

QA citation 深連結:collaboration 分頁 query-param 可定址(Plan/Decisions/Materials 現為 client-side `useState` tab)+ 物件/文件錨點定位 + ORG/USER scope citation 的 organizationId 穿線(Phase 12 as-built 僅 MEMORY_BLOCK(PROJECT)→memory 頁、其餘連 collaboration 頁或不連結,見 phase-12-implementation-plan.md §1.4)

BL-20open

`AiSuggestionStatus.SUPERSEDED` 語意與 DB constraint(原 Phase 8 item Q;varchar 無 enum constraint 的收斂)

BL-27open

→ 移至 known-bugs **KB-01**(2026-07-06;Maintainer 並行去重)

BL-28open

→ 移至 known-bugs **KB-05**(2026-07-06;prod worker replica 確認)

BL-29open

Demo quota 平台管理 CRUD(tenant ceiling / self-quota 調整 UI;目前僅 enforcement 生效,原 phase-11 plan 未竟項 2026-07-06 分流至此)

BL-30open

Maintainer 批次 pass 的 per-unit action rows 只有第一筆掛 proposal 的 `aiActionId`,其餘 unit 的 action 無反向關聯(KB-01 修復的已知設計債;目前無下游功能依賴,若未來要做「action → 產出 proposal」查詢/UI 需補關聯欄位)。同場觀察:advisory lock 專用連線橫跨 judge LLM 呼叫,多 group 平行時的連線池壓力值得加 metrics(2026-07-06 稽核報告)

BL-46open

Pattern-audit LPRC ordering check:擴充 `project-rule:audit-patterns` 的 pattern-auditor agent,新增 LPRC 稽核項(L1 zero-interpolation、no-static-after-dynamic、template-version 常數存在性)。需改共用 plugin 內 agent 邏輯(`rytass-claude-code/project-rule` marketplace plugin,非本 repo 檔案),影響範圍跨專案,需另行評估。來源:Phase 22 M6(2026-07-11)。

待評估
BL-35已領走

宣告式授權防線(defense-in-depth):升級 `@rytass/member-base-nestjs-module` ^0.3.0(2026-07-07 上游已交付四開口:checker 注入 ExecutionContext/request、`casbinDomainResolver` 多 domain OR enforce、richer decision 掛 `request.casbinDecision`、`@HasPermission` 對齊),接 `casbinDomainResolver`(GraphQL args → project/org/tenant 三層 domain)+在 root handler 逐步補 `@AllowActions`。**邊界**:service 層 `canForProject` guard 維持授權 SSOT 不拆;visibility 隱式存取(ORG_OPEN/ORG_INTERNAL)無 Casbin policy row,宣告層覆蓋範圍需避開或以自訂 checker 委派處理(見 phase spec 分析)。2026-07-07 權限盤點研究產出

**→ Phase 14**(2026-07-07)
BL-51已領走

Transactional email 送達性強化:2026-07-16 live 證據——reset-password 信在 Gmail 被標「看似危險」且連結被停用(SPF/DKIM/DMARC 對齊皆 pass、SendGrid 網域驗證 valid、Safe Browsing 無標記;判定為 heuristic 疊加:寄件網域 `rytass.com` 與連結網域 `kusabanabiyori.com` 錯配+新網域信譽不足+密碼重設措辭+HTTP open-tracking 像素)。解法選單(依效果/成本):(A1) per-message 停用 open tracking——nodemailer 加 `X-SMTPAPI` header `filters.opentrack.enable=0`,不動 SendGrid 帳號層級設定;(A2) HTML 樣板補完整文件結構+可見網址文字+品牌 footer;(B) 消除網域錯配——From 改 `noreply@lilas.kusabanabiyori.com`(SendGrid 對該網域做 domain authentication,需 DNS 權限)或產品改掛 `lilas.rytass.com`(產品決策);(C) Google Postmaster Tools + Search Console 監測信譽。建議 A1+A2 先行,B 需確認 DNS/產品方向。

**→ Phase 32**(2026-07-16;已領號)
BL-52已領走

Worker 多 replica 水平擴展:解除 `workerDefaults.replicas: 1` 過時限制(2026-07-17 三方查證——`main.ts` / `values.yaml` 聲稱的 GitHub `requestManualSync` in-process mutex 已不存在,現行防重為 DB-backed `github_sync_runs`;claim 基礎設施 `FOR UPDATE SKIP LOCKED` + lease 本已 multi-replica safe)。放寬前缺口:(1) lease 預設 60s 不敵長任務(AI LLM 呼叫、demo build)致超時重複認領;(2) `ai_suggestions` ACTIVE 去重為 check-then-act 無 unique constraint(KB-17);(3) `event_outbox` 無 `lease_owner` 可觀測;(4) handler 冪等未逐一審查(email 寄送不冪等)。設計決策見 [ADR 0028](../adr/0028-worker-horizontal-scaling.md):靜態拉高 lease、DB partial unique index、冪等審查 gate、整包 ×2 + PDB;HPA 仍綁 BL-04、外部 queue 仍綁 BL-03。

**→ Phase 33**(2026-07-17;已領號)
BL-31已領走

Capture thread 內 grounded read-only Q&A(同對話框問答+擷取並存:多意圖 triage、以提問者身分三層檢索、拒答 fallback 落 OPEN_QUESTION、回答持久化永不再擷取;設計決策見 [ADR 0019](../adr/0019-grounded-readonly-qa-in-capture-thread.md),2026-07-06 產品裁示 D1–D4 已定)

**→ Phase 12**(2026-07-07)
BL-21已領走

W1 Backlinks:反向引用查詢 + 面板(1 個 index migration)

**→ Phase 19**(2026-07-09)
BL-22已領走

W2 Vault export:唯讀 markdown zip 匯出 + audit event

**→ Phase 19**(2026-07-09)
BL-23已領走

W3 Wikilinks:`[[#block-id]]` 解析 → REFERENCES 邊 reconcile

**→ Phase 19**(2026-07-09)
BL-24已領走

W4 Dynamic views:block metadata 過濾視圖(Wave B 才加 saved views 表)

**→ Phase 19**(Wave A;2026-07-09)
BL-49已領走

**Phase 28 relation coverage / review volume 校準**:S0-S14 after 為 511 ACTIVE blocks、cosine >= 0.85 跨檔 54 對(before 426 blocks / 33 對),pair density 0.0456% -> 0.0533%;雖建立 50 wikilink REFERENCES,但僅 3 條直接覆蓋該 54 對,另有 57 READY/HIGH(14 multi-file)待人審。2026-07-15 使用者裁示採 measurement-first 推進:relation/proposal-aware audit、明確 oracle、原 Encore 全量重放+多組隔離 fixture,證明合法共存、destructive recall 與 pending churn 收斂;不得先降 band `0.70` / top-K `5`,Decision 5 仍待證據。**→ Phase 31 underway**。

→ Phase 31(進行中)
BL-02卡產品決策

Cross-organization / cross-tenant intelligence decision record + isolation guardrails(僅文件與守衛,無資料流)

[產品決策](跨界資料可見性)
BL-06卡產品決策

Quota 硬擋 / 付費方案(目前 AI budget 超標僅通知不中斷)

[產品決策]
BL-07卡產品決策

External sharing / guest-seat 產品決策:是否需獨立 `external_collaborator` role,或維持 guest seat + 補文案/quota/sharing UX(原 Phase 8 item P,詳見 [`archive/phase-8-post-launch.md`](./archive/phase-8-post-launch.md))

[產品決策]
BL-15卡產品決策

Per-thread intake 開關(`conversations.intake_disabled`)

[產品決策](明確需求)
BL-38已完成

Passkey authentication:在既有 `@rytass/member-base-nestjs-module` + JWT + Casbin 架構上新增 Lilas-owned WebAuthn credential layer(`member_passkeys` + one-time challenge store),支援登入後綁定、discoverable Conditional UI 與 email-first passkey fallback;不改 `members.password`、不重寫 cookie/session 模型、不做 passkey-only sign-up。設計決策見 [ADR 0022](../adr/0022-passkey-authentication.md)。

**→ Phase 17 completed**(2026-07-10 M9 amendment;產品擁有者同日確認真人 real-authenticator browser e2e;既存 worker regression 由 Phase 20 W3 修復並獨立驗證)
BL-37已完成

Provider key 全面去 env:移除 credential `env_fallback` column + legacy `ModelRouter`/adapter/5 個 env-reading transport,12 個 worker handler 翻成 resolver-only,`OPENAI_API_KEY`/`ANTHROPIC_API_KEY` 從部署 env 退役。設計決策見 [ADR 0021](../adr/0021-eliminate-provider-env-keys.md),2026-07-08 產品裁示上 Scope L。涵蓋原 BL-08 剩餘的 production live 驗證(resolver-only 全鏈 live e2e)。

**→ Phase 16 completed**(2026-07-08)
BL-34已完成

Server 端上傳 bytes 與宣告 contentType 的一致性驗證:現行白名單為純宣告制(`createPendingUploadObject` 於 bytes 到達前驗證、`uploadDocumentBytes` 不嗅探內容),client 可宣告任意白名單型別上傳任意 bytes——既有信任模型缺口,非 2026-07-07 client 端純文字嗅探(未知副檔名 → sniff → text/plain)所引入;補法:PUT bytes 時 server 端嗅探與宣告型別一致性檢查

**→ Phase 26 completed**(2026-07-13)
BL-40已完成

Conversation knowledge intake reclassification:Phase 18 已完成 `STANDING_FACT` immediate intake MVP,但未開 work ↔ knowledge / knowledge type ↔ knowledge type reclassification。後續需設計 GraphQL input 支援 `targetKind` / `knowledgeType`,至少先支援 work → `STANDING_FACT`、`STANDING_FACT` → work,並保留校準信號。

**→ Phase 20 W6 completed**(2026-07-10;V12 VERIFIED)
BL-41已完成

Knowledge candidate edit-before-confirm:Phase 18 memory candidate UI 暫時隱藏 inline edit;後續需補 `STANDING_FACT` 的 entity / attribute / value / detail 編輯表單與 server-side typed validator,再擴展到其他 knowledge payload。

**→ Phase 20 W6 completed**(2026-07-10;V12 VERIFIED)
BL-42已完成

Reserved knowledge type executable rollout:Phase 18 只保守 reserve `GLOSSARY_TERM` / `REQUIREMENT` / `EPISODIC_NOTE` / `PROCEDURAL_RULE` schema + UI label;後續需逐類啟用 extractor normalization、canonical file mapping、proposal rendering、risk semantics 與 tests。

**→ Phase 20 W6 completed**(2026-07-10;V12 VERIFIED)
BL-43已完成

First-class intake calibration dimensions:Phase 18 以 `DOCUMENT` compatibility sentinel + exemplar JSON note 記錄 memory candidate calibration;後續需把 target family / knowledge type 升為 first-class calibration key 或欄位,避免長期污染 object-type analytics。

**→ Phase 20 W6 completed**(2026-07-10;V12 VERIFIED)
BL-44已完成

Knowledge intake dedup fingerprint:Phase 18 consolidation dedup 先用 overlapping source refs 避免同訊息重複 `facts.md` proposals;後續需加入 entity/attribute/value fingerprint 或 canonical block fingerprint,處理不同訊息重述同一 fact 的重複 proposal。

**→ Phase 20 W6 completed**(2026-07-10;V12 VERIFIED)
BL-25已完成

W5 Unlinked mentions:偵測器 + AI suggestion(新 enum 值含 i18n)

**→ Phase 20 W7 completed**(2026-07-10;V11 VERIFIED)
BL-26已完成

W6 Local graph:一跳關係圖 UI

**→ Phase 20 W7 completed**(2026-07-10;V11 VERIFIED)
BL-32已完成

Reconcile 近義重述召回與跨檔收斂。Phase 27 已完成稽核、pending supersede、glossary/attribution、judge rubric 第一段;2026-07-13 新 Encore 重放(project `fee443bd-8b04-4db6-afe3-3a3b8d2143ee`、branch `ed511f31-1bf0-4c63-95f6-6ee8c83c5720`,`pnpm memory:audit --branch <id> --json`)after 仍有 40 對近重複(同檔 7、跨檔 33),跨檔占 82.5%;flat -> points 與 monthly -> weekly 兩類均以 destructive UPDATE proposal 正確指向舊 block,recall 2/2。I5 結構性方案見 [ADR 0027](../adr/0027-entity-anchored-cross-file-reconciliation.md)。

**→ Phase 27 第一段 completed;→ Phase 28 第二段 completed**(2026-07-14;M0-M7 VERIFIED)
BL-36已完成

`facts.md` standing-facts 記憶層實作([ADR 0020](../adr/0020-standing-facts-memory-layer.md),Accepted implemented):新 canonical 檔(SEMANTIC、AI 可寫、參與 decay + bi-temporal supersede)+entity-anchored proposition 格式(復用 ADR 0013)+entity index MVP(read-side projection,不把 JSON 混入 canonical markdown parser)+maintainer/consolidation 抽取改派(KB-08 指引 requirements→facts、對話事實入 facts)+requirements.md 130+ 誤置列遷移。2026-07-08 後續產品裁示補 immediate intake → knowledge rail,另立 [ADR 0023](../adr/0023-conversation-knowledge-intake.md) / Phase 18,不回填 Phase 15。**→ Phase 15 completed**(2026-07-09;core implementation、M8 migration、live e2e、KB-11 retest 已完成)

已完成
BL-39已完成

Lilas MCP capture and recall adapter:讓 Claude / Codex / Cursor 等本地或 remote MCP host 可將 AI 工具收集到的研究、筆記、摘錄與脈絡送進 Lilas capture thread,並以使用者身份做 bounded memory recall。設計決策見 [ADR 0024](../adr/0024-mcp-capture-and-recall-adapter.md)。**→ Phase 21 completed(2026-07-10;local stdio + remote OAuth verified)**。

已完成
BL-50已完成

`lilas-capture` skill 帳號頁服務化發佈:`docs/integrations/mcp-skill/`(2026-07-14 建立)的 user-scoped Agent Skill + CLAUDE.md/AGENTS.md hint 目前為手動複製安裝;後續可由 account MCP setup guide 動態產生含正確 API base 的 skill 下載包與 hint 文字,並評估另建公開 repo 走 Claude Code plugin marketplace 推送更新。MCP tool 介面變更時須同步更新該目錄(SSOT:`libs/mcp/src/lib/mcp-tool-contracts.ts`)。**→ Phase 30 completed(2026-07-15 live e2e PASS;帳號頁 host × scope 四組合指南+api skill endpoint+curl 安裝;marketplace 評估仍留本檔未排程)**

已完成(marketplace 評估除外)
BL-45已完成

Prompt cache governance 與 conversation context assembly:跨 provider cache-aware invocation 抽象(segments + cacheHint)、LPRC 三層 prompt 渲染慣例(含 5 個既有排序 offender 修正)、`ai_actions` cache-token 欄位與 `ai_model_prices` cache 費率的成本量測、intake 對話管線共享前綴模式、`authoring-cacheable-prompts` project skill、GPT-5.6(explicit breakpoint / 1.25× write / prompt_cache_key)就緒。設計決策見 [ADR 0025](../adr/0025-prompt-cache-governance-and-context-assembly.md)。**→ Phase 22 completed(2026-07-11;OpenAI 路徑 live 驗證 VERIFIED,Anthropic/GPT-5.6 config-gated)**。

已完成
BL-47已完成

Scheduler workload prompt LPRC 重排+1h marker:consolidation / reflection / skill-induction / maintainer 主抽取的 prompt 前綴目前為 static 與插值交錯(`project_id=`、evidence、languageDirective 混在單一字串),無法標 stable marker。需比照 Phase 22 M3 模式重排為 L1/L3+golden 迴歸,再掛 `ttl:'1h'`。這些是 ADR 0025 點名的高重複、latency-insensitive workload,重排後收益最大。來源:Phase 22 M5 零插值檢查(2026-07-11)。

**→ Phase 25 completed**(2026-07-13)
BL-48已完成

通知聚合與 seen 語意:read-time grouping(`aggregate_key`,可聚合類別摺疊為「N 則」群組節點)+ `seen_at` 欄位(badge = unseen、開 Drawer 即 markAllSeen 歸零,`read_at` 語意不變)。解 99+ 同型通知洪水(live 證據 2026-07-10)與「badge 只能靠標已讀歸零」的 UX 缺口。設計見 [ADR 0026](../adr/0026-notification-aggregation-and-seen-semantics.md)。來源:2026-07-12 通知系統稽核(Phase 23 範圍外分流)。**→ Phase 24(2026-07-12,ADR 0026 同日核可)**

**→ Phase 24 completed**(2026-07-12;原「已領號」為格式漂移,2026-07-17 Phase 34 收斂補正)

Commits

725 筆/近 30 天 427 筆/66 個 release tag
1c7e5062026-07-18

build(status-page): invoke wrangler via pnpm dlx

74715402026-07-18

docs(roadmap): record phase 34 delivery, close KB-15 and KB-18

b28de302026-07-18

fix(notification): recover notifications stuck in SENDING via claim timeout

fc936d72026-07-18

fix(mcp): distinguish missing conversation pairing from frozen target

7e26ef22026-07-18

feat(client): add platform admin shortcut to project status page

5d2973e2026-07-18

ci(deploy): publish status page after production rollout

65e61ce2026-07-18

feat(status-page): add project status dashboard app and build-time collector

bd9c3742026-07-17

docs(roadmap): mark phase 33 production rollout complete

cce93bb2026-07-17

docs(roadmap): record phase 33 delivery, close KB-17, add KB-18 and BL-53

6ca498d2026-07-17

build(deploy): scale worker to 2 replicas with PDB and lease overrides

31a0d882026-07-17

feat(db): register phase 33 migrations

c20b0bb2026-07-17

fix(worker): make document source text insert atomic against re-claims

c2f2a662026-07-17

fix(github): serialize projection state-transition detection with advisory locks

e1852dd2026-07-17

fix(notification): claim web push dispatch via push_status state machine

361e1002026-07-17

feat(event-core): record outbox lease owner on claim

fa44f392026-07-17

fix(ai-core): enforce DB-level dedup for ACTIVE AI suggestions

663ea5d2026-07-17

docs(roadmap): record phase 33 worker horizontal scaling spec, ADR 0028, BL-52 and KB-17

6e786cf2026-07-17

style(tenant): format resolver per prettier

b1fb2842026-07-17

docs(roadmap): record phase 32 email deliverability spec and BL-51

b1f2a0e2026-07-17

docs(roadmap): add phase 28/31 specs and sync reconcile plan records

Health

i18n key 對稱性2,681 / 2,681
DB migrations91
最新:1786500000004-kb18-notification-status-timeout-recovery.ts
測試檔分佈合計 265 檔/28 個專案
apps/worker
56
libs/db
39
libs/memory
28
apps/client
26
libs/ai-core
25
libs/github
13
apps/api
12
libs/intake
11
其餘 20 個專案未列出 4 個專案 0 測試檔:apps/demo-renderer、apps/status-page、libs/editor、libs/memory-core
技術債註記(TODO/FIXME/HACK)11
部署版本v0.0.66
api 2 / client 2 / worker 2 replicas(chart 預設 tag v0.2.1
Repo 規模6 apps / 22 libs
TS 總行數約 242,465