/debug
Debug a deadlock / hang / timeout against a mesh — a NodeType whose compile never settles, a per-instance hub activation that parks forever, a layout area or Tests area that never renders, a GetMeshNodeStream / GetQuery that never emits, an e2e test that times out instead of failing. Use whenever something TIMES OUT rather than erroring, and you need to find WHERE the message flow breaks down. The timeout is the symptom, never the bug — raising it just hangs longer. Also the FLAKE procedure — a test that fails one run in five in CI and never locally: the 31 s no-verdict / exit-139 / catastrophic-ObjectDisposedException signatures, how to reproduce them under the runner's shape (DOTNET_PROCESSOR_COUNT=4 + load, in a loop), the four trail files a run leaves, dump analysis, and the wedged-instance check.
- Instructions: # /debug — Find where the message flow breaks down A timeout means **something never completed**. The timeout is the *symptom*; the bug is a specific broken edge in the message flow — a message dropped in routing, a handler that threw on entry, an observer that died, an initial `Full` never sent, a `Pending` flip that never reached the owner. **Raising the timeout never fixes this — it just hangs longer.** Find the exact edge where the flow stops, and fix *that*. > Canonical reference: **`Doc/Architecture/DebuggingMessageFlow`**, readable through the `memex` > MCP (`get Doc/Architecture/DebuggingMessageFlow`). This skill is the operating procedure; that > doc is the full trace-tag reference and the catalogue of known broken edges. The framework-side > version of this skill lives in the core checkout at `.claude/skills/debug`. ## The one rule **Reproduce once. Grep the trace. Find the last thing that fired and ask what should have fired next.** Do **not** rerun "to see if it still sticks" (it will), and do **not** bump the timeout. ## 🚨 These hangs reproduce only IN BULK, not in isolation The defining property of this class of bug: **the thing passes on its own and hangs only when everything runs together.** Render one NodeType's `Tests` area → green; run the whole suite, or a full e2e shard, or install every plugin at once → something times out, usually a *different* something each run. That is not "flakiness to retry away" — it is the tell that the broken edge is a **cross-test / cross-type interaction**: shared IoPool or thread-pool pressure, one Roslyn compile queued behind another, a per-process cache, a grain that only deactivates→reactivates under concurrent load, an observer that only loses its race when other emissions interleave. **So reproduce in bulk.** In this repo "bulk" is one of: ```bash # The whole plugin compile surface in one pass (all NodeTypes, one process): python3 scripts/compile-check.py # A full e2e suite against ONE portal process…
- Auto mount: yes
- Launches sub thread: no