Skip to content

feat(install): add native JetBrains Junie install target#849

Merged
Fmarzochi merged 4 commits into
Fmarzochi:mainfrom
Om-Beast:feat/junie-install-target
Jul 18, 2026
Merged

feat(install): add native JetBrains Junie install target#849
Fmarzochi merged 4 commits into
Fmarzochi:mainfrom
Om-Beast:feat/junie-install-target

Conversation

@Om-Beast

@Om-Beast Om-Beast commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What Changed

Added native JetBrains Junie install target support.

  • Added junie-project adapter
  • Registered Junie in install target registry
  • Added Junie to supported targets and schema
  • Added tests for Junie adapter

Why This Change

This allows EGC to install project guidelines directly for JetBrains Junie using .junie/guidelines.md.

Documentation

Official JetBrains Junie documentation:
https://www.jetbrains.com/help/junie/customize-guidelines.html

Testing Done

  • Manual testing completed
  • Automated tests pass locally (node tests/lib/install-targets.test.js)
  • Edge cases considered and tested
  • If this PR touches a file shared across concurrent EGC processes (encryption key, state files, install-state, lockfiles under ~/.egc/), a concurrent-access test was added or updated

Test result:

Results: Passed: 104, Failed: 0

Type of Change

  • fix: Bug fix
  • feat: New feature
  • refactor: Code refactoring
  • docs: Documentation
  • test: Tests
  • chore: Maintenance/tooling
  • ci: CI/CD changes

Security & Quality Checklist

  • No secrets or API keys committed (ghp_, sk-, AKIA, xoxb, xoxp patterns checked)
  • JSON files validate cleanly
  • Shell scripts pass shellcheck (if applicable)
  • Pre-commit hooks pass locally (if configured)
  • No sensitive data exposed in logs or output
  • Follows conventional commits format

Documentation

  • Updated relevant documentation
  • Added comments for complex logic
  • README updated (if needed)

Summary by cubic

Adds a native JetBrains Junie install target so EGC can install and track project guidelines under .junie/. You can now select junie as an install target.

  • New Features
    • Added junie-project adapter resolving .junie and egc-install-state.json.
    • Registered junie in the registry, supported targets, schema validation, and IDE metadata.
    • Updated integration tiers docs and tests to include Junie (now 20 harnesses); added tests for adapter lookup and path resolution.

Written for commit 3c481ff. Summary will update on new commits.

Review in cubic

@Om-Beast
Om-Beast requested a review from Fmarzochi as a code owner July 18, 2026 01:43
@github-actions

github-actions Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA. Thank you!
Posted by the CLA Assistant Lite bot.

@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 01ede476-91b8-4684-b445-67995f95b37c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 6 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="scripts/lib/install-manifests.js">

<violation number="1" location="scripts/lib/install-manifests.js:7">
P2: Missing `junie` entry in `IDE_INSTALL_URLS` in `helpers.js`. When `junie` adapter validation runs and the target's `.junie/` directory is not found, the `IDE_INSTALL_URLS` lookup returns `undefined`, so no 'ide-not-detected' validation warning is emitted. Other targets like `trae`, `kiro`, and `goose` all have URL entries. Add a `junie` entry with JetBrains Junie's install page to keep the validation feedback consistent.</violation>
</file>

<file name="tests/lib/install-targets.test.js">

<violation number="1" location="tests/lib/install-targets.test.js:1690">
P2: The two new junie test blocks have an indentation inconsistency: the `if (test(...` line uses 4-space indent while all surrounding tests use 2-space indent, and the test function body is at the same indentation level as the `if` line instead of being one level deeper. This will cause a readability inconsistency and may trigger linter warnings in projects with consistent formatting rules. Consider matching the 2-space indent for `if (test(...` and using 4-space indent for the body (or 4/6 space if the tests are inside an outer block that warrants 4-space).</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic


const DEFAULT_REPO_ROOT = path.join(__dirname, '../..');
const SUPPORTED_INSTALL_TARGETS = ['egc', 'claude', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'windsurf', 'amp', 'copilot', 'zed', 'continue', 'kiro', 'trae', 'goose', 'amazonq', 'openhands', 'aider', 'warp'];
const SUPPORTED_INSTALL_TARGETS = ['egc', 'claude', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'windsurf', 'amp', 'copilot', 'zed', 'continue', 'kiro', 'trae', 'junie', 'goose', 'amazonq', 'openhands', 'aider', 'warp'];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Missing junie entry in IDE_INSTALL_URLS in helpers.js. When junie adapter validation runs and the target's .junie/ directory is not found, the IDE_INSTALL_URLS lookup returns undefined, so no 'ide-not-detected' validation warning is emitted. Other targets like trae, kiro, and goose all have URL entries. Add a junie entry with JetBrains Junie's install page to keep the validation feedback consistent.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/lib/install-manifests.js, line 7:

<comment>Missing `junie` entry in `IDE_INSTALL_URLS` in `helpers.js`. When `junie` adapter validation runs and the target's `.junie/` directory is not found, the `IDE_INSTALL_URLS` lookup returns `undefined`, so no 'ide-not-detected' validation warning is emitted. Other targets like `trae`, `kiro`, and `goose` all have URL entries. Add a `junie` entry with JetBrains Junie's install page to keep the validation feedback consistent.</comment>

