docs: add full local stack guide, unify Node.js to 24.x - Add Option 2: Full Local Stack (MongoDB + Typesense + API) - Add Typesense setup steps including replica set init and typesense-sync - Update Node.js version note: all EPIC apps now use Node.js 24.x - Simplify IDE setup WebStorm note to v24.x for all projects - Add .vscode/ to .gitignore
docs: remove TYPESENSE_ENABLED references, update search architecture
docs: update Typesense-Search for table-view search architecture - Update collection table: 5 indexes now, with correct component names - Update architecture diagram: SearchWrapperComponent routes to SearchTableComponent (table tabs) or UnifiedSearchComponent (content) - Add SearchTableComponent section: tab routing, URL sync, SEARCH_TABLE_DEFS - Add legacy URL redirect documentation (projects-list, news, etc.) - searchCollection() now public method — document tab visibility use case - Add filter_by exact match operator guide (:= vs : semantics) - Update REST methods table: getFeaturedDocumentsCards, searchCollection
docs: add storage mgmt, Metabase disk-full runbook, fix stale analytics facts - Analytics-Architecture: 30s→120s heartbeat, prod enhanced=true, 30d→7d compression window, new Storage Management section with compression commands, PVC sizing table, event volume reduction impact table - Troubleshooting: new Penguin Analytics/Metabase section covering CrashLoopBackOff diagnosis, PVC expansion steps, compression migration runbook, prevention notes
docs: document Typesense OOM, orphan crash loop, constrainToProject fixes - Troubleshooting: orphan collection crash loop — cause, emergency cleanup, nuclear Raft wipe + reindex procedure - Troubleshooting: DocumentChunk OOM — batch size 100, 512MB heap, cursor.batchSize - Troubleshooting: startup probe budget explanation (20 min for large chunk envs) - Troubleshooting: force Typesense snapshot to compact Raft log after reindex - Troubleshooting: unpublished project leaking via activities/documents projectName field — constrainToProject() fix and verification steps - Nightly full sync: updated to reflect all 5 schemas, purgeOrphanCollections step, DocumentChunk batch/heap notes
docs: document server-side Typesense proxy architecture - Typesense-Search: rewrite for eagle-api proxy pattern; remove direct-browser key docs; add security model, role filtering, endpoint reference, filter injection defence - Architecture-Overview: update search flow (no browser key) - Reverse-Proxy-Configuration: remove search-api routing section - Local-Development: update typesense dev setup for proxy - Angular-Patterns: remove scopedKey/getApiKey, document proxyBase - Document-Content-Search: new page for document full-text search - _Sidebar: add Document-Content-Search link
docs: fix matviews section inaccuracies - Correct CronJob schedules (hot=*/30, cold=0 2 * * *) - Fix lock doc field names (_id/hostname, not lockId/lockedBy) - Correct collection name (_system_locks, not runLock) - Note atomic findOneAndUpdate lock acquisition behaviour - Add NetworkPolicy troubleshooting (role: api-eagle-epic required)
docs: add materialized views architecture section
docs: update Angular patterns and Typesense docs for withLoading, assignFromObj, take(1)+switchMap, effect+untracked, and REST methods
docs: add Search Popularity Ranking section
docs: update Typesense search architecture, transforms, and troubleshooting
docs: add Typesense search architecture and update platform docs
docs: add Angular Patterns wiki page Documents codified patterns for eagle-public: - Constructor-first API calls (not ngOnInit) - Null-sentinel loading pattern (signal<T | null>(null)) - LoadingStateService ownership (services write, components read) - Reused component instances: switchMap + debounceTime(0) pattern - Signal batching to avoid O(n) reactive updates - input() signals with effect() + untracked() for side effects
docs: rewrite Database Migrations section with corrected examples - run_migration.sh → run_migration.js (ESM-compatible runner) - Add --set migrations.image.tag= to all Helm examples - Document role: api-eagle-epic label requirement for NetworkPolicy - Add oc exec shortcut as recommended quick approach - Add migration architecture section explaining pod labels, env vars - Update troubleshooting table with timeout/NetworkPolicy issues - Add collation reminder for new index migrations
docs: add MongoDB collation and pipeline ordering performance rules
docs: add comprehensive migration instructions - Helm-Charts.md: rewrite Database Migrations section with 4 options (local, port-forward, oc exec, Helm hook), writing guide, and troubleshooting table - Local-Development.md: add migration commands to eagle-api setup, cross-link to Helm-Charts for remote environments - Deployment-Pipeline.md: update Node version 22 -> 24
docs: add Keycloak roles scope fix and Word HTML formatting troubleshooting - Keycloak-Configuration.md: add 'All Admin Users Redirected to Email for access' section explaining CSS removed roles scope (Apr 2026), the fix (scope: 'openid roles' in keycloak-js init), and how to diagnose recurrence - Troubleshooting.md: replace outdated Keycloak client-not-found entry with current diagnosis steps; add same CSS roles scope section; add Word HTML formatting issue section describing 3-layer fix (TinyMCE paste_preprocess, word-html-sanitizer.ts render-time sanitizer, data migration 506 records)
docs: add env.js caching fix, analytics 404, backup network policy - Reverse-Proxy: add /api/analytics legacy route to routing table - Configuration-Management: document env.js caching issue and fix - Troubleshooting: add analytics 404 and backup network policy sections - Analytics-Architecture: note legacy /api/analytics path
docs: rewrite Configuration Management for nginx-served config Config architecture simplified: - nginx serves /api/config from rproxy-config ConfigMap - No eagle-api dependency for config delivery - Instant updates via oc edit configmap - Single source of truth across frontends Removed outdated eagle-api config.js documentation.
docs: add ClamAV library and nginx redirect troubleshooting - ClamAV 1.0+ requires modern library (clamscan, not clamav.js) - Nginx trailing slash redirects with location = /path pattern
docs: add LOG_LEVEL to configuration reference
docs: clarify env.js ConfigMap pattern for Helm deployments Added section explaining that the frontend env.js ConfigMap should only contain configEndpoint=true and KEYCLOAK_CLIENT_ID. All other config must come from /api/config to maintain the runtime configuration pattern. Common mistake: duplicating all config values in the ConfigMap defeats the purpose of centralized configuration via the API.
docs: update wiki with v2.1.1 deployment success and clarify tag creation
docs: update production deployment completion for eagle-api Helm migration
docs: clean up architecture diagrams for better readability
docs: add Angular signals troubleshooting and template guide
docs: add Keycloak auth, rproxy details, penguin-analytics to architecture diagram
docs: add MongoDB migration patterns and troubleshooting
docs: add Reverse Proxy Configuration page
docs: add penguin-analytics GeoIP and database password troubleshooting