-
Notifications
You must be signed in to change notification settings - Fork 0
CHANGELOG
Chuyue Wang edited this page Mar 22, 2026
·
5 revisions
- Removed personal credentials and university-specific defaults from all config files
- Fixed hardcoded absolute paths in
.cortex_launcher.c— now derives project root from executable location - Removed tracked build artifacts from git:
.plasmo/,CortexDaemon.app/,.vsix, IDE configs - Comprehensive
.gitignoreupdate for all artifact types - Fixed deterministic extension ID via manifest key —
install_native_hostno longer requires--extension-id - Auto-detects all Chromium browsers (Chrome, Edge, Brave, Arc, Vivaldi, Opera, Chromium) and installs native messaging for each
- Fixed API endpoint documentation (
/api/state→/status/current) - Updated test counts (47 test files)
- One-click "Start Cortex" from browser extension — daemon launches via Terminal.app with camera access
- Multi-layer stop flow: WebSocket SHUTDOWN → HTTP /shutdown → native messaging kill → SIGKILL escalation
- Orphaned process detection via both port (
lsof) and process name (pgrep) - Smart camera selection: probes indices 0-4, post-open re-verification rejects Continuity Camera
- Camera permission request via AVFoundation before opening capture device
- MacBook camera warmup retry loop (4 × 0.5s)
- Design token system with CSS custom properties
- Ambient somatic engine: particles, aura, weather effects
- Redesigned popup dashboard and Pulse Room new tab page
- Onboarding flow with 3-step setup guide
Comprehensive audit-driven revision across signal processing, LLM pipeline, Chrome extension, LeetCode mode, and new features. 903 tests passing.
Signal & State Engine (1A)
- C-01: Raised SQI validity threshold from 0.1 → 0.4 to reject noisy heart rate estimates
- C-02: Added parabolic peak interpolation to
peak_detection.py— eliminates 33ms IBI quantization error at 30 FPS - C-03: IBI count guard requires ≥5 inter-beat intervals before propagating RMSSD
- C-04: Fixed s6 blending — weighted blend (60% thrashing + 40% switch) instead of
max()which double-counted velocity - C-10: Shutdown detector late hour configurable (default 23:00), all thresholds now constructor parameters
- C-11: Resolved YAML vs Pydantic default discrepancies (complexity_threshold, quiet_mode_minutes)
- O-09: Context-aware blink suppression — attenuates score 0.3× when HR is normal (concentration, not stress)
LLM & Intervention Pipeline (1B)
- C-05: Fixed KeyError in v2 templates by adding
extra_contextparameter tobuild_user_prompt() - C-06: Nuanced staleness check — suppresses intervention only on genuine FLOW recovery (≥3s dwell), checks tab snapshot validity
- W-11: Fixed
is_destructivefalse positive — checksaction_typefield instead of substring matching on label text - W-14: Added
GET /consent/levelandPOST /consent/resetAPI endpoints
Chrome Extension (1C)
- C-08: First-run onboarding page with 3-step setup guide
- C-09: Debounced SW state persistence (500ms trailing timer) to
chrome.storage.session— survives service worker restarts - W-25: Tab-manager snapshot persistence across SW restarts
- Popup shows disconnected banner when daemon not running
LeetCode Mode (1D)
- C-07: Lockout overlay renderer with countdown timer and skip button (no penalty — bandit learns naturally)
- C-12:
LeetCodeAdapternow inheritsCortexAdapterprotocol - W-21: Zombie detector returns
Falsewhenblink_rate is Noneinstead of falling through toTrue - W-28: Parasympathetic rebound temporal guard — only detects within 5 minutes of last acceptance
LLM Quality & Bandit (2A)
- W-08: Structured JSON
response_formatadded to Azure OpenAI calls - W-12: LinUCB regularization increased 1.0 → 5.0 for better cold-start exploration
- W-13: Helpfulness reward redistributes 30% weight proportionally when no explicit rating
- Token budget hard cap with 3-pass truncation (terminal → tab titles → code content)
- W-18: Deprecated
InterventionTriggerin favor ofTriggerPolicywith deprecation warnings
Prompt Engineering & Tab Classifier (2B)
- O-08: New
tab_classifier.py— single source of truth for domain-based tab type classification - W-05: Parser enforces keep on AI assistant and documentation tabs via classifier (not hardcoded URLs)
- W-26: Fixed active recall template biometric contradiction
- W-10: Added normalizer defaults to generic-phrase blocklist
- s6 same-category discount — switching between tabs of the same type gets reduced penalty
Detector Robustness & Config (2C)
- W-06: Removed goal-relevant verbs from rabbit hole stop-word list ("implement", "build", "create", "fix", "add")
- W-15: Removed overlay backdrop dim (transparent instead of 35% opacity)
- W-16: Chrome extension cooldowns sync with daemon config via SETTINGS_SYNC
- W-17: Quiet mode toggle added to Chrome popup
- W-19: Adaptive solution friction with exponential decay (
max(10, 60*exp(-t/600))*difficulty_mult) - W-20: Fixed zombie detector docstring/code mismatch
- O-10: Pre-break warning at 80% stress threshold via
should_warn() - O-01:
SessionReportGenerator— full biometric study session reports with flow percentage, state transitions, golden hour, 7-day comparison - O-04: Per-topic difficulty tracking in
LongitudinalTrackerwith stress modifier calibration - O-07: Modality preference tracking in
TabRelevanceTrackerfor proactive resource switching
- 903 tests passing (up from ~870 pre-revision)
- New test files:
test_session_report.py,test_tab_classifier.py,test_rabbit_hole.py,test_stress_integral.py,test_zombie_detector.py,test_parasympathetic_rebound.py - Pre-existing failures (not caused by revision):
test_activity_tracker.py(redis import),test_redis_store.py(redis import),test_context_to_llm.py(system prompt contains "heart rate" in instructions),test_scripts.py(9 failures)