MQL5-Google-Onedrive/.jules/bolt.md
google-labs-jules[bot] daf3051e34 Optimize PR review script for shallow clones
- Update `scripts/review_pull_requests.py` to compare against `origin/main` instead of local `main`. This ensures accurate identification of unmerged branches in CI/CD environments and shallow clones.
- Ensure `get_all_branch_details` returns a structure fully compatible with `get_branch_info` (added `commits: []`), preventing potential KeyErrors.
- This change enables the script to correctly process 150+ branches in <0.5s by leveraging `git for-each-ref` (O(1) git call) instead of falling back to per-branch `git log` (O(N) git calls).
2026-02-07 05:13:23 +00:00

24 lines
2.5 KiB
Markdown

# Bolt's Journal ⚡
This journal is for CRITICAL, non-routine performance learnings ONLY.
- Codebase-specific bottlenecks
- Failed optimizations (and why)
- Surprising performance patterns
- Rejected changes with valuable lessons
## 2024-07-25 - MQL5 Native Functions vs. Scripted Loops
**Learning:** My assumption that a manual MQL5 loop over a pre-cached array would be faster than built-in functions like `iHighest()` and `iLowest()` was incorrect. The code review pointed out that MQL5's native, built-in functions are implemented in highly optimized C++ and are significantly faster than loops executed in the MQL5 scripting layer. The original comment stating this was correct.
**Action:** Always prefer using MQL5's built-in, native functions for calculations like finding highs/lows over manual loops, even if the data is already in a local array. The performance gain from the native implementation outweighs the overhead of the function call.
## 2026-01-23 - Python File System Checks
**Learning:** Checking for file existence (`os.path.exists`) before getting metadata (`os.path.getmtime`) introduces a redundant syscall. `os.stat()` provides both pieces of information in a single syscall and uses the EAFP (Easier to Ask for Forgiveness than Permission) pattern, which is more Pythonic and slightly faster, especially in high-frequency loops or handlers.
**Action:** Use `os.stat()` when both existence and metadata are needed, wrapping it in a `try...except OSError` block.
## 2026-01-26 - yfinance Bulk Download
**Learning:** `yfinance` Ticker.history in a loop is significantly slower than `yf.download` with a list of tickers due to sequential HTTP requests. `yf.download` with `group_by='ticker'` provides a consistent MultiIndex structure even for single tickers, simplifying bulk processing.
**Action:** Always prefer `yf.download(tickers)` over iterating `yf.Ticker(t)` when fetching data for multiple symbols.
## 2026-02-07 - Git History Optimization in Shallow Clones
**Learning:** In CI/CD or shallow clones, `git branch -r --no-merged main` may return 0 results because local `main` is missing or stale. This masks performance issues (since processing 0 branches is instant) but breaks functionality.
**Action:** Always compare against `origin/main` (e.g., `git branch -r --no-merged origin/main`) and pair it with `git for-each-ref` (O(1) git call) to handle the resulting large number of branches efficiently. Ensure the optimized data structure strictly matches the fallback (e.g., include empty `commits: []`) to prevent KeyErrors.