## Problem #58 歸因後,no-op build(也就是每次查詢前的增量併入)剩下兩個**隨索引總量成長、與改動量無關**的固定項: 1. #44 正確性閘 `sourcesWithoutCursor()` 的 **Q1**(orphan chunks:`chunk_sources` 裡沒有對應 chunk 的列)——逐列 b-tree 探查。#58 試過 `EXCEPT`(3.08 s,更糟)與 count-diff(0.072 s 但**不 sound**:等價性假設「chunk_sources 無懸空引用」,而那正是本閘要稽核的不變式家族)。 2. `chunkCount()` 的 `SELECT COUNT(*)` 全表走訪。 Q2 已在 #58 改成 `EXCEPT`(≈2.7×)。#58 之後查詢仍約 1.6 s(當晚語料),「1 秒以內」(#56 的目標)未達。 ## Type enhancement(**設計決定**,非 Simple——動到 #44 閘的語意) ## Expected 決定並實作「維護式記帳」: - 計數器/增量 orphan 簿記由寫入交易維護,閘改讀簿記而非每 build 全表稽核; - **必須回答**:簿記本身如何被稽核(它與資料是否一致),否則只是把「稽核者假設待稽核物」搬到另一層——#58 棄 count-diff 的理由要在這裡被正面處理; - 不變式 2(增量 ≡ 全量重建)與 #44 的拒絕語意不可弱化; - 前後量測落 `docs/measurements/`(同時點 A/B)。 建議走 Plan/Spectra 路徑(`/idd-diagnose` 會判)。 ## Actual 每 build 付兩個 O(索引總量) 的固定成本;#58 的 Simple 範圍刻意沒有偷渡這個設計決定(見其 closing summary)。 **Source**: surfaced during /idd-close #58 closing summary scan (Step 3.5) --- ## Current Status - **Phase**: diagnosed - **Updated**: 2026-09-07(diagnosis 已 post;更正:chunkCount 0.01 s 非固定成本;方向:trigger 維護 source_count+partial index+按需 --audit;Complexity Spectra;Conflict Class A) ### Tasks - [ ] 1. spec:閘 Q1 改讀結構性計數;完整稽核改 `--audit`/`--full`;`source_count` 衍生欄;layout 6 - [ ] 2. `IndexDatabase`:欄+trigger+partial index;`layoutVersion = 6` - [ ] 3. `sourcesWithoutCursor()` Q1 讀索引;`auditOrphans()` 跑舊 Q1 - [ ] 4. `IndexBuilder`/CLI `--audit` - [ ] 5. 測試:trigger ≡ 重算(四條路)+變異;IncrementalEquivalence snapshot 含新欄 - [ ] 6. `docs/measurements/` 同時點 A/B(含 chunkCount 更正) - [ ] 7. CHANGELOG/release notes:升版要 `--full`
Problem
#58 歸因後,no-op build(也就是每次查詢前的增量併入)剩下兩個隨索引總量成長、與改動量無關的固定項:
sourcesWithoutCursor()的 Q1(orphan chunks:chunk_sources裡沒有對應 chunk 的列)——逐列 b-tree 探查。查詢剩餘 ~1.0–1.3s 的 profile——「1 秒以內」的下一步落點 #58 試過EXCEPT(3.08 s,更糟)與 count-diff(0.072 s 但不 sound:等價性假設「chunk_sources 無懸空引用」,而那正是本閘要稽核的不變式家族)。chunkCount()的SELECT COUNT(*)全表走訪。Q2 已在 #58 改成
EXCEPT(≈2.7×)。#58 之後查詢仍約 1.6 s(當晚語料),「1 秒以內」(#56 的目標)未達。Type
enhancement(設計決定,非 Simple——動到 #44 閘的語意)
Expected
決定並實作「維護式記帳」:
docs/measurements/(同時點 A/B)。建議走 Plan/Spectra 路徑(
/idd-diagnose會判)。Actual
每 build 付兩個 O(索引總量) 的固定成本;#58 的 Simple 範圍刻意沒有偷渡這個設計決定(見其 closing summary)。
Source: surfaced during /idd-close #58 closing summary scan (Step 3.5)
Current Status
Tasks
--audit/--full;source_count衍生欄;layout 6IndexDatabase:欄+trigger+partial index;layoutVersion = 6sourcesWithoutCursor()Q1 讀索引;auditOrphans()跑舊 Q1IndexBuilder/CLI--auditdocs/measurements/同時點 A/B(含 chunkCount 更正)--full