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