• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / frontend / 28653745673
41%

Build:
DEFAULT BRANCH: master
Ran 03 Jul 2026 10:12AM UTC
Jobs 1
Files 458
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

03 Jul 2026 10:10AM UTC coverage: 40.649% (-0.5%) from 41.192%
28653745673

push

github

web-flow
feat: Add text search and index search to SICPy (#4034)

* feat: add text search and index search to SICPy navigation bar

Mirrors the existing SICP JS search implementation in SicpPyNavigationBar,
fetching search data from json_py/rewritedSearchData.json. Adds trie-based
autocomplete, sentence search, and index search with an Omnibar UI — closes #4016.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore:formattin

* fix: add defensive guards to SICPy search functions

* fix: wire onItemSelect and handleClick for keyboard navigation in SICPy search

* fix: normalize text queries to lowercase before search and highlighting

* chore: remove Unwanted files

* fix: lazy-load SICPy search data asynchronously with loading feedback

Search data (~5MB) was fetched via a blocking XMLHttpRequest as soon as
any SICPy page mounted, freezing the UI thread on every textbook load.
Per discussion with Prof. Henz, fetch it only when the user opens Text
or Index Search, use async fetch instead, and show loading/done status
in the omnibar. SICP JS keeps its existing (unchanged) implementation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix: degrade gracefully on search data fetch failure

Replace alert()/throw on fetch failure with an inline error message in
the omnibar, per #4038 point 2 (no alert()/throw on failure). Search
just returns empty results instead of crashing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix: remove unsafe any casts on search result item type

searchResults was typed string[] but actually held either
autocomplete strings or IndexSearchResult submenu items, forcing an
`as any[]` cast to store the latter and `as unknown as
IndexSearchResult` casts to read it back. Type it as a proper union
and narrow with typeof instead of casting.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Martin Henz <henz@comp.nus.edu.sg>

2605 of 7526 branches covered (34.61%)

Branch coverage included in aggregate %.

2 of 176 new or added lines in 1 file covered. (1.14%)

1 existing line in 1 file now uncovered.

6156 of 14027 relevant lines covered (43.89%)

26.6 hits per line

Uncovered Changes

Lines Coverage ∆ File
174
0.64
0.64% src/commons/navigationBar/subcomponents/SicpPyNavigationBar.tsx

Coverage Regressions

Lines Coverage ∆ File
1
0.64
0.64% src/commons/navigationBar/subcomponents/SicpPyNavigationBar.tsx
Jobs
ID Job ID Ran Files Coverage
1 28653745673.1 03 Jul 2026 10:12AM UTC 458
40.65
GitHub Action Run
Source Files on build 28653745673
  • Tree
  • List 458
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • af49ae7f on github
  • Prev Build on master (#28653305435)
  • Next Build on master (#28657249626)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc