Skip to content

chore(dx): stop the debugger breaking on every mekik pause - #9

Merged
AimTune merged 1 commit into
mainfrom
chore/vscode-debug-config
Jul 30, 2026
Merged

chore(dx): stop the debugger breaking on every mekik pause#9
AimTune merged 1 commit into
mainfrom
chore/vscode-debug-config

Conversation

@AimTune

@AimTune AimTune commented Jul 30, 2026

Copy link
Copy Markdown
Owner

A mekik pause is a thrown exception by design — Shuttle.Approve → ilmek's ctx.InterruptAsyncInterruptSignalException, caught by the ilmek engine, run ends interrupted. With Just My Code on, the debugger sees it leave user code and get caught by library code, calls that "user-unhandled", and breaks. Every pause:

Ilmek.InterruptSignalException: 'ilmek: paused for a human at interrupt#0'

Nothing is wrong; debugging an app that pauses is just an exercise in pressing Continue.

What this does

file
.vscode/launch.json debug configs for all five .NET examples, each with "justMyCode": false
.vscode/settings.json "csharp.debug.justMyCode": false for sessions started without a launch config
.vscode/tasks.json the build task those configs use
.gitignore whitelist tasks.json (.vscode/* is ignored; the other three were already exempt)

Both are off by default — flip either to true when the pause path itself is what you want to stop in. The parameter is commented in place.

Trade-off: with Just My Code off, stepping can walk into framework/library code.

Visual Studio can't be configured from the repo — the setting lives in the user profile: Debug → Windows → Exception Settings, right-click Ilmek.InterruptSignalExceptionContinue When Unhandled in User Code. Documented in docs/HITL.md (in #(the feature PR), which touches those doc files).

Verified

dotnet build dotnet/Mekik.slnx → 0 warnings, 0 errors; the five program paths in launch.json all resolve; .vscode/ is no longer git-ignored.

🤖 Generated with Claude Code

A mekik pause is not an error: `Shuttle.Approve` calls ilmek's
`ctx.InterruptAsync`, which throws `InterruptSignalException` to unwind the node,
and the ilmek engine catches it and ends the run `interrupted`. Normal control
flow, on every single pause.

With Just My Code on, the debugger sees that exception leave user code and get
caught by library code, calls it "user-unhandled", and breaks — so debugging any
app that pauses means pressing Continue over and over:

    Ilmek.InterruptSignalException: 'ilmek: paused for a human at interrupt#0'

Turn Just My Code off and the debugger only breaks on exceptions nothing catches,
which an interrupt never is. Set here per launch configuration and in
settings.json (for sessions started without one), both with the parameter marked
so it can be flipped back when the pause path itself is what you're debugging.
The trade-off is that stepping can now walk into library code.

Visual Studio keeps this setting in the user profile rather than the repo — see
the docs added alongside the feature work for the Exception Settings route.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@AimTune
AimTune merged commit 073c507 into main Jul 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant