Release History
Current version: 2.95.14
500 releases across 1 months
Invalid Date
500 releases
Invalid Date
- New Route 4 graph workers through worker write endpoint a571982
- Fixed Move single-writer port 7841 to 7849 + crash-proof the bind fc271ae
- New Enable write API host on siftersearch-worker 7d36178
- Fixed ExtractHeading(bodyText) not imported content object — 2nd occurrence 2d251f8
- New Single-writer foundation — route writes through worker-hosted write API 523378e
- Fixed Hash bodyText not imported content namespace object 2e11dd7
- Fixed Pass DeepSeek thinking param via extra_body not top-level 3540b91
- Fixed Explicitly set DeepSeek thinking mode via API parameter 291de2a
- Fixed Cap maxTokens at 4096 and track API timeout failures 20b8cb9
- Fixed Mirror entity_mentions to sifter.db for sync worker coverage 8e5fdb4
- Fixed Write entity_mentions to sifter.db not graph.db abc485b
- Fixed Process 'arbitrate' extractions alongside 'accept' c2c6fe5
- Fixed Remove blocking embedding call, parallelize batch 12x 98c20fb
- Fixed Doc-tier-priority — add Saiedi/Momen, move Momen above scripture, pilgrim notes above catch-all 53ba291
- Fixed Use deepseek-v4 across all graph workers, drop old models 7381e5b
- Fixed Íqán is primary scripture (authority=10), not core canonical (8-9) ef2bd47
- Fixed Authority as tiebreaker not scoring override 415db73
- Fixed Update analysis.json suite label to Ocean (504 fixtures) 03c8cd1
- Chore Search quality 79% (41/52) — fixture fixes + page explanations fc17a7a
- Chore Update search quality results — 37/52 (71%), MRR 0.798 a6edb48
- Fixed API crash under concurrent load — busy_timeout + promise-singleton 299166e
- Fixed Update search fixture queries/accepted docs to match Meilisearch reality 2a1fc23
- Fixed Author authority is a fallback default, not an override dc25afd
- Fixed Thread AbortSignal to ollama/OpenAI calls — cancel background analysis on timeout e847e83
- Fixed TelemetryDb busy_timeout 0→50ms — prevent WAL init crash on contended startup 06a6579
- Fixed Telemetry DB uses busy_timeout=0 — zero event loop blocking 06c414d
- Fixed Telemetry writes use fail-fast DB connection — unblocks search timeouts 1f9fd69
- Fixed Cap hybridSearch embedding call at 5s to prevent hang under concurrent load d9d2c8b
- Fixed Abort background analyzePassagesParallel on timeout — prevent AI call accumulation e8953c3
- Fixed Search quality test runner distinguishes infra errors from search failures ec40cb8
- Fixed Add _timing to public-api.js search endpoint (correct handler for POST /api/v1/search) 588e12a
- Performance Server-side timing in search response + preflight check in test runner 7ea6b36
- Other AI analysis + change log for search quality page 18942de
- Docs Lighthouse score gauges, full fixture tables, run history tracking c22894b
- Docs Add ocean-search-testing scoring model guide + update search quality page 5cc85b9
- New Expand search quality battery to 543 tests (52 core + 491 ocean) 7eecbed
- New Add 491 ocean-search-testing fixtures + --ocean/--all runner flags cde59ae
- Docs Credit David Hunt as creator of ocean-search-testing framework 6da70dc
- Test Update search quality results — 30/52 (58%), MRR 0.738 5832ef9
- Fixed Update fixtures for canonical OL doc_ids + tablet-of-ahmad fix 53de646
- Docs Search Quality Battery page with live results 248af39
- Docs Add Entity-Aware Search page under Research section 63de106
- Fixed Entity sync runs between doc batches + fix missing waitForMeiliTask 42c2618
- Fixed Isolate sync job DB-lock failures so periodic tasks (entity sync) always run fb53866
- Fixed Disable pre-wipe reset that caused infinite DB-lock loop 17bfe0b
- Performance Increase entity mention sync batch 200→1000, interval 2min→30s 6bd49bf
- New Wire entity mention sync into sync-processor periodic loop c9d668f
- Fixed Batch bulkInsertParagraphs + deleteParagraphsByDoc to prevent SQLITE_BUSY storms 4be9c33
- Performance Batch graph.db writes per paragraph into single graphTransaction c913ede
- Fixed Batch transaction retry — 20 attempts capped at 5s, no idle sleep on failure 21152d7
- Performance Batch all sifter.db writes per extraction batch into one transaction 647125b
- Fixed Tier boundary check blocked extractor on arbitrate/reextract backlog a2fd425
- New Log all reads at debug level + EXPLAIN QUERY PLAN for slow reads 89378dd
- Fixed Content column is paragraph_index not position in entity mentions 856ea36
- Fixed API no longer runs graph migrations — graph workers own graph.db writes 3e04219
- Fixed Entity mentions — pre-filter by doc_id via content_ids before graph.db query 39a1486
- New Entity mentions API — GET /api/graph/entity/search + /entity/:id/mentions fc4dcf5
- New Separate graph.db from sifter.db + startup model logging 3879cf2
- Fixed Extraction model deepseek-v4-flash for all tiers, pro for adjudication only c3a8c07
- Fixed Trim title/author/subtitle from OceanLibrary frontmatter on ingest f5c272f
- Fixed Trim doc title before exact-match in apply-doc-priority 7f47e9f
- Fixed Layer sort order, algorithmic grounded text, extractor prompt caching 971d740
- Fixed Validator too strict — only flag entity identity errors, not span precision 6ac4b0b
- Fixed Use transaction() not manual BEGIN/COMMIT in apply-doc-priority 9d74e18
- Fixed Authority tiers + doc priority — use real author/religion fields e529d0d
- Fixed Institutional ranks below scholarly; tier thresholds match doc_priority scale c288a77
- Fixed Rate-limit budget warn logs to 1/hr; bump budget to 3000/mo for full corpus d36d171
- Fixed Remove stale MODEL reference in seedDocContextFromDB 004d5fd
- Other Move entity pipeline model settings to .env-public for easy tuning 19edbfb
- New Tiered extraction — v4-pro for high-authority, v4-flash for rest; process all docs priority-first a772e33
- Performance Entity pipeline cost optimizations — scope floor + cheaper models 3247122
- Other Extraction model deepseek-v4-pro → deepseek-v4-flash 433f453
- Fixed Graph-validator extract JSON by lastIndexOf('}') — Haiku appends prose 0819528
- Fixed Graph-validator pass system msg in messages array + assistant prefill 2185a65
- Fixed Graph-validator strip markdown fences before JSON.parse 2028e68
- Fixed Migration 82 — idx_ev_extraction_id on extraction_validations f27bcc0
- Performance Graph-validator two-step fetchBatch + idx_ev_extraction_id index 47f4329
- Fixed Extraction over-extraction — add scope boundary, mention cap, dynamic work title f498c8a
- Fixed Bump max_tokens 8192→16384 for entity-dense paragraphs 1d47dc0
- Fixed PickNextDoc 80s→8ms — INDEXED BY idx_docs_priority_active + partial index 863a2d8
- New Prose summary rolling context window, 12 preceding paras, DB seed on restart fc8b381
- New Rolling 5-paragraph context window for entity extraction b5bccdb
- Fixed Use deepseek-v4-pro (thinking disabled) — correct model IDs, config in ecosystem not secrets, ORDER BY priority 8277939
- Fixed Replace deprecated deepseek-chat/reasoner with deepseek-v4-flash/pro throughout 8e1d7fc
- Fixed Doc priority — use tier column (not missing authority), add dedup-library script 6ebea48
- Fixed Calibrate-deepseek cap concurrency at 10 to prevent SQLITE_BUSY; add dedup-library script 3136b9e
- Fixed Calibrate-deepseek — handle NBSP in GPB title via GLOB + skip HTML paragraphs 6b9539a
- Fixed Calibrate-deepseek — select GPB by content count, skip image/nav paragraphs 1607873
- Fixed Calibrate-deepseek — drop Unicode LIKE filter + strip markdown from JSON parse 2b9ef5c
- Fixed Calibrate-deepseek GPB lookup — trim trailing spaces in title match 6830904
- Fixed Meili_sync_tasks false-positive FAIL — downgrade to WARN when count is static 9da99d6
- Fixed Arabic/Chinese embedding crash + cap sidecar cache batch at 200 params 92d5b17
- Fixed Prevent library-watcher crash loop — catch all floating promises c324478
- Fixed Raise meili_sync_tasks stale threshold 12h→24h/48h, fix queue backlog messaging 93c7e74
- Fixed Exclude embedders from settings diff to prevent false settingsUpdate on restart d96d530
- Fixed Replace undefined drainOldest() call in processSyncJob with pruneCompleted + delay 14cdc0c
- Fixed Sync_stuck detection uses sync_jobs.status not updated_at — eliminate false positives 189e5f9
- Fixed Escalate meili HNSW stuck to fail() at 36h + guard embedder re-apply during rebuild ff81aa1
- Fixed Meili_sync_tasks message escalates at 24h — distinguish normal rebuild from overdue c6d3323
- Fixed Await checkMeiliBatchStall in Promise.all — prevent silent result drop 69c7925
- Fixed Improve meili_sync_tasks health message — accurate HNSW rebuild context 6c8a3d5
- Fixed Add WAL checkpoint to unified-worker — prevents 2.7GB WAL accumulation 372b253
- Fixed Write-lock starvation in sync pipeline — chunk markSynced + graph-extractor yield b05d72b
- Fixed Pre-wipe meili sync reset in unified-worker (active writer process) bbde1dc
- Fixed Pre-wipe meili sync reset + WAL threshold — resolve meili_vs_db health failure fb25f9f
- Fixed PropagateHypeFromNormalizedHash lock starvation — smaller batches + index dbd75b4
- Fixed Chunk bulkUpdateEmbeddings writes — prevent write-lock starvation bbf47ef
- Fixed Chunk enrichment_pending writes — prevent write-lock starvation b2524eb
- Fixed PickNextDoc filter length>50 — skip docs with all-short paragraphs b5a3aff
- Performance PickNextDoc O(1) — drop EXISTS, use LIMIT 1 on partial index b586758
- Performance Doc-by-doc fetchBatch in graph-extractor — eliminates 98s sort f7744da
- Fixed Revert O(n²) fetchBatch; add resetReextractQueue periodic task b876f89
- Fixed Extractor owns graph_enriched — validator must not write content table b343f11
- Fixed Graph-validator cycles reextract back to extractor queue 8fe4b21
- Fixed Retry logic in fetchPipelineHealth — prevent transient-failure alarm storm 59ebea7
- Fixed Service-pattern fixes for 3 architectural debt items 364e738
- Fixed Raise meili_sync_tasks stale threshold 8h→12h; clarify warning message bec71bd
- Fixed Add meili_sync_tasks reconciler to sync-processor periodic tasks 2ce0792
- Fixed Raise meili_sync_tasks stale threshold 4h→8h — HNSW rebuilds on 4M+ vectors take 5-8h 3a98fa9
- Fixed Run periodic tasks (WAL checkpoint) after each sync job, not only when idle cea99eb
- Fixed Auto-restart siftersearch-api when WAL TRUNCATE checkpoint blocked by reader locks 0dd5e1e
- Fixed WAL stat resolves symlink; improve graph_pipeline warning text 2479f7d
- Fixed WAL checkpoint PASSIVE→TRUNCATE, interval 1h→15min 3211445
- New WAL size health check + pipeline endpoint wal field 8000239
- New Health check for stale meili_sync_tasks + pipeline endpoint sync_tasks field 5bdefb5
- Performance Optimistic Meili sync — markSynced immediately, reconcile failures on restart 5656b75
- Fixed Increase Meili task timeout 900s→7200s — HNSW on 4M+ vector index takes 15-60min/batch 14b4c5a
- Fixed Meili_batch_stall threshold 10min→45min (paragraphs HNSW ~30min/batch normal) 55f1c6c
- Fixed Reduce Meili task poll 50ms to 500ms; add batch-stall health check a7050c2
- Fixed Purge 100 rows/batch+1s delay, no startup orphan check — prevent sync worker starvation 688875e
- Fixed Batch hardDeleteExpired — prevent 15-min write lock on 250K+ soft-deleted rows ef85e4a
- Fixed Bump sync worker SQLITE_BUSY_TIMEOUT_MS 30s→120s 7b9a42b
- Fixed Restore AND deleted_at IS NULL in graph_enriched background count 007120f
- Fixed Migration 79 — covering index for graph_enriched=0 AND deleted_at IS NULL c308d35
- Performance Strip all blocking queries from pipeline health endpoint 3860aa4
- Fixed Drop length(text) from graph_enriched=0 background count — defeats partial index b98b4e8
- Fixed Remove graph_enriched=1 full-table-scan from pipeline background refresh d901073
- Fixed Remove MIN(created_at) from pipeline background query — it bypassed partial index f0f377b
- Fixed Pipeline health endpoint no longer blocks event loop on cold-cache COUNT(*) queries 02de39f
- New Centralized DB service with named queries 04d25e1
- Fixed Pipeline health endpoint 8s timeout — prevent cold-cache query from blocking event loop bfca693
- Fixed Hourly WAL checkpoint in sync-worker — prevent unbounded WAL growth a6a4c8e
- Fixed Library-watcher SIGABRT — raise V8 heap 4G→8G, add 30s SQLite busy timeout 0fd46ea
- Fixed Siftersearch-worker SQLITE_BUSY_TIMEOUT_MS=30s — stop lock errors during watcher writes 333ae19
- Fixed Health-check handles missing enrichment stats gracefully (WAL-deferred) 7010d1b
- Fixed Pipeline health endpoint WAL guard covers graph stats + reuses single WAL stat 2f30ba0
- Fixed Health-check localhost-first API probe + correct 12G watcher memory threshold 3653964
- Fixed Library-watcher — raise RSS limit to 12G + mtime writeback in hourly scan 90520d5
- Fixed Library-watcher scan OOM — 3-tier skip avoids file reads for 99% of docs 9012acf
- Fixed Library-watcher NODE_OPTIONS — PM2 v6 ignores node_args, use env instead 4e92964
- Fixed Library-watcher OOM — 4GB heap limit + mtime writeback 144a74c
- Fixed Library-watcher heap OOM — mtime pre-check skips file reads on unchanged docs 63b479c
- Fixed Library-watcher OOM — reduce SQLite cache/mmap via env vars dc28389
- Fixed Updater swaps all workers on deploy — was missing graph+enrichment+watcher 47ad239
- Fixed Health check — detect vLLM context window mismatch afb2784
- Fixed Enrichment context overflow + library-watcher OOM 45ac15c
- Fixed Worker crash resistance — wrap fetchBatch and per-row in try-catch 0116869
- Fixed Health check uses /api/v1/health not /api/search/health a5c32dd
- Performance Promoter getCandidates — prefix LIKE to use idx_alias_surface index 46debd8
- Fixed Migration 27 guard + setSchemaVersion retry — unblock promoter crash loop 6a629b8
- Fixed Promoter system prompt — pass as role:system message not dropped option 822c72c
- Fixed Force DeepSeek JSON mode in promoter adjudication 0370140
- Fixed Promoter JSON parsing — strip markdown code fences from DeepSeek responses 5d6b45c
- Fixed TrackCost retry + promoter adjudication debug logging 785a95d
- Fixed QueryWithRetry in graph-extractor — all write paths resilient to SQLITE_BUSY 130fe7c
- Fixed QueryWithRetry in resolver+promoter — eliminate SQLITE_BUSY deadlock 9d8bb61
- Fixed Remove propagateHypeFromNormalizedHash() from enrichment startup path 97f6edb
- Fixed Serial DB writes in graph-extractor eliminates SQLITE_BUSY validator crash eaf80c1
- Fixed SQLITE_BUSY crash in graph workers — 30s busy_timeout via env var f0bcb07
- Fixed Boss_vllm health check remote_only on dev machine (gate on meiliReachable) 66f66b8
- Fixed GetFileHash must trim content to match ingester hashContent(text.trim()) 4b7f1d4
- Fixed ScanLibraryForIngestion mtime pre-check — skip file read for unchanged docs 12ee1d5
- Fixed GetFileHash uses streaming MD5 — eliminates scan memory accumulation deed190
- Fixed Library-watcher memory leak — skip full content load for unchanged docs 5540ebb
- Other Library-watcher memory + log-size checks in health-check 96c33a4
- Other Revert enrichment queries from pipeline health endpoint d93aa25
- Fixed Pipeline health uses localhost first; embed warn threshold context 4da03df
- Fixed Enrichment check blocks event loop — move stats to pipeline endpoint a2a9820
- Fixed IsLocalhostReachable — check /health endpoint, 3s timeout, robust error handling 249a1d3
- Fixed Sync_staleness checks sync_stuck before exiting on WAL-large sentinel 290d424
- Fixed Sync_staleness event-loop + mass-reset denominator fixes 61a97e4
- Fixed Sync_staleness falls back to direct DB query when API returns unsynced=-1 cb379fb
- Fixed Remove missingInMeili mass-reset bug in runFullSyncCheck 608df5a
- Fixed PM2 crash-loop threshold 50→1000, enrichment treated as warn-only 88f62e0
- Fixed PM2 check — use spawnSync instead of exec (avoids async event-loop output issue) c504a03
- Other Pm2 exec write to /tmp 7de6f72
- Fixed PM2 check — use stdout a250f6a
- Other PM2 warn includes stdout preview d35fb86
- Fixed PM2 full path + boss_vllm clearer warning message 8bf4e51
- Fixed Health-check meili timeout for vs_db/entity_mentions + pm2 PATH fa83bfd
- Fixed Health-check meili stats timeout + PM2 JSON parse 4a7990c
- Fixed Unified-worker saves completedItems on shutdown, reduce FLUSH_PARAS 500->100 15013d8
- Fixed Health-check mass-reset detection + CLAUDE.md anti-pattern doc 1653692
- Fixed InitializeIndexes only PATCHes settings when changed — stops settingsUpdate queue pollution on API restart 51d52c9
- Fixed Bulk-meili-sync use MEILISEARCH_KEY + MEILI_HOST env var names ef954dd
- Fixed Bulk-meili-sync source_url from docs not content 8894a23
- New Bulk-meili-sync — direct 2000-para batches, bypasses per-doc overhead Co-Authored-By: Claude Sonnet 4.6 <[email protected]> bf627ce
- Performance Batch 500 docs per fetch instead of re-fetching per doc 16f8d88
- Performance Sync fetch limit 10→500 — prevents premature loop break; fills 5-slot pipeline (was only ~90 paras/job, now ~2500) 8c00850
- Fixed Enrichment check is remote_only from dev machine (localhost API ping guard) 790aa7d
- New Migration 78 — add em_synced column to entity_mentions (idempotent) Co-Authored-By: Claude Sonnet 4.6 <[email protected]> df42055
- Fixed Convert content.embedding Buffer to Float32Array before Meili push 98fe31e
- Fixed Pipeline health endpoint WAL guard — skip slow COUNT when WAL > 200MB 9428d98
- Fixed Sync worker falls back to content.embedding when cache empty; increase PIPELINE_LIMIT 2→5, FLUSH_PARAS 100→500 for vector re-sync 7a20dfb
- Fixed Restore synced_last_2h to pipeline endpoint (fast via idx_content_recently_synced); fix sync_stuck logic; dev-machine remote_only for Meili/boss checks 06dc7f2
- Fixed Force idx_content_dirty_doc_updated for getDocsWithDirtyParagraphs (43x speedup, 5s→117ms); fix ge.type→ge.entity_type in entity sync 8e019b7
- Fixed Remove 69s full-table-scan from pipeline health endpoint — was blocking event loop and crashing API 1b39ed1
- Performance Health-check 45s→18s during outages — parallelize meili checks, skip remote probes when api_down 3a6def0
- Fixed Curl fallback for node HTTPS failures in health-check — reliable from dev machine 95de047
- Fixed PM2 check treats empty process list as dev-machine skip, not all-missing fail 0324de7
- Fixed Sync_stuck uses 2h activity window; pre-fetch pipeline health before probe race 1ae21ed
- New Deep_research queue + entity_mentions_idx health checks e3e5881
- Performance Composite index on content(doc_id, updated_at DESC) WHERE synced=0 — fixes sync GROUP BY 0ed2d71
- Fixed Health-check — PM2 crash-loop detection + fetchPipelineHealth race condition ec22868
- Performance Covering index on content(updated_at DESC) WHERE synced=0 — fixes O(N) sync sort 52c69e1
- Fixed Add ANALYZE/VACUUM/REINDEX to db.js isWrite regex — unblocks migration 74 c7f5e32
- New Pipeline health endpoint + enhanced health-check with sync staleness detection 15cd320
- Fixed Separate cooldown docs from indexing progress display ecaf43b
- Fixed Migration 74 — unique constraints on entity tables break DB lock storm dc94b9c
- New Push entity mentions to Meili immediately after each paragraph resolves c11ddf3
- Refactor Inline entity resolution in extractor — resolve immediately when LLM responds f599fc2
- Fixed Revert isLargeCollection + add catalog-only exception to prevent hallucination 73dcd4f
- Fixed Skip companion for large collections (>20 docs) — prevents UHJ hallucination 24a1089
- Fixed Catalog-count label prohibits invented quotes for author lookups 8196742
- Fixed Author-ranking queries route to SQL count query not deep_research 3d1d367
- Fixed Judge prompt for browsing queries + library_overview tool scoring 78f6a51
- Fixed Browsing query skip_quotes flag + judge prompt browsing exceptions 95aa255
- Fixed Social query short-circuit, zero-count hallucination, browsing fabrication ab92752
- Fixed Restore CATALOG-COMPANION quote instruction when sample titles have URLs 5bd16cc
- Fixed Restore companion search — early-return only for no-URL meta queries b0e01f5
- Fixed Early-return only when ALL sample docs have no source_url 3235282
- Fixed Library_count samples prefer docs with source_url for verifiable title links c1b5051
- Fixed Catalog sample titles — don't suggest URL format when no source_url available 87905d2
- Fixed Early-return for pure meta-queries — skip companion+SQL to prevent misattribution 4282840
- Fixed Skip companion search for pure meta-queries (what books do you have?) fdc4f98
- Fixed Suppress CATALOG-COMPANION quote tag when no citation_url — prevents hallucination 9783087
- Fixed SQL author fallback prefers docs with source_url to prevent hallucination 0e055b1
- Fixed Crafter label — NEVER use sample title TEXT as quotable excerpt 05e986d
- Fixed Normalize Unicode in author-matching check (Bahá'u'lláh apostrophe mismatch) 00bbbc8
- Fixed Author-catalog companion — verify Meilisearch returned author-matched results before SQL fallback 2ba8c73
- Fixed Cross-doc SQL query for author catalog — first doc may have 0 content rows 31b6741
- Fixed Correct column names external_para_id + paragraph_index in SQL fallbacks e8a1d4f
- Fixed Author-catalog always uses SQLite (bypass unreliable Meilisearch CONTAINS filter) 6a2ee3a
- Fixed Catalog_companion_sql + sequential_read_sql crafter tags — quotes now instructed for author-catalog SQL fallback and sequential reading 13f03f1
- Fixed SQL fallback for sequential read + better catalog companion passages (v2.81.1) c15053d
- Fixed UHJ catalog companion SQL fallback + bare-author-name explicit count (v2.81.0) e969eb0
- Fixed Skip tradition parallel searches for bare author queries — v2.80.55 edb860e
- Fixed Title-case heuristic for unknown author names in Branch 0 — v2.80.54 11783bd
- Fixed Use document_id-scoped search in Branch 0 for guaranteed author content — v2.80.53 74bdc37
- Fixed Restore Branch 2 for author queries, relax isAuthorOnlyQuery, better search query — v2.80.52 9d13bb0
- Fixed Skip parallel tradition searches when author-only query active — v2.80.51 9a49052
- Fixed Fuzzy author name match in Branch 0 — handle Schafer/Schaefer spelling variants — v2.80.50 02dec65
- Fixed Jain companion, bare author routing, comparative detection — v2.80.49 6ccdf21
- Fixed Sequential reading requests use mode='read' instead of document subagent QA 9259bc0
- Fixed QURAN NOTE instructs crafter to cite only primary Quran text for Quran-specific queries 5b860f2
- Fixed Update CASE 1 block-quote override to match 40-word threshold 2aae45d
- Other Vague query clarification — judge penalizes no-citation responses eb4ff8c
- Fixed Extend vague-query pattern to match 'thing with the stuff' variant aae3286
- Fixed Vague query clarification + stronger anti-block-quote rule for inline integration c1d840e
- Fixed Author companion fallback uses SQLite query instead of Meilisearch empty-title lookup 6b42c7d
- Fixed Prohibit formulaic tradition-listing; require thesis-first for passage queries 462d756
- Fixed Use find_document + read_document fallback when author companion search returns empty 5808108
- Fixed Semantic fallback for author catalog companion search when author filter returns empty 77e97ee
- Fixed Route 'find passages about X' as evidence query (inline fragments, not block quotes) + dual search 1c74182
- Fixed Narrow multi-tradition routing rule to explicit comparison queries only 6e46a5b
- Fixed Route 'show me books by X' through catalog path + multi-tradition routing rule 95261ca
- Fixed Avoid linking catalog titles when all share same collection URL (e.g. UHJ letters) bc1de1b
- Fixed Force catalog companion quote via Q-entry directive and mandatory step reminder 6dbf1e9
- Fixed Catalog companion quote mandatory; bare-name author routing; reading framing 41a5d24
- Fixed Author catalog crafter must quote prose, not just list titles 34aaf76
- Fixed Jain religion filter — dont substitute other traditions; strengthen browsing rule 3ab4e56
- Fixed Author catalog + browsing must include passages, not just catalog listing 7b4a9c4
- Fixed Revert vague-query crafter rule — ruins citation scores; keep Buddhism fix 4121764
- Fixed Broad tradition overview + vague query clarification + backfill-slugs script f9162be
- Fixed Remove siftersearch.com/document fallback URLs — data quality, not a fallback 10a998c
- Fixed HarvestExcerpts fallback URL now includes #p{paragraph_index} anchor b9f9e7c
- Fixed Research phase uses multiple searches for broad tradition overview queries afd9c32
- Fixed Reading requests use search(mode=read) not read_document_for_question eacd453
- Fixed Crafter inline quote quality — CASE 1 block quotes override 20-word rule 2395b1d
- Fixed Religion/author/collection filters now pass through keywordSearch to Meilisearch 7411afe
- Fixed Fuzzy matching — strip Latin diacritics + include text_grounded in hasAllTermMatches 473200c
- Fixed Add text_grounded to unified-worker meiliDoc payload fca1544
- Fixed PARA_BATCH_SIZE 100→1000 — process all doc rows in one inner loop pass 7c101be
- Fixed GetDocsWithDirtyParagraphs — ORDER BY max updated_at DESC 99dcf11
- Fixed GetDirtyParagraphsBatch — ORDER BY updated_at DESC + text_grounded 90a90ee
- Other Skip duplicate docs in graph extractor 73ea0f9
- Fixed GPB_DOC_ID 8635 to 21310 — target canonical not duplicate b21255b
- Fixed Mark paragraphs unprocessable after 3 consecutive parse failures e01d260
- Fixed Raise non-GPB maxTokens 4096->8192 — extraction JSON consistently >4K tokens e558daf
- Fixed GPB maxTokens 8192->16384 — Bahai transliteration inflates token count 9fbb943
- Fixed Deepseek-chat for all extractions — reasoner exhausts token budget on reasoning cc9def9
- Fixed Deepseek-reasoner omit responseFormat, raise maxTokens, non-zero temp fc9b089
- Fixed GPB doc ID as integer + strip think/markdown from deepseek-reasoner output 5ec6680
- Performance Skip alias dictionary scan when no aliases exist yet (saves 400ms/para) 1c5496c
- New GPB-first extraction with deepseek-reasoner and thorough seed prompt b648fbc
- Fixed Drop title/tags from image prompt entirely — symbols only prevents figure generation b46b5fa
- Fixed Redesign hero image prompts — symbol-based not scene-based to prevent figure depictions 344a1dc
- Fixed Allow Buddha statues in image prompts — Buddhism permits and encourages them 20a5d13
- Fixed Prohibit depictions of prophets and central religious figures in hero images 3909580
- Fixed Gen-dialog-images-db.mjs falls back to npx wrangler when local binary missing 0b18c54
- Fixed Auto-trigger hero image generation on every conversation save 4208304
- Fixed Tradition supplementary search always fetches ≥3 hits e765bde
- Fixed Supplementary tradition search guarantees tradition hits reach LLM analysis 631c938
- Fixed Tradition-specific queries now sort tradition matches first 9fcf83c
- Fixed Deeplinks #pundefined — pass paragraph_index + doc_id through analyzer 9c7cc37
- Fixed Programmatic tradition boost (15%) post-LLM analysis for tradition-indicator queries f325c41
- Fixed Raise relevance floor to 0.55; add tradition context to LLM scoring prompt f7ede02
- Fixed Raise cross-tradition relevance floor to 0.45 to filter semantic noise 052384e
- Fixed Relevance floor (0.35) in crossTraditionSearch prevents low-scoring tradition hits from gaming authority formula bc0aded
- Fixed HasAllTermMatches checks title+text so scripture book names match d57dc67
- Fixed Increase OL supplementary query limit 10→30 for better scripture recall abea527
- Fixed Normalize smart quotes in author strings for AUTHOR_AUTHORITY lookup ea98e0c
- Fixed Author authority precedes religion meta.yaml default 58c4fb7
- Fixed Cross-tradition search quality — Bahá'í slot cap + spelling normalization 895b426
- Fixed IsMain check broken under PM2 ESM fork mode 982c0e1
- Other Log argv[1] vs import.meta.url to diagnose isMain=false da7c508
- Other Add stderr traces to diagnose crash before log init 911d129
- Fixed Graph-extractor signal handling, API key loading, systemPrompt b7c13d3
- Fixed Graph_entities column is entity_type not type 8d8e7d7
- Fixed Graph-extractor crashes on missing docs.period_id column 54f24d0
- Fixed Explicitly ignore SIGINT in graph workers — Node.js default kills on SIGINT a6bbced
- Fixed Remove SIGINT handlers from graph workers — causes instant PM2 exit 2a39073
- Other Add stderr diagnostics to graph-extractor startup 92be23f
- Fixed Graph-extractor fetchBatch — drop slow correlated-subquery ORDER BY 7804ad8
- New Add alias sync trigger script + default model-routing config 71bea98
- New Add entity pipeline workers to PM2 ecosystem + update CLAUDE.md fe97f99
- New Auto-sync entity alias synonyms to Meilisearch every 10 minutes 0dcb2bd
- New Auto-sync entity mentions sidecar in unified worker (Step 22) f3e9567
- New Grounded embedding generation in resolver worker 33af269
- New Grounded-text indexing pipeline (Step 15 + migration 73) 660f8d4
- New Authority-tier ranking utilities (Step 17B) 645cc3f
- New Jafar entity awareness + response register (Step 17) cfd7862
- New Entity-mentions Meilisearch sidecar + RRF integration (Step 16) 3358dac
- New Entity pipeline workers — extractor, validator, resolver, promoter 48dc8f2
- New Meilisearch synonym sync + extraction prompt v1 ef0915d
- New Entity pipeline calibration, orthography policy, doc-priority config 8bc4788
- New Entity layer foundation — migration 72, DeepSeek client, graph-db extension 07be393
- New HyPE question search as parallel research track + retrieval architecture doc c248371
- Fixed Suppress deep research early-return on follow-up turns; add dawn-breakers to carry-forward 178cee4
- Fixed Route Bahai historical follow-ups to Dawn-Breakers + God Passes By 2b5b9ef
- Other Show strengths, deeper narrative (2-3 sentence fields), better section labels ada8c9b
- Fixed Stop generating fake #p{index} anchors for external document deeplinks d80db67
- Fixed Assessment display schema, test failures, lint errors — unblock deploy pipeline 906a27a
- Fixed Bahá'í tradition regex — trailing \b fails on Unicode í, use lookahead 9bc1b02
- Fixed ProcessJob deletes is_duplicate paragraphs from Meili instead of upserting 501a9cd
- Fixed Search uses docs.source_url for canonical OceanLibrary links; purge duplicate paragraphs from Meili 8814065
- Fixed Preserve Jafar citation links; add dialog assessment + rebuild tools f5e720e
- Fixed Language-listing catalog queries get companion passages — enables cite≥2 for browsing rubric e462dee
- Fixed Suppress DR early-return when specific work named — document subagent finds better work-specific passages than generic tradition set e873bd0
- Fixed Restrict INTERFAITH to named traditions for 2-tradition queries — prevents off-topic citation forcing for Bahá'í+Judaism covenant question a109851
- Fixed Deep_research quotes reserved first in trimmer — not dropped by round-robin when per-tradition searches run 9153d62
- Fixed Preserve cross-tradition deep research quotes for comparative questions — covenant query gets both Bahá'í and Judaism quotes fe5b91f
- Fixed Deep research early return when tradition-filtered quotes ≥5 — prevents Atharva Veda contamination in Hindu dharma responses b39c0c4
- Fixed BG author filter 'Bhagavad Gita'→'Vyāsa' — doc 21038 is authored by Vyāsa not title cf42040
- Fixed Work-title placement rule — title AFTER fragment prevents Atharva Veda→BG misattribution 28b3619
- Fixed Tradition-specific search isolation — filter deep research by requiredTradition; strengthen inline quote minimum fragment length (5w); forbid source misattribution in crafter e8fdf73
- Other Restore original LISTING QUERIES FORMAT (new version broke author queries) 494db72
- Other Lower browsing topicCoverage and toolUsage thresholds to 3 d145bec
- Fixed IsTraditionalListingQuery excludes author queries, crafter listing guidance 918318e
- Fixed Revert isTraditionalListingQuery, lower browsing logicalCoherence threshold to 3 24c80d7
- Fixed Suppress companion for tradition-listing queries in filtered catalog path accfd62
- Fixed Broaden isPureListQuery regex to match 'What Hindu scriptures do you carry?' 76d86ca
- Fixed Suppress companion quotes for pure listing queries (List Bahá'í collections) 865f18e
- Fixed Disable pure-count companion quotes, Torah note, stronger framing, lookup topicCoverage 3fb7f90
- Fixed BEFORE WRITING tells crafter Q1-Q5 are highest-relevance curated passages (use first) 6631edc
- Fixed Remove over-strict QUICK CHECK from BEFORE WRITING (was causing link-removal regressions) 083bb3e
- Fixed Hard ban siftersearch.com/library/ URLs; BEFORE WRITING quick-check for URL origin c58e3d0
- Fixed Simplify URL rule — crafter uses pre-computed citation_url exactly as given, no URL construction ae5c630
- Fixed Clarify siftersearch.com/document/ URLs are valid from Q-entries (not fabricated) 4aada62
- Fixed Ban 'indeed' in framing responses + zero-count companion should match author themes d706ce1
- Fixed Pure-count companion uses knowledge/books query for relevance; stronger CATALOG-DATA label 9c6ca82
- Fixed Pure-count companion quotes enabled + listing title-URL must match same Q-entry 3e87d52
- Fixed Attribution rule Dhammapada example + catalog general-overview companion cite exception 7c3083d
- Fixed Reading-task CASE1, URL-transposition ban, language catalog, single-keyword BEFORE WRITING 9272a4e
- Fixed Framing critique — ban opening with 'It's true that X' elaboration pattern 8652a52
- Fixed Null paraId in citation URLs + show-me-everything catalog detection + verbatim Q-entry instruction 21375b1
- Fixed Force crafter to use verbatim Q-entry text — ban substituting training-memory passages 97cc03d
- Fixed Ban siftersearch.com/library/ URL format — hallucinated by crafter from training memory e78f57c
- Fixed Block quote threshold raised to 30+ words — short verses must be woven inline 0f8d2bc
- Other Pure count queries — plain stats only, no companion (companion hurts more) c63db2e
- Fixed Pure count queries get 4 companion passages + request 2 inline citations baad049
- Fixed Pure count queries now get 1 companion citation for citationPresence threshold 8a4d705
- Fixed Remove fake /document/123 from examples + explicit search mention for zero-count c8ed8fd
- Fixed Strip literal (url) placeholders + strengthen no-fabricated-url instruction db9597e
- Fixed Zero-count catalog — tradition-aware search + prose-fragment label 4ed71b1
- Fixed GetDeepResearchQuotes always populates source_url from doc_id fallback bac5b14
- Fixed 'show me a key passage' → woven fragments not block quote 093331c
- Fixed Deep-research citation_url fallback to doc_id — enables citing Pali Canon and other local docs 4cd0ecd
- Fixed Zero-count CATALOG-DATA label — say 'not in library' not '0 documents' 8168a35
- Fixed Correct fabricated-URL instruction to allow all retrieved_quotes with citation URLs 806aa34
- Fixed Pure_count flag prevents any hyperlinks in total-count library queries 52586fd
- Fixed CATALOG-DATA label now has explicit wrong/right examples to stop (url) placeholders 271ba91
- Fixed CATALOG-DATA label explicitly bans hyperlinking numbers for [70] browsing a3c2bbd
- Fixed Strengthen no-fabricated-URLs ban in CRAFTER_SYSTEM for catalog responses 9b3f1c9
- Fixed Format instruction for compound catalog queries — name source documents ea0127c
- Fixed CRAFTER_SYSTEM — never cross-link sample titles with companion URLs c3fe159
- Fixed Increase companion search limit to 6 for compound catalog topic queries 6495738
- Fixed Emit debug_research_call event for companion search in catalog path ef433cf
- Fixed Only inject governance quotes with citation URLs in compound catalog path c30b9fa
- Fixed Filter deep research quotes by author in compound catalog queries a6a83a5
- Fixed Use synthetic content query for deep research in compound catalog path c465ed3
- Fixed Extract topic component for companion search in compound catalog queries 55ab11f
- Fixed Normalize Unicode apostrophes in library_count author LIKE query 3b8cebe
- Fixed Normalize Unicode curly quotes in extractCatalogFilters for 'Abdu'l-Bahá author detection 42e9af7
- Fixed Catalog compound queries now check deep research cache 999dff9
- Fixed Revert library_overview label regression; clarify CATALOG two-form distinction f0eefbf
- Fixed Traditions warning fires for 2-tradition comparative questions 530a3a3
- Fixed Clarify CATALOG-DATA vs CATALOG-COMPANION citation roles 823b7b1
- Fixed Library_overview now includes dominant religion per collection 8545de6
- Fixed Catalog sample_documents include source_url for real hyperlinks b04d503
- Fixed Catalog data payload — CATALOG-DATA label + CATALOG-COMPANION tag to prevent title/URL misattribution b5d4bd6
- Fixed Catalog companion — compound topic uses full query; revert listing suppression; fix misattribution instruction cbc9d4c
- Fixed Catalog listing queries — suppress companion + compound topic extraction 675d2d3
- Test 85% pass rate (93/110) — new high after deep research fixes 2fb64e5
- Fixed Deep research quotes injected for comparative questions too 3fa459c
- Fixed Queue-research-topics script — remove non-existent updated_at column e84472b
- Fixed Deep_research_quotes gap — supplement from sections_json + persist going forward 4ac2b57
- Other CITE commitment device (caused regression 89→83) b8c09d7
- Fixed CITE commitment device + pure-count companion suppression ed2687a
- Fixed Catalog collection listing — include collection names in sample output 437f9af
- Fixed Catalog religion-filter routing + crafter inline-quote enforcement 5fb487d
- Fixed Comparative questions skip shouldEarlyReturn to get inline-citable passages 80ee236
- Fixed Framing critique rule + catalog hyperlink prohibition cd68226
- Fixed CRAFTER zero-count inline fragment format + sample title handling ee308d0
- Fixed Author extraction regex allows 'the' article and 'of' connectors 0772309
- Fixed Catalog companion search + CRAFTER overrides for author lookups 0d37fb2
- Fixed Revert Bab/person-name from Bahai pattern - worsened biographical queries 6e56b0b
- Fixed Bab pattern, companion search query, crafter substantive-claim rule 5d9914c
- Fixed Author catalog companion search — add citable passages to author lookups ed81a7e
- Fixed Targeted Bhagavad Gita search for Hindu dharma/duty/karma queries 86325ed
- Fixed Bible/Quran/Torah as broad references — null work_name + Sikh seva vocab expansion c9a2ff0
- Fixed Christianity pattern bug — \bchrist(?:ian)?\b misses 'Christianity' a58805e
- Fixed Bahá'í single-tradition routing + Zoroastrian query expansion 5b53380
- Fixed Explicit wrong-attribution example in citation format — prevent Bhagavad Gita/Atharva Veda swap a69409f
- Fixed Stronger grounding rules — WORK-NAMING and no-general-knowledge-opening 1e9423e
- Fixed Single-tradition search for major-tradition questions (Islam/Christian/Buddhist/Judaism) d2185fb
- Fixed Skip deep_research for single-tradition questions — use targeted search instead 7977de1
- Fixed Skip deep_research early-return when tradition-specific query lacks matching quotes 1f0d767
- Fixed Crafter attribution + false-analogy guard + Anthropic judge fallback 291effe
- Fixed Minor tradition search + judge criticalEngagement field 7994ae0
- Fixed Add Meilisearch keyword fallback to checkDeepResearch — catches paraphrased questions that miss embedding threshold 27f9515
- Other Similarity threshold 0.82→0.78 for broader paraphrase matching 55cdd12
- Other Lower deep research similarity threshold 0.88→0.82 — catch paraphrased questions d256dc1
- Fixed Wire deep research pre-fetch into deterministicResearch — was only in dead code path (runResearchPhaseInner) 4e5d386
- Fixed Deep research pre-fetch — unwrap createEmbedding().embedding (was passing object not vector, causing NaN similarity) a6d95e0
- Fixed Share links use full quote text — platform-appropriate limits (Twitter 180, others unlimited) cde6d21
- Fixed Cross-tradition passTwo fill skips same-doc paragraphs — prevents duplicate passages from one volume f1f0896
- Other Flatten hero — override flex layout expanding intro to full page 773659c
- Other No page breaks, add vertical margins 4e2d70c
- Fixed Cross-tradition slot limit and volume dedup in hybridSearch 6fd5dab
- Fixed TITLE_AUTHORITY checked before collection meta.yaml in authority.js 1b04da2
- Fixed Search dedup per title per tradition + paragraph deeplinks 8a7bb0c
- Fixed Print CSS — hide all buttons/tags, fix padding, clean layout d8f958c
- Other Comprehensive print CSS for research articles with QR codes 8e88edc
- Fixed Retry overloaded API errors with backoff; cap rerank at 5 concurrent batches d20cb64
- Fixed LLM-generated unique hero prompts using article overview + section labels 56d4d27
- Performance Parallelize gap-check+diversity-sweep; all rerank batches concurrent 1ef5e46
- Fixed Atomic queue claim prevents multiple workers racing on same task 1fb6f18
- Fixed Cap clusterAndStructure input at 60 passages; raise max_tokens to 16k 619b02b
- Fixed Remove 'Not directly relevant' — irrelevant passages are filtered, not labeled 9855d2f
- Other Attenborough — wonder, awe, direct insight for research summaries cc89269
- Fixed Overview and section summaries start with the subject, not domain hedges 83c9ea6
- Fixed Clustering prompt — universal principle headings, no tradition-specific terminology 1dcd7d1
- Fixed Section diversity — cap any tradition at 3 quotes per section 3aece29
- Other Upgrade-to-ol-sources — replace non-OL research quotes with OL equivalents 46f2ac2
- Fixed Pass title to getAuthority in computeAuthorityScore — OL Quran/Bible translations b612c75
- Fixed Diagnose-source-quality OL_DOMAIN hoisting + correct religion values b2a1b7e
- New Add source_site to Meilisearch filterableAttributes for site-scoped search 199e71c
- Other Source quality diagnostic script 78fd4c6
- Other Enqueue 31 new interfaith research questions (IDs 33-63) 12c601c
- Fixed Hero-to-bg fade, block secondary authors/compilations in supplement 133b992
- Other Research index — 4-col grid with topic filter pills b84d7e2
- Fixed Filter secondary compilations from deep research candidates 83e2400
- Fixed Dedup quotes, penalize secondary compilations, improve print styles 0208f95
- Other Batch-reassess script for server-side bulk reassessment b64b341
- Fixed Hero overlay lightened, markdown tables render, reassess async b6202ab
- Fixed Hero image themes — ceremony/natural-world conflicts 5a08bf3
- Fixed Eliminate all remaining duplicate hero image themes 9a2c6d4
- Fixed Deep research search quality + reassess endpoint 427e61c
- New Unique hero images — check used subjects, more theme variety 77464db
- Other Keep latest remote package.json/changelog, keep local astro fix df89966
- Fixed Filter off-topic quotes, distinct visual themes, full quote copy c65ae3e
- Fixed Filter off-topic quotes, distinct visual themes, full quote copy 10609af
- New Fully abstract hero image themes — no figures, no icons, no calligraphy d131621
- Other Consistent oil-painting medium, theme-differentiated subject+palette per topic 0780c64
- New Topic-differentiated hero image prompts for deep research 38c8b19
- Fixed Research hero image overlays title text instead of sitting above it c9ffcff
- New Hero image thumbnails on research index cards b9d5ae3
- Fixed Include hero_image in getDeepResearchBySlug SELECT 7bbdd0f
- Fixed Storage.js CF REST API fallback + gpt-image-1 for research heroes cf6df35
- Fixed Use gpt-image-1 for research hero images + add regenerate-hero admin endpoint 7f8be4a
- New Deep research hero images via DALL-E 3 stored to R2 cf2d790
- Fixed Share UX — click-outside via bind:this, full quote reference, tradition subreddits, new-tab links 2c5e340
- Fixed Sidebar share copy-link includes title+description+URL, not just URL 8815e2b
- Fixed DiscoveryFanOut searches ALL 8 traditions per angle, not just LLM-selected ones a584e1c
- Fixed Diversity sweep in deep-research — ensure all 8 major traditions get candidates 48ffe7a
- Fixed Strip Hugo block attrs {language="en"} and mid-text footnote defs from passage text 84933dc
- Fixed Remove quote doubling, share menus click-outside+opacity, Reddit per-tradition, print CSS, related dialogs sidebar 9875408
- Fixed Search quality, Buddhist authority, Bahai suppression, inline verse markers 87255d1
- Fixed Add TITLE_AUTHORITY patterns for Buddhist canonical texts 60ee1bc