## 0.93.0

### Plugin Verifier Compliance: Fewer Internal API Usages

Six internal IntelliJ API usages have been replaced with public or experimental alternatives. The plugin verifier now reports only 4 unavoidable internal API references (where no public alternative exists) — down from 29.

Key replacements:
- `PluginMainDescriptor` → public `IdeaPluginDescriptor.contentModules` extension
- `DaemonCodeAnalyzerImpl.getLineMarkers()` → public `DocumentMarkupModel` API
- `AppLifecycleListener.appStarted()` → public `appFrameCreated()`
- `OpenProjectTask` internal builder → public `build().copy()`
- `serviceAsync<T>()` → stable `service<T>()`
- `writeAction {}` → stable `edtWriteAction {}` in ReviewManager

### MCP Server Instructions Rewritten

The instructions agents see when they connect to MCP Steroid are now concise and exec_code-first:
- Declares MCP Steroid as a **stateful API** and **drop-in replacement for LSP**
- Three-step getting started: `list_projects` → `fetch_resource` → `execute_code`
- Removed the skill guide routing table that agents never read (0/69 arena runs)

### New Tool: `steroid_fetch_resource`

A new MCP tool for loading `mcp-steroid://` skill guides. Task-aware description maps intent to the right resource:
- Running tests? → `mcp-steroid://prompt/test-skill`
- Debugging? → `mcp-steroid://prompt/debugger-skill`
- Any IDE task? → `mcp-steroid://prompt/skill`

### Improved `steroid_action_discovery`

The tool description now explains the discovery→exec_code workflow: call action_discovery first to learn available quick-fixes and gutter actions, then invoke them via `steroid_execute_code`.

### Maven Test Execution Fix

Fixed a critical bug where the ModalityStateMonitor killed Maven test execution prematurely. `MavenShCommandLineState.startProcess()` uses `runWithModalProgressBlocking`, which creates a `JobProviderWithOwnerContext` — a coroutine-based progress entity, not a UI dialog. The monitor now skips `JobProvider` entities.

### Integration Tests for Maven and Gradle Test Execution

New Docker-based integration tests validate end-to-end test execution:
- **MavenTestExecutionTest**: Maven tests via `ProgramRunnerUtil.executeConfiguration()` with process exit code validation
- **GradleTestExecutionTest**: Gradle tests via `GradleRunConfiguration.setRunAsTest(true)` + SMTRunner events

### Hardcoded URI Lint Rule

New `NoHardcodedMcpSteroidUriUsageTest` enforces that production code uses generated `XxxPromptArticle().uri` instead of hardcoded `mcp-steroid://` string literals. Comprehensive KDoc documents how to fix violations.

### CI and Infrastructure

- GitHub Actions: `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24` added to all workflows
- TeamCity: artifact post-processing for 1080p video + slim zip
- `escapeShellArgs` properly quotes glob/meta characters for Docker exec
- Linux bind-mount UID handling for TC agents
- Codex default model updated to `gpt-5.4`, Gemini to `gemini-3.1-pro-preview`

### Cleanup

- Removed all `steroid_capabilities` references (tool was removed)
- Fixed `steroid_open_project` docs (trust_project defaults to true, removed non-existent force_new_frame parameter)
- Updated resource access guidance to use `steroid_fetch_resource` instead of `ReadMcpResourceTool`
- Plugin description now says "80+ MCP Resources" (was stale "58")
