diff --git a/.github/workflows/cross-repo-python-integration.yml b/.github/workflows/cross-repo-python-integration.yml index 718f87458e..fc5e887834 100644 --- a/.github/workflows/cross-repo-python-integration.yml +++ b/.github/workflows/cross-repo-python-integration.yml @@ -82,12 +82,11 @@ jobs: test_command: xvfb-run --auto-servernum pytest tests/shared_contracts/ --timeout=60 --timeout-method=thread -v --tb=short env_name: REQUIRE_REAL_TOOLS_REPO sparse_checkout: | - chat - contracts.py - python/src/utils - shared - sidekick - src/shared/python + src/chat + src/contracts.py + src/python/src/utils + src/shared + src/sidekick tests/shared_contracts tests/support diff --git a/.jules/bolt.md b/.jules/bolt.md index 6858e01b49..07ec1b9d76 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -89,3 +89,6 @@ ## 2025-05-18 - Avoid array methods for small static arrays in frequently called initializers **Learning:** Using `.reduce()` or `.map()` on static arrays like tabs definitions inside frequently called functions (e.g. state initializers or local storage hydration) incurs unnecessary closure and function call overhead. **Action:** Replace `.reduce()` and `.map()` with single-pass `for` loops in simple data transformation functions (like `defaultTabVisibility`) to eliminate closure allocations. +## 2026-08-13 - Replace chained .map().join() in CSV generation +**Learning:** Using chained array methods like `.map().join()` for large data serialization (like CSV exports) allocates intermediate arrays for every row, putting immense pressure on the garbage collector and stalling the main thread. +**Action:** Replace chained array map/join operations in data serialization hot paths with single-pass `for` loops and string concatenation to eliminate intermediate allocations. diff --git a/.jules/palette.md b/.jules/palette.md index f32fbc5e57..b827de251a 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -49,3 +49,6 @@ ## 2024-05-31 - Tab Roles vs aria-pressed **Learning:** When implementing custom tab components in React, use `role="tab"` paired strictly with `aria-selected` (not `aria-pressed`, which is intended for toggle buttons) and ensure `aria-controls` points to a valid `role="tabpanel"` container whose `aria-labelledby` points back to the tab. **Action:** When adding accessible properties to custom tabs, replace `aria-pressed` with `aria-selected`, ensure a `role="tablist"` wrapper is present, and correctly cross-reference `aria-controls` with the tab panel IDs. +## 2024-05-31 - React `useId()` for Input Labels +**Learning:** When improving accessibility for React form inputs where explicit IDs are missing, using hardcoded IDs can cause conflicts if components render multiple times. +**Action:** When improving accessibility for React form inputs where explicit IDs are missing, use the `useId()` hook to safely generate unique, deterministic identifiers for reliably mapping `