Conversation
-j never reached concept synthesis, so a local LLM waited on one batch at a time. Share that pool and keep sibling batches when one throws.
A \r spinner plus a newline-terminated batch result shared one stderr line and scrambled under -j.
🌱 graft blast radius3 areas changed → 1 area can be affected. 1 dependent symbol, depth 2. flowchart TB
A0(("Workspace Splitting<br/>1 symbol"))
classDef reached fill:#D9EDF3,stroke:#3AA7C9,stroke-width:1.5px,color:#0E313C;
class A0 reached;
Who knows this code — 4 people across 4 areas
Ownership is git history over each area's own files, weighted towards recent work (120-day half-life). Merge commits and bots are dropped, and you are dropped from your own PR. A name with no All 1 dependent symbol, grouped by areaWorkspace Splitting — 1 symbol in 1 file
Test signal per changed area — 1 ✓ · 1 ⚠ · 1 ✗Reached = a node under a test path has a resolved edge into the changed symbol. It undercounts anything called indirectly — through a CLI, a spawned process or a dynamic import — so read a low ratio as “look here”, never as a coverage gate.
5 test suites also reference this code5 symbols, kept out of the diagram and the table so they cannot crowd out the areas a reviewer has to look at.
Open the interactive graph → — click an area to see its dependent symbols at file:line. |
Why
--deepconcept synthesis still runs one LLM batch at a time. File summaries already honour-j; this pass does not, andengine.init()never received--concurrency.On a large repo (~6k files, 98 synthesis batches) that serial wait is many hours. Each batch is a long call (~48k chars in, 8k tokens out). A local or OpenAI-compatible server can overlap them; today the GPU/API sits idle between batches.
The change
-j/--concurrencyintograft init(and workspace child builds).mapWithConcurrencypool as summaries.LlmFailureGate: a dead provider stops further calls; a throw does not drop in-flight siblings; empty results stay uncached (--allow-partialstill seesresult.errors).\rspinner.Tests
node --import tsx --test test/context.test.ts— overlap under-j 2; a throwing batch keeps siblingstoolCalls; gateways that ignore forcedtool_choicesilently produce empty/degraded graphs #129 empty-batch / zero-link logs still match