Commit History

  1. Add read-only Data Sources page (D7, scoped to transparency only)⁠

    5761f57

  1. Extend provenance badges to search results (D8)⁠

    c91bada
  2. Add provenance badges to the entity profile view (D8)⁠

    66bf6f4

  1. fix(frontend): vendor D3.js locally instead of loading from CDN (N-2/F-14)⁠

    a18c616

  1. feat(frontend): finish the Phase 35 entity-view tabs and forensics page (closes B-13)⁠

    49ea00f

  1. feat(frontend): build the Phase 35 entity-view tabs and forensics page (closes B-13)⁠

    7b07128

  1. fix(app.js): correct bad escape sequence in search filter button⁠

    353faba
  2. fix(api.js): restore missing closing brace on graphCommunities()⁠

    db3dcda

  1. feat(phase-35): add Api.investigate() method to api.js⁠

    be7ca1d
  2. feat(phase-35): add /forensics page to frontend router⁠

    086d779

  1. feat(phase-34): add 10 Phase 34 client methods to api.js⁠

    34cd641

  1. feat(phase-33): add 6 Phase 33 client methods to api.js⁠

    cdc0d19
  2. fix(phase-33): fix _renderTimeline to call /timeline/ not /biography/⁠

    daf86d8

  1. fix(B-06): confirm filter button data-nav-path fix applied + wire addEventListener⁠

    0ece323

  1. fix(B-29): replace misleading 'court-grade PDF' claim with accurate disclaimer⁠

    f408a8f
  2. fix(B-15): remove extra brace orphaning else branch in liveFeed ws.onmessage⁠

    14ac551

  1. fix(LOGIC-3): preserve &lang= in search filter buttons and search button handler

    eec5179
  2. fix(SEC-1,CodeQL#24): data-* attrs for connection-map evidence onclick -- prevents single-quote XSS

    1c118c6

  1. fix(UI-6): replace corrupted unicode chars in connection map legend with HTML entities

    c12aeda
  2. fix(UI-2): set evidence panel width to min(460px,100vw) -- no longer overflows on 375px phones

    d6e6ec5
  3. fix(TEXT-1): update hardcoded '12 investigators' to '15' in How It Works and About page

    5406493
  4. fix(I18N-1,I18N-3): add mni/sat/ks to navbar language dropdown; restore all corrupted Indian script labels in search page dropdown

    c44a433
  5. fix(SEARCH-2,SEARCH-3): add datagov/crimereport filter buttons; add Arabic script U+0600-U+06FF to ALLOWED_CHARS for Urdu/Sindhi search

    297cc9e
  6. fix(LOGIC-4): persist language selection to localStorage -- language now survives page refresh

    db4b345
  7. fix(SEC-1,CodeQL#24): sanitize entity name, type, profile.overview k/v, and risk.explanation before innerHTML injection

    8ad162f
  8. fix(FEED-1): add pipeline-message guard in liveFeed view -- admin system message no longer shown as fake intelligence

    f171783
  9. fix(FEED-2): reset connect._retries=0 on each _connectFeedToHome() call -- prevents permanent feed silence after repeated navigation

    0b32f6d
  10. fix(JS-4,FEED-4): stop D3 simulation and close WebSocket on route navigation -- prevents CPU/memory leak

    4d6372a
  11. fix(JS-2): remove duplicate GraphRenderer._currentSimulation assignment in graph.js

    4d11956
  12. fix(DUP-1): remove duplicate search input prefill block -- same code appeared twice with different variable names

    19b580c
  13. fix(JS-1 CRITICAL): remove 2 duplicate const _langLabelCache declarations -- caused SyntaxError crash in strict-mode browsers

    a4a025f

  1. fix(SyntaxError): move _stats_cache vars to module level; global declaration must precede use -- fixes CI SyntaxError on line 142

    41a604c

  1. fix(M-10,M-11,L-06): deterministic node ID fallback; container-scoped SVG marker; store simulation for tab-switch cleanup

    11b0978
  2. fix(M-05): cache language labels in applyLanguage() -- avoids redundant API calls on rapid language switching

    8358396
  3. fix(M-05): cache language labels in applyLanguage() -- avoids redundant API calls on rapid language switching

    53b2127
  4. fix(H-01): sanitize event.title/detail/date/source in Timeline.render() -- XSS via scraped Neo4j data

    d7d6d05
  5. fix(C-01,H-03): pre-fill search input with current query; sanitize entity id in not-found XSS

    8d3abc6
  6. fix(BUG-M9,BUG-C2): pass driver kwarg in run_investigator; update 12->15 investigators

    18aeb5b

  1. fix(M-06): back button checks referrer before history.back() -- shared/direct links go to search page instead of external site

    1113f2b
  2. fix(M-10,M-11,L-06): deterministic fallback node IDs; container-scoped SVG marker IDs; stop D3 simulation on tab switch

    0fad33c
  3. fix(M-07): add max 20 retry cap to WebSocket reconnect loops -- prevents infinite background polling when HF Space is sleeping

    fad15e0
  4. fix(M-05): cache language labels in applyLanguage() -- avoids redundant API calls on rapid language switching

    729c0c5
  5. fix(CodeQL#22,L-02): avoid externally-controlled format string in api.js console.error; strip trailing slash before WebSocket URL construction

    40aace3
  6. fix(H-10): nav active matching requires path===href or path starts with href+'/' -- prevents /search matching /search-results etc

    1d78e6f
  7. fix(H-09): add hashchange event listener to Router.init() -- direct URL navigation now updates the view

    f14468a
  8. fix(H-02,CodeQL#24): sanitize evidence chip text in FindingItem -- XSS from AI/DB output in innerHTML

    85cfbb0
  9. fix(C-01,H-03): pre-fill search input with current query; sanitize entity id in not-found message (XSS)

    7e3b7e5

  1. fix(BUG-12): show user-friendly callout when feed is empty due to unpopulated DB instead of swallowing backend message

    833acfb
  2. fix(BUG-11,NEW-A4): add Views.notFound and Router.register('*') -- unknown URLs now show 404 instead of frozen spinner

    7ef1e95
  3. fix(BUG-9): validate s.url starts with http before injecting into href -- prevents javascript: XSS from DB

    77238ce