<file context>
@@ -4,7 +4,7 @@ const path = require('node:path');
 
 const DEFAULT_REPO_ROOT = path.join(__dirname, '../..');
-const SUPPORTED_INSTALL_TARGETS = ['egc', 'claude', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'windsurf', 'amp', 'copilot', 'zed', 'continue', 'kiro', 'trae', 'goose', 'amazonq', 'openhands', 'aider', 'warp'];
+const SUPPORTED_INSTALL_TARGETS = ['egc', 'claude', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'windsurf', 'amp', 'copilot', 'zed', 'continue', 'kiro', 'trae', 'junie', 'goose', 'amazonq', 'openhands', 'aider', 'warp'];
 const COMPONENT_FAMILY_PREFIXES = {
   baseline: 'baseline:',
</file context>

Comment thread tests/lib/install-targets.test.js Outdated
assert.strictEqual(statePath, path.join(projectRoot, '.trae', 'egc-install-state.json'));
})) passed++; else failed++;

if (test('resolves junie adapter root and install-state path from project root', () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The two new junie test blocks have an indentation inconsistency: the if (test(... line uses 4-space indent while all surrounding tests use 2-space indent, and the test function body is at the same indentation level as the if line instead of being one level deeper. This will cause a readability inconsistency and may trigger linter warnings in projects with consistent formatting rules. Consider matching the 2-space indent for if (test(... and using 4-space indent for the body (or 4/6 space if the tests are inside an outer block that warrants 4-space).

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At tests/lib/install-targets.test.js, line 1690:

<comment>The two new junie test blocks have an indentation inconsistency: the `if (test(...` line uses 4-space indent while all surrounding tests use 2-space indent, and the test function body is at the same indentation level as the `if` line instead of being one level deeper. This will cause a readability inconsistency and may trigger linter warnings in projects with consistent formatting rules. Consider matching the 2-space indent for `if (test(...` and using 4-space indent for the body (or 4/6 space if the tests are inside an outer block that warrants 4-space).</comment>

<file context>
@@ -1687,6 +1687,29 @@ function runTests() {
     assert.strictEqual(statePath, path.join(projectRoot, '.trae', 'egc-install-state.json'));
   })) passed++; else failed++;
 
+    if (test('resolves junie adapter root and install-state path from project root', () => {
+    const adapter = getInstallTargetAdapter('junie');
+    const projectRoot = '/workspace/app';
</file context>

@github-actions

Copy link
Copy Markdown
Contributor

Welcome! A couple of things to fix before this gets a full review.

EGC is a large project (hooks, Guardian, DCO, conventions) -- this is normal for a first PR, not a rejection.

Tests are failing.
Run them locally before pushing again:

npm ci
npm test

Fix any failures shown in the "Run fast test check" step log on this PR.

Make sure your branch is on your own fork (not a branch on this repo directly) -- see CONTRIBUTING.md for the full guide.

Push your fixes and this check re-runs automatically. Once it passes, CodeRabbit reviews the PR in full.

@Fmarzochi

Copy link
Copy Markdown
Owner

Hi @Om-Beast, great pace, from welcome to PR in under two hours! I reviewed the change and the adapter itself is exactly right: junie-project.js mirrors the trae-project template 1:1, the registry and schema entries are correct, and your two tests follow the existing coverage shape. I ran the install-targets suite on your branch and it passes 104/104. DCO is also properly signed, nice job on the hook setup.

Three things before we can merge:

  1. Sign the CLA. The cla check is red. Just follow the link in the CLA bot comment above and sign, it takes a minute.

  2. Revert the yarn.lock changes. Your diff includes +54/-43 lines of lockfile churn unrelated to this feature (registry URL swaps, a markdown-it downgrade, a removed js-yaml entry). This usually happens when you run a bare yarn install with a different Yarn version. Lockfile changes belong in dedicated dependency PRs, never mixed into a feature. To fix it:

    git fetch upstream
    git checkout upstream/main -- yarn.lock
    git commit -s -m "chore: restore yarn.lock from upstream main"
    git push

    Tip for the future: yarn install --frozen-lockfile installs without touching the lockfile.

  3. Cite the Junie doc page. The issue's acceptance criteria ask the PR description to link the official Junie documentation you used to verify the .junie/guidelines.md path. Please edit the description and add it.

I've also approved the CI workflows (they're gated for first-time contributors), so you'll see the full pipeline running now. Once the three items above are done and CI is green, we merge. You're very close!

@Fmarzochi

Copy link
Copy Markdown
Owner

Quick follow-up now that the full CI matrix ran: 2741 of 2743 tests pass on your branch. The 2 failures are the same deterministic pair on every OS, and they point to one thing you couldn't have guessed: EGC has a docs contract test for install targets.

spec/integration-tiers.test.js validates that every entry in SUPPORTED_INSTALL_TARGETS is also documented, so adding a target means two more small edits:

  1. docs/spec/integration-tiers.md: add a Junie row to the tier table (Tier 1, same shape as the Trae row).
  2. tests/spec/integration-tiers.test.js: add 'Junie' to the EXPECTED_HARNESSES list (it's a hand-maintained display-name list, currently 19 entries, needs to become 20).

After that, node tests/run-all.js should be fully green locally. Combined with the three items from my earlier comment (CLA, yarn.lock revert, Junie doc link), that's the complete list. No hidden extras, you're almost there!

@Om-Beast

Copy link
Copy Markdown
Contributor Author

I have read the CLA Document and I hereby sign the CLA.

@Fmarzochi

Copy link
Copy Markdown
Owner

One more finding while you work on the remaining items: your CLA signature comment was correct, but the cla check keeps failing because of something subtler. The email on your commits (kesaharwanio685@gmail.com) is not linked to your GitHub account, so GitHub shows both commits as authored by an unknown user (no avatar link on the commits). The CLA bot matches signatures by GitHub login, and since it can't resolve your commits to @Om-Beast, it thinks the committer hasn't signed.

Two ways to fix it, pick one:

Option A (easiest): link the email to your account. GitHub Settings > Emails > Add kesaharwanio685@gmail.com and click the verification link GitHub sends you. Once verified, re-trigger the check by commenting recheck here (or it re-runs on your next push). Nothing to change in git.

Option B: switch your git identity to an email already on your account, then rewrite the two commits:

git config user.email "YOUR-ID+Om-Beast@users.noreply.github.com"
git rebase -r origin/main --exec 'git commit --amend --no-edit --reset-author -s'
git push --force-with-lease

(You can find your noreply address in Settings > Emails, under "Keep my email addresses private".)

Option A is less error-prone since B involves force-pushing. This also makes sure you get credit for the contribution on your GitHub profile, which you definitely want for your first merged PR here!

@Om-Beast
Om-Beast force-pushed the feat/junie-install-target branch from 8de76ec to 5287519 Compare July 18, 2026 02:41
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

@codecov

codecov Bot commented Jul 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Om-Beast added 3 commits July 18, 2026 08:43
Signed-off-by: Om-Beast <kesaharwanio685@gmail.com>
Signed-off-by: Om-Beast <kesharwanio685@gmail.com>
Signed-off-by: Om-Beast <kesaharwanio685@gmail.com>

Signed-off-by: Om-Beast <kesharwanio685@gmail.com>
Signed-off-by: Om-Beast <kesaharwanio685@gmail.com>

Signed-off-by: Om-Beast <kesharwanio685@gmail.com>
@Om-Beast
Om-Beast force-pushed the feat/junie-install-target branch from 885e93c to fb9d9ba Compare July 18, 2026 03:15
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

@Fmarzochi

Copy link
Copy Markdown
Owner

Great work on the email fix, the CLA is green now and the whole pipeline is passing (39/39 checks). You're two small steps from merge, and neither shows up as a red check, so listing them here so they don't get lost:

  1. Revert the yarn.lock changes (instructions in my earlier comment, it's one git checkout upstream/main -- yarn.lock + commit + push).
  2. Add the official Junie doc link to the PR description (the acceptance criteria ask for the page you used to verify the .junie/guidelines.md path).

Once those two land, this gets merged. You've handled every round of feedback fast and precisely, this is exactly how a first contribution should go.

Signed-off-by: Om-Beast <kesharwanio685@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

@sonarqubecloud

Copy link
Copy Markdown

@Om-Beast

Copy link
Copy Markdown
Contributor Author

Thanks Felipe! I have completed all requested changes. The PR is ready for final review.

@Fmarzochi

Copy link
Copy Markdown
Owner

Almost! One truly last thing: the issue's acceptance criteria ask for the official Junie doc link in the PR description (the page you used to verify the .junie/guidelines.md path). Just edit the description and paste it, likely https://www.jetbrains.com/help/junie/customize-guidelines.html or the page you actually used. That's the final box to tick, everything else is done and green.

@Om-Beast

Copy link
Copy Markdown
Contributor Author

Added the official JetBrains Junie documentation link to the PR description as requested. Thanks for the review!

@Fmarzochi Fmarzochi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All acceptance criteria met: adapter mirrors the established pattern, registry/schema/tests complete, integration tiers documented, clean lockfile, CLA signed, full CI matrix green (40/40). Excellent first contribution.

@Fmarzochi
Fmarzochi merged commit 619549e into Fmarzochi:main Jul 18, 2026
40 checks passed
@Fmarzochi

Copy link
Copy Markdown
Owner

Merged! 🎉 Welcome to the EGC contributors, @Om-Beast!

This was a model first contribution: you took every round of feedback (lockfile hygiene, docs contract, CLA identity) and turned each one around fast and precisely. EGC now supports JetBrains Junie as its 20th tool thanks to you.

Your name goes up on the Hall of Fame on the project site shortly. If you want another challenge, keep an eye on the open issues, there are a few with the help wanted label waiting. Hope to see you around!

@Fmarzochi Fmarzochi moved this to Done in EGC Roadmap Jul 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants