Spaces:
Sleeping
Sleeping
Commit History
-
fix(bridge): drain stderr, add render/startup timeouts, watchdog, honest capacity errors
Rsan0948 +1: Claude Opus 4.7 (1M context)- Stderr drained continuously by daemon thread into project logger; pipe buffer can no longer fill and deadlock the worker - Render readline() bounded by CALC_ANIM_RENDER_TIMEOUT_SEC (default 60s); timeout kills + restarts the worker and surfaces a structured error - Worker startup bounded by a separate timeout (default 5s) with explicit failure surfacing - Capacity bridge methods (capacity_test_slide, _capacity_metrics_only, _run_capacity_worker) return honest {success: false, error: capability_unavailable, reason: ...} instead of synthetic OK - Watchdog daemon polls proc.poll() every 2s; bounded restart-storm protection (max 3 consecutive failures, then capability_unavailable) - Concurrency: render_worker_lock prevents stdin interleaving; per-spawn queue isolates reader-thread sentinels across worker generations Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>ef2b969
-
Prepare for open source release v1.0.0
Rsan0948 +1: Claude Sonnet 4.6- Add AI tutor with multi-provider support (DeepSeek, Gemini, OpenAI, Ollama) - Add comprehensive documentation (CONTRIBUTING, SECURITY, CHANGELOG) - Add GitHub templates, CI/CD workflows, and Dependabot config - Add .gitattributes for cross-platform line endings - Sync pyproject.toml dependencies with requirements.txt - Refactor slide_renderer into package, scripts into scripts/ dir - Clean up project structure and remove stale root-level scripts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>de8ccff
-
GitHub-readiness: docs, cleanup, and polish
Claude- Add README.md with features, installation, supported operations, and dev commands - Add MIT LICENSE - Remove internal dev artifacts from tracking (bugs.txt, unit_tester.txt, APP_PORTING_HANDOFF.txt, content_jsons.txt) and gitignore them - Gitignore auto-generated capacity reports and curriculum draft - Replace print(file=sys.stderr) with logging in slide_render_worker and capacity_slide_worker https://claude.ai/code/session_01Do316K4q3L5wvmPg5F1jnqc2d2afa -
Fix silent failures, organizational issues, and hidden friction points
ClaudeSilent failures fixed: - Workers (slide_render_worker, capacity_slide_worker): error responses now include traceback.format_exc() so subprocess failures are actually debuggable - app.js: replaced two completely silent catch(_){} blocks (loadSymbols and refreshGraph) with console.error() calls so failures are visible in devtools - capacity_slide_worker: pygame.init() was called unconditionally on every request; guarded with get_init() checks to avoid repeated re-initialization - slide_render_worker: removed dead code `txt = f"{txt}"` (no-op assignment) Warnings for hidden truncation: - slide_render_worker: logs to stderr when content_blocks are silently truncated to 7 (caller had no way to know content was dropped) - capacity_slide_worker: logs to stderr when page_index is silently clamped Organization / cleanliness: - run.py / app_main.py: window launch config was duplicated verbatim in both files; extracted launch() into app_main.py as single source of truth; run.py now …2d887df -
Fix bugs, redundancies, and bad practices across core modules
ClaudeBugs fixed: - animation_engine: y=0.0 falsely returned as None in limit frames (ly if ly and ... failed for valid zero y-values) - bridge: temp PNG file leaked after copy_image_to_clipboard call; also add sys.platform guard since osascript is macOS-only - bridge: slide render cache evicted all 120 entries at once (thrashing); now evicts only the oldest entry via FIFO pop - solver: hasattr(obj, '__class__') is always True for any Python object; replaced with isinstance check to actually filter primitive scalars Redundancies eliminated: - bridge: extracted _run_capacity_worker() to remove ~40 lines of duplicated subprocess spawning between _capacity_metrics_only and capacity_test_slide - bridge: extracted _parse_with_fallback() to remove the identical parse-inner-then-full-latex logic duplicated in solve() and get_graph_data() Bad practices fixed: - step_generator: dict(hints.items()) -> dict(hints) (items() unnecessary) - step_generator: imported and applied MAX_ANIMATIO…b958d12
-
Initial commit
Rsan0948fe0c99f