Skip to content

Releases: heznpc/skillBridge

v3.5.8

30 Apr 23:05
0353465

Choose a tag to compare

What's Changed

  • fix: v3.5.8 — real bug in fetchWithRetry + replace ~23 fake tests with real ones by @heznpc in #95

Full Changelog: v3.5.7...v3.5.8

v3.5.7

30 Apr 22:49
0ea4a9c

Choose a tag to compare

What's Changed

  • refactor: extract banners.js from content.js by @heznpc in #93
  • fix: v3.5.7 translator + bridge hardening (6 issues from deep audit) by @heznpc in #94

Full Changelog: v3.5.6...v3.5.7

v3.5.6

26 Apr 13:39
3ca94d1

Choose a tag to compare

What's Changed

  • ci: close the gap that let stale Skilljar selectors ship by @heznpc in #88
  • chore: drop ghost slug, surface extendedThinking deck in API course by @heznpc in #89
  • chore: simplify review follow-ups (memoize sort, cache npm, trim comments) by @heznpc in #90
  • fix(cd): idempotent CWS deploy — skip if version already tagged by @heznpc in #91
  • fix: v3.5.6 production hotfixes — 6 audit-surfaced bugs + drop tabs permission by @heznpc in #92

Full Changelog: v3.5.5...v3.5.6

v3.5.5

19 Apr 11:25
959e352

Choose a tag to compare

What's Changed

  • docs: sync README and landing page with v3.5.4 / 10 Premium languages by @heznpc in #70
  • ci: gracefully skip CWS/AMO deploys when secrets are missing by @heznpc in #71
  • chore: add store-update skill overlay and bump store listing to v3.5.4 by @heznpc in #72
  • fix(ci): grant docs.yml write permission and align node version by @heznpc in #73
  • fix(landing): render real Unicode in language tags instead of literal \u escapes by @heznpc in #74
  • fix(cd): repair file change detection and switch CWS to draft-only upload by @heznpc in #75
  • fix(docs): correct case in github.io landing page URLs (skillbridge -> skillBridge) by @heznpc in #76
  • refactor(ci): clean up CD and docs workflows after /simplify review by @heznpc in #77
  • feat: platform detection module + yt client version override by @heznpc in #78
  • chore: pending local updates (docs, CI, fixes) by @heznpc in #81
  • fix: harden sanitizer, CI, docs cleanup by @heznpc in #79
  • chore: add review notes by @heznpc in #86
  • fix: refresh stale Skilljar course-page selectors, bump to 3.5.5 by @heznpc in #87

Full Changelog: v3.5.4...v3.5.5

v3.5.4 — CI Modernization, Zero Lint Warnings, Permission Cleanup

09 Apr 14:57
c84f3d7

Choose a tag to compare

Changes

CI Modernization

  • Upgraded from Node.js 20 to 22 LTS — preempts forced migration on June 2, 2026

Code Quality

  • ESLint warnings: 24 → 0 — added caughtErrorsIgnorePattern to config, fixed all unused vars across 12 files
  • Zero errors, zero warnings across entire codebase

Permission Cleanup

  • Removed unused activeTab permission — not referenced anywhere in source code, reduces Chrome Web Store review friction and attack surface

Full Changelog: v3.5.3...v3.5.4

v3.5.3 — Medium/Low Hardening: Caps, Cleanup, Guards, Tests

09 Apr 13:43
67fd88e

Choose a tag to compare

Fixes

Memory & Cleanup

  • originalComments Map cap: Size check at insertion point (5000 limit, consistent with other Maps)
  • history.pushState/replaceState cleanup: Original methods restored on pagehide to prevent wrapper stacking across bfcache navigations

Performance

  • YouTube subtitle efficiency: Skip retry timers on pages without YouTube iframes, reduce retries from 5 to 3, guard against calling destroyed manager, clean up timers in destroy()

Robustness

  • window._sb null guard: All 5 consumer modules (code-comments, sidebar-chat, text-selection, header-controls, keyboard-shortcuts) now fail gracefully with a warning if _sb is not initialized — prevents cascading errors on load-order issues

Test Coverage

  • 11 new tests for postMessage handling and pendingCallbacks:
    • Nonce validation (correct/wrong/missing/different source)
    • pendingCallbacks lifecycle (_ts timestamps, stale eviction, size cap)
    • Callback dispatch and unknown ID handling
  • 309 tests total, all passing

Full Changelog: v3.5.2...v3.5.3

v3.5.2 — Critical: Load Order Fix, Memory Leaks, XSS Boundary

09 Apr 13:31
954e7a2

Choose a tag to compare

Critical Fixes

Manifest Load Order Bug (all users affected)

constants.js was loading before selectors.js, causing EXAM_SKIP_SELECTORS and all subsequent constants to throw ReferenceError. Exam mode answer protection was completely broken — answer choices were being translated on quiz/exam pages, which could alter meaning.

pendingCallbacks Memory Leak

The pendingCallbacks Map in translator.js could grow unbounded when requests failed outside the timeout path. Added:

  • Size cap (100 concurrent callbacks)
  • Stale entry eviction (auto-cleanup after 2 minutes)

High-Priority Fixes

  • XSS error boundary: gemini-block innerHTML assignment now wrapped in try-catch with fallback to original HTML
  • Await cache/quota operations: _cleanupExpiredCache() and _checkStorageQuota() were fire-and-forget in initialize(), errors silently swallowed
  • Offline queue leak: restoreOriginal() now clears _offlinePendingItems to prevent memory growth on repeated language switches

