The run reads untrusted ticket text, and `Bash(npx tsx:*)` allowed
`npx tsx -e` with YOUTRACK_TOKEN and the Anthropic key in the environment.
- Allow only the youtrack-cli scripts the prompt uses.
- Force every comment from this run to be private, so it can't publish
anything it read.
- Pass the dispatch input via env instead of interpolating it into `run:`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude reads untrusted text (PR comments, YouTrack tickets) while updating
the changelog, and its PRs were auto-merged, so a prompt injection could
reach master or leak secrets through `gh`.
- Claude can only edit CHANGES.md and use read-only git/gh commands; the
push token is not persisted in .git/config.
- A separate step opens the PR with GITHUB_TOKEN only if CHANGES.md is the
only changed file, dispatches PR verification for it and enables
auto-merge.
- Remove mergeClaudeChangelogPR.yml, Claude no longer opens these PRs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- youtrackAutoAnalysis: pass step outputs (ticket summary, Claude-generated
statuses and attention reasons) to run scripts via env instead of
interpolating them into the script, so a crafted ticket summary can't
execute shell commands on the runner.
- mergeClaudeChangelogPR: auto-merge only PRs that change CHANGES.md alone,
and disable auto-merge if a later push touches other files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Anyone could open a fork PR with the What's New title and inject a prompt
via a comment into a Claude run with repository write access.
- Run only for OWNER/MEMBER/COLLABORATOR comments, and verify the PR head is
JetBrains/ideavim:whatsnew-tbr and the commenter has write access.
- Claude can only edit whatsnew-tbr.html and CHANGES.md and has no
commit/push access; the push token is not persisted in .git/config.
- A separate step pushes the edits only if no other files changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sticky lines panel's height depends on the scroll position, so an exact middle doesn't always exist, and the old tolerance range let the previous position count as centred after every other k; instead, try the middle for each panel height we find and keep the closest position, staying put on a tie unless the caret moved to another line, so moves always scroll but typing never scrolls back and forth.
ShiftLeftVisualAction had no coverage for the blockwise branch of
indentRange, while ShiftRight already tests it. Cover a block starting
at column 0 with a whitespace-only line shorter than the indent, and a
block starting mid-line where some lines are shorter than the block
column and must be left untouched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
git rev-parse --show-toplevel resolves symlinks, so in /tmp on macOS matches pointed to /private/tmp and opened a second tab for files that were already open
IJPL-257728 removed intellij.platform.kernel, kernel.impl and kernel.backend
from the platform. On builds from master, IdeaVIM.ideavim-backend and both
bookmark backend modules declared a dependency on intellij.platform.kernel.backend,
so the platform skipped them silently. None of the remoteApiProvider extensions
got registered, and Commentary, Format and the other RPC calls failed with
"No remote API found".
IdeaVim doesn't use any class from these modules. The backend-only loading in
split mode is still provided by the dependency on intellij.platform.backend.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The platform reports the editor switch from closing the cmdwin only after the command has run, so redrawing for it closed the output the command had just shown.
`/` action was running intelij SpeedSearch which didin;t work on popups. to make it work there also we find speedsearch component and activate this one directly
ToolWindowNavEverywhere registered the <C-W> dispatcher on the focused tool
window component but never removed it from that component on dispose. After
disposing, the focus listener was gone too, so <C-W> stayed captured there.
The old focus owner was also unregistered only if it was still inside a
visible tool window. A tool window hidden while focused kept the shortcut.
Track the registered component, as EscEverywhere does, and unregister it on
every focus change and on dispose.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add possibility to disable pushing to primary register on selction change. Needed to disable platform primary publishing so mouse selection won't publish too.
Decide between centring, scrolling up and scrolling down in one place, and keep how we measure the window, in lines or in pixels when block inlays take up most of it, in WindowLines
Move the existing EditorHelper.kt top level functions to EditorHelperRt.kt, matching its JVM name, and group the scrolling code that adjusts for the sticky lines panel