Skip to content

Releases: heznpc/skillBridge

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)

v2.1.0 — Certification Safety, New Courses, UX Overhaul

25 Mar 04:58
e2bd2ce

Choose a tag to compare

What's New

Certification Exam Safety

  • Kill-switch for proctored exams: Extension fully disables on CCA-F and other proctored certification pages — no translation, no UI, no AI tutor — to prevent being flagged as a cheating tool
  • Course-completion quizzes retain existing exam mode (answer choice protection)

New Course Support

  • Added translations for Introduction to Claude Cowork, Introduction to subagents, and MCP Advanced Topics across all 6 premium languages
  • New protected terms: Cowork, Dispatch, Computer Use, Subagent

UX Improvements

  • Onboarding for all first-time visitors — including English speakers who previously saw nothing
  • FAB pulse animation on first visit to draw attention to the AI Tutor
  • Example question chips in sidebar for new users
  • Error retry button in AI Tutor chat
  • Exam warning on sidebar open (not after first message)
  • History clear confirmation dialog
  • Mobile responsive — sidebar goes full-width on screens ≤600px
  • Localized aria-labels for dark toggle, FAB, sidebar buttons (7 languages)

Infrastructure

  • SPA navigation handling: popstate, hashchange, pushState/replaceState detection — translations re-apply on route change
  • MutationObserver reconnect after navigating away from certification pages
  • Expired cache cleanup: stale IndexedDB entries deleted on access
  • 4 new tests for CERT_DISABLE_PATTERNS (certification vs course URL separation)
  • Firefox dist synced
  • README, ROADMAP, CONTRIBUTING, TESTING docs updated

Bug Fixes

  • Fixed domObserver not reconnecting after cert page → course page SPA navigation
  • Fixed greeting not re-localizing on language switch (children count check)
  • Moved inline style to CSS class

Full Changelog

v2.0.0...v2.1.0

v2.0.0 — Exam Mode, Firefox Support, Security Hardening

17 Mar 13:12
8fac377

Choose a tag to compare

What's New

🎓 Exam Mode

  • Auto-detect certification/quiz/assessment pages via URL patterns and DOM selectors
  • Answer choices (radio/checkbox labels) are not translated to preserve academic integrity
  • Exam mode banner warns users that answers stay in English
  • AI Tutor switches to exam-safe mode — refuses to help with answers directly

🦊 Firefox & Edge Support

  • Browser polyfill for cross-browser API compatibility
  • npm run build:firefox generates a Firefox-compatible build
  • Edge works via Chromium compatibility (no changes needed)

🔒 Security Hardening

  • DOM-based XSS sanitizer (replaces regex approach) with attribute allowlist
  • href allowlist: only http://, https://, # permitted — blocks javascript:, data:, entity-encoding bypasses
  • style attribute stripping prevents CSS-based UI redressing
  • FETCH_URL domain allowlist with subdomain matching

♿ Accessibility (WCAG 2.1 AA)

  • ARIA roles and labels on all interactive elements
  • Keyboard-navigable FAB button
  • Progress toast with role="status" and aria-live="polite"

⌨️ Keyboard Shortcuts

  • Ctrl+Shift+S toggle AI Tutor sidebar
  • Ctrl+Shift+L toggle dark mode
  • Ctrl+Shift+/ show shortcut help overlay
  • Escape close panel, / focus chat input

⚡ Performance

  • Viewport-first translation with requestIdleCallback chunking
  • GT queue cap (200 items) prevents unbounded memory growth
  • pruneOriginalTexts() cleans detached DOM elements
  • Centralized Skilljar selectors for DOM change resilience

🔧 Maintenance Automation

  • Chrome Alarms: cache cleanup (every 24h), version check (every 7d)
  • Automatic badge notification when new version is available

📚 Exam UI Terms

  • 16 exam terms (Pass, Fail, Score, Retake, etc.) added to all 6 premium language dictionaries

Full Changelog: v1.0.1...v2.0.0