Code Quality

  • ESLint warnings reduced from 27 to 10
  • letconst for Maps that are never reassigned
  • Unused variables prefixed with _ per convention

Full Changelog: v3.5.1...v3.5.2

v3.5.1 — Code Review Fixes, Skilljar 2026 Selectors & Test Coverage

09 Apr 13:23
4da68e3

Choose a tag to compare

What's Changed

Bug Fixes

  • Eviction bug: Fixed storage quota eviction formula that could delete wrong entries
  • Unbounded offline queue: Added PENDING_NODES_MAX cap to prevent memory growth
  • Race condition: Fixed verify queue lock not releasing on bridge-ready edge case
  • Maintenance workflow: Added issues: write permission

Enhancements

  • Skilljar 2026 selectors: AI Tutor, Course Families, Course Ratings, AI Feedback
  • AI Tutor exclusion: Prevents DOM conflicts by excluding AI Tutor widget from translation
  • Bilingual tutor prompt: SkillBridge Tutor now proactively clarifies AI/ML terms across languages

Test Coverage

  • Added tests for _rateLimiter, fetchWithRetry, registerAlarms
  • Added tests for offline queue cap, detached node filtering, Map size cap
  • Added tests for exam page detection patterns, storage eviction logic
  • Added tests for all new Skilljar selectors
  • 298 tests total, all passing

Maintenance

  • Fixed Prettier formatting
  • Synced package.json version (was stuck at 3.4.0)
  • Added release automation workflow

Full Changelog: v3.5.0...v3.5.1

v3.5.0 — Infrastructure Hardening, New Features & Deployment Pipeline

03 Apr 10:17
dda3aac

Choose a tag to compare

What's New

Features

  • Per-Lesson Term Preview — floating card shows 6 key terms when entering a lesson, auto-dismisses after 15s, remembers dismissal per lesson
  • PDF Export — export any translated lesson as a clean, print-friendly PDF from the sidebar header
  • Offline Translation Cache — skip Google Translate when offline (cache-only mode), auto-retry pending items on reconnect
  • Flashcard State Persistence — progress saved per course+language with stable card-text keys, current position restored on reload

Infrastructure

  • IndexedDB Quota Managementnavigator.storage.estimate() check on init, auto-eviction of oldest 30% entries when storage is high, QuotaExceededError recovery with user warning banner (11 languages)
  • Firefox AMO CD Workflowcd-firefox.yml with web-ext@8 sign automation (requires AMO_API_KEY/AMO_API_SECRET secrets)
  • Chrome i18n Expansion — 22 new _locales/ directories, now covering 33 languages total

Docs

  • CHANGELOG.md — v1.0.0–v3.4.0 with actual git commit dates
  • Removed ROADMAP.md (stale) and cleaned all references
  • Updated README, landing page, and 6 i18n READMEs to v3.5.0

Stats

  • 32 files changed, +966 -190 lines
  • 262/262 tests passing
  • 0 lint errors

Full diff: v3.4.0...v3.5.0

v3.4.0 — Architecture Hardening & Full Course Coverage

02 Apr 13:39
fbc9532

Choose a tag to compare

What's New

Architecture & Module Decomposition

  • Extracted 3 modules from content.js (-280 lines): protected-terms.js, gemini-block.js, code-comments.js
  • Deduplicated escapeHtml (single canonical source)
  • Removed dead code, tightened public API surfaces

Full Anthropic Academy Coverage (16/16 Courses)

  • All 16 Skilljar courses now fully mapped with correct URL slugs
  • Added claudeCowork and subagents dictionary sections to all 10 premium languages
  • Course-specific flashcard loading via FLASHCARD_COURSE_MAP with longest-first matching
  • Fixed slug substring collision bug (ai-fluency vs ai-fluency-for-educators)

i18n Completeness

  • zh-TW, pt-BR, ru, vi added to all 19 UI label objects
  • All 10 premium languages now have complete UI translations
  • Fixed hardcoded Korean-only error fallback in translator

RTL Support (Arabic & Hebrew)

  • dir="rtl" attribute now set on <html> for Arabic/Hebrew
  • Full CSS RTL section for sidebar, FAB, chat, progress bar, flashcards, and more

Offline Graceful Degradation

  • Network status tracking via online/offline events
  • Amber offline banner with localized message
  • AI Tutor shows offline notice instead of failing silently

Developer Experience

  • ESLint 9 + Prettier — enforced in CI, 0 errors
  • esbuild bundling — optional npm run build:bundle (43% JS size reduction)
  • JSDoc type annotations — translator, gemini-block, protected-terms, youtube-subtitles
  • Auto-docsnpm run docs + GitHub Actions workflow auto-updates version/language info
  • Constants syncnpm run check:sync validates background/content constant consistency

Bug Fixes

  • Flashcard _rawSections cache not invalidated on language switch
  • flashcardCards not reassigned after async section fetch
  • originalComments Map missing size cap (inconsistent with other Maps)
  • web_accessible_resources narrowed (assets/*assets/icons/*)
  • Removed dead offline flag from background.js error responses

Stats

  • 36 files changed, +3,326 / -501 lines (feature code)
  • 36 files formatted with Prettier (+1,975 / -1,187 lines)
  • 262 tests passing, 0 ESLint errors
  • Content bundle: 169.6 KB → 97.1 KB (43% smaller)