Upload the Gradle problems report as an artifact so it can be
downloaded and viewed when tests fail.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The function was always returning true instead of the computed
neovimTestingEnabled value.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The neovimEnabled function was incorrectly using test.javaClass which
returns the class of the TestInfo object itself, not the actual test
class. This caused annotations like @TestWithoutNeovim on test classes
to be ignored.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace old ExtensionHandler/TextObjectActionHandler pattern with the
new api.textObjects {} DSL. The indentation-based text object algorithm
is preserved but now uses VimApi extension function.
- Use api.textObjects { register() } for ai, aI, ii text objects
- Replace TextRange with TextObjectRange.LineWise
- Remove IndentObject and IndentObjectHandler classes
- Reduce code from ~280 to ~188 lines
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace old VimExtensionFacade/ExtensionHandler pattern with
VimApi.textObjects { register(...) } API
- Use Range.Simple from API module instead of internal TextRange
- Remove PortedMiniAiAction, addAction helper, and PLUG/KEY constants
- Simplify findQuoteRange and findBracketRange as VimApi extensions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace the FLAG_TEXT_BLOCK command flag with a more descriptive
`preserveSelectionAnchor` property in TextObjectActionHandler.
This property controls what happens when the selection anchor is outside
the target text object range in visual mode:
- true (default): extends selection from current anchor
- false: jumps to select only the text object
Commands like iw/aw preserve anchor (extend), while structural text
objects like i(/a(, i"/a", is/as reset anchor (jump).
Also adds comprehensive documentation with examples to both the
internal handler and the public API.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Per Vim docs: "Any trailing white space is included, unless there is
none, then leading white space is included."
Previously IdeaVim only selected the quotes and content without any
surrounding whitespace.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduce TextObjectScope for registering custom text objects via the
plugin API. Text objects can be used with operators (d, c, y) or in
visual mode.
- Add TextObjectScope interface with register() method
- Add TextObjectRange sealed interface (CharacterWise/LineWise)
- Implement TextObjectScopeImpl using IdeaVim's internal mechanisms
- Migrate VimTextObjEntireExtension from Java to Kotlin using new API
- Add textObjects() function to VimApi
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduce Beads for issue tracking:
- Add configuration files: `.beads/config.yaml` and `.beads/metadata.json`.
- Provide documentation in `.beads/README.md`.
- Configure `.beads/.gitignore` for Beads-related exclusions.
- Prepare the repository for AI-native, git-integrated issue tracking workflows.
Previously only bug-fix and feature-impl steps had Bash(./gradlew:*)
in their allowed tools. Now all 8 Claude steps can run gradle commands
without requiring manual approval.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create a Claude skill for interacting with YouTrack issue tracker:
- Add CLI wrapper scripts in scripts-ts/src/youtrack-cli/
- Add release management functions to youtrack.ts (ported from Kotlin)
- Update youtrackAutoAnalysis.yml to use the skill instead of curl
- Document YouTrack usage in CLAUDE.md
CLI scripts:
- add-comment.ts, add-tag.ts, remove-tag.ts
- set-status.ts, get-ticket.ts, set-fix-version.ts
- create-version.ts, delete-version.ts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add missing permissions block with id-token: write required for
anthropics/claude-code-action to obtain OIDC token.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a simple TypeScript test script and TeamCity configuration to verify
that TS scripts can run on TeamCity agents. The build downloads Node.js
20.18.1 and runs the test script.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move the author update script from Kotlin to TypeScript, including tests.
Changes:
- Create scripts-ts/src/updateAuthors.ts
- Create scripts-ts/src/updateAuthors.test.ts with vitest
- Add vitest to package.json
- Create scriptsTests.yml workflow for running tests
- Update updateAuthors.yml workflow to use Node.js
- Remove Kotlin implementation and test
- Remove unused github-api dependency
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move the plugin dependency checker from Kotlin to TypeScript for
consistency with other scripts.
- Create scripts-ts/src/checkNewPluginDependencies.ts
- Update workflow to use Node.js instead of JDK/Gradle
- Remove Kotlin implementation and Gradle task
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Delete scripts that have been migrated to TypeScript or are unused:
- youtrackAnalysis/SelectTicketForAnalysis.kt (TS version used)
- youtrackAnalysis/CompleteTicketAnalysis.kt (TS version used)
- youtrackToolkit.kt (not imported anywhere)
- Related Gradle tasks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Delete unused integration test infrastructure:
- .github/workflows/integrationsTest.yml
- scripts/src/main/kotlin/scripts/integrationsTest.kt
- Gradle task from build.gradle.kts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move the script from Kotlin (scripts/) to TypeScript (scripts-ts/)
for consistency with other YouTrack automation scripts.
Changes:
- Add setStatus() function to youtrack.ts
- Create updateYoutrackOnCommit.ts with git log parsing
- Update GitHub workflow to use Node.js instead of JDK/Gradle
- Remove Kotlin implementation and changelogUtils.kt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reorganize scripts-ts/src structure by separating entry points (jobs)
from utility modules. The youtrack.ts module is now in tools/ subfolder.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added description parameter to @TestWithoutNeovim annotations in
option mapper test classes to clarify why these tests are excluded
from Neovim verification. These tests verify integration between
IdeaVim options and IntelliJ's EditorSettingsExternalizable, which
is IDE-specific behavior not present in Neovim.
Modified files:
- ScrollOffOptionMapperTest
- SideScrollOffOptionMapperTest
- SideScrollOptionMapperTest
- ScrollJumpOptionMapperTest
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The context7 plugin tools need to be explicitly listed in claude_args
allowed-tools for Claude to use them without permission prompts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added a reminder about the available context7 MCP plugin to all Claude
prompts that have it enabled (triage, planning, bug-fix, feature-impl).
This helps Claude know it can look up Vim documentation when needed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduces a planning phase between triage and implementation that:
- Explores the codebase to understand what needs to be implemented
- Creates a detailed implementation plan for bug fixes/features
- Asks for clarification when genuinely ambiguous (posts YouTrack comment)
Smart ticket selection with automatic answer detection:
- Prioritizes tickets with pending clarifications
- Uses AI to check if owner has answered questions
- Automatically removes pending tag when answered
- Falls back to random selection if no pending answers
Key changes:
- youtrack.ts: Add pending clarification tag constant and removeTag()
- selectTicketForAnalysis.ts: Query pending tickets first, add state fields
- completeTicketAnalysis.ts: Skip tagging for needs_clarification/no_answer
- Workflow: Add Step 0 (check answers) and Step 2 (planning)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Age is NEVER a reason to mark a ticket as outdated. Many 10-15+ year
old tickets are still valid. A ticket is outdated only when it has
BOTH vague/environment-specific description AND references to
features/APIs that no longer exist.
Parse the execution_file JSON to find permission_denials array
and automatically report them as attention_reason, even if Claude
doesn't self-report them. This ensures we catch tool permission
issues even when Claude works around them.
- All Claude steps now only update analysis_state.json (no text flags)
- All parse steps read from analysis_state.json using jq
- Added triage_attention_reason and changelog object to JSON structure
- Simpler and more consistent data flow
- attention_reason is now a separate flag that doesn't replace main status
- Workflow continues with main task even when issues are encountered
- Issues are reported alongside the main result (bug/feature/success/etc)
- Workflow fails at the end if any attention_reason was set
This will help understand:
- What outputs claude-code-action provides
- What the execution_file contains
- Whether the TRIAGE_RESULT pattern can be found
The claude-code-action does not have a 'response' output. Instead, it
provides 'execution_file' which is a path to the execution output file.
Changes:
- All parse steps now read from execution_file instead of response
- Added explicit git subcommand patterns to review and PR steps
- Added gh pr pattern for PR creation step
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add explicit patterns for git branch, git log, git blame, git diff,
and git show to ensure these commands are allowed during implementation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added attention_required mechanism to Step 1 (Triage)
- Added Bash(cat:*) to allowed tools for triage step
- Updated parse-triage to extract attention_reason
- Updated workflow summary to show triage attention reasons
- Updated fail condition to include triage attention_required
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Split the single monolithic Claude prompt (~200 lines) into 5 focused
steps to improve quality and debuggability:
1. Triage: Determines ticket type (bug/feature) and suitability
2. Bug Fix: TDD-based implementation with root cause analysis
3. Feature: Feature implementation with tests
4. Code Review: Uses code-reviewer subagent
5. Changelog & PR: Creates branch, commits, and PR
Key changes:
- Add analysis_state.json for state passing between steps
- Each step has focused prompt with single responsibility
- Conditional execution based on triage result (bug vs feature)
- Preserved attention_required mechanism for all impl steps
- Updated TypeScript scripts to read/write JSON state file
Benefits:
- Focused prompts reduce confusion
- Better debugging (see where pipeline fails)
- Early termination for unsuitable tickets
- Consistent code review (always happens)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This helps with debugging workflow runs by preserving the full
execution log in the workflow artifacts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add WebFetch permissions for:
- github.com and raw.githubusercontent.com (commits, PRs, raw files)
- vimhelp.org and vimdoc.sourceforge.net (Vim documentation)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Emphasize that Claude should:
- Focus on bug descriptions, not user-suggested solutions which may be
inaccurate or too narrow for IdeaVim's architecture
- Find the actual root cause rather than implementing potentially flawed fixes
- Handle tickets with multiple issues by implementing them in separate commits
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Instruct Claude to be direct and avoid filler words, extra explanations,
or compliments. Focus on actionable feedback only.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New Claude skill for routine test maintenance focusing on:
- Test quality and readability (meaningful content, clear names)
- Reviewing @Disabled tests to check if they can be re-enabled
- Ensuring @TestWithoutNeovim annotations have clear reasons
- Documenting @VimBehaviorDiffers usage
Daily GitHub Actions workflow runs at 7 AM UTC.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Local changes without a Pull Request are useless - added clear
instruction that the workflow must create a PR on GitHub.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New workflow for routine test maintenance focusing on:
- Test quality and readability (meaningful content, clear names)
- Reviewing @Disabled tests to check if they can be re-enabled
- Ensuring @TestWithoutNeovim annotations have clear reasons
- Documenting @VimBehaviorDiffers usage
This complements the existing codebase maintenance workflow
but focuses exclusively on tests.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Image attachments from YouTrack tickets are now downloaded locally
so Claude can view them using the Read tool. This enables analysis
of visual bugs and UI issues that require screenshots.
Changes:
- Add downloadAttachment() function to youtrack.ts
- Download images to attachments/ directory during ticket selection
- Update ticket_details.md to reference local image paths
- Add cleanup step to remove temporary files after analysis
- Add prompt instruction about viewing image attachments
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add explicit instructions to create branch, commit, push, then create PR
- Add PR creation failure as a trigger for attention_required status
Fixes issue where Claude forgot to push branch before creating PR.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>