)]}'
{
  "log": [
    {
      "commit": "931a84ea3fa3a13d4d6ed491d2f7036071451f6f",
      "tree": "29e9867198708168ccc244c9d7a279d71af21030",
      "parents": [
        "4e40c113124fe94c0402f4563e6d33dd1a8fa700"
      ],
      "author": {
        "name": "Jongyoul Lee",
        "email": "jongyoul@gmail.com",
        "time": "Sat Apr 11 20:35:21 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 11 20:35:21 2026 +0900"
      },
      "message": "[ZEPPELIN-6409][ZEPPELIN-6400] Fix Selenium integration test flakiness after\n\n## Summary\n\n- **`authenticationUser()`**: Replace `sleep(1000)` with explicit wait for the navbar user dropdown to appear (proves login succeeded and AngularJS digest is done), then force-dismiss any lingering Bootstrap modal backdrop via jQuery\n- **`logoutUser()`**: Use `clickableWait()` instead of raw `findElement()` for robust element interaction; wrap modal close button in try-catch\n- **`testAngularRunParagraph()`**: Fix race condition where `waitForParagraph(\"FINISHED\")` matched the *previous* run\u0027s state. Use `stalenessOf` to detect paragraph output refresh, then `visibilityWait` for the new element, and JavaScript click to bypass ng-click overlay issues\n\n## Context\n\nAfter ZEPPELIN-6400 moved `ZeppelinConfiguration` from `zeppelin-interpreter` to `zeppelin-zengine`, `RemoteInterpreterServer.init()` changed from loading config via `ZeppelinConfiguration.load()` + overlay to pure `Properties`-based initialization. This subtle timing change in interpreter startup exposed pre-existing Selenium test flakiness in the `test-selenium-with-spark-module-for-spark-3-5` CI job.\n\nThe CI failures were:\n- `InterpreterModeActionsIT.testPerUserIsolatedAction` — `ElementClickInterceptedException` because login modal was still visible when clicking the navigation dropdown\n- `ZeppelinIT.testAngularRunParagraph` — `TimeoutException` due to race condition: after re-running an Angular paragraph, the old output element was matched before the new one rendered\n\n## Test plan\n\n- [x] CI: `frontend.yml` — `test-selenium-with-spark-module-for-spark-3-5` job passes\n- [x] CI: `frontend.yml` — All other E2E jobs remain green (Playwright auth failure is unrelated Firefox keyboard shortcut flakiness)\n\nCloses #5209 from jongyoul/ZEPPELIN-6409-fix-selenium-tests.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "4e40c113124fe94c0402f4563e6d33dd1a8fa700",
      "tree": "b6dd46123b9aaf062b462ae18aabf62e36ec09fd",
      "parents": [
        "6f6df4cdbf02aa2f8b9731adfe926228aedb9b15"
      ],
      "author": {
        "name": "조형준",
        "email": "ryuu.public@gmail.com",
        "time": "Tue Apr 07 12:56:41 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 12:56:41 2026 +0900"
      },
      "message": "[ZEPPELIN-6410] Fix typo in PythonInterpreter comment: \"sever\" to \"server\"\n\n### What is this PR for?\r\nFix a typo in `PythonInterpreter.java` where the comment reads \"sever\" instead of \"server\".\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n* [x] Fix typo: \"sever\" → \"server\"\r\n\r\n### What is the Jira issue?\r\n* https://issues.apache.org/jira/browse/ZEPPELIN-6410\r\n\r\n### How should this be tested?\r\n* No functional change — comment-only fix. Visual inspection is sufficient.\r\n\r\n### Screenshots (if appropriate)\r\nN/A\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\n\nCloses #5210 from xxxxxxjun/fix-zeppelin-6410.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "6f6df4cdbf02aa2f8b9731adfe926228aedb9b15",
      "tree": "b50ded4dbb49fef017377f190e2539725a23552a",
      "parents": [
        "b4193a072eda5dacae9a7ce29140aa38c21b5c75"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Apr 05 21:49:32 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 05 21:49:32 2026 +0900"
      },
      "message": "Bump requests from 2.32.5 to 2.33.0 in /dev (#5196)\n\nBumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.\n- [Release notes](https://github.com/psf/requests/releases)\n- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)\n- [Commits](https://github.com/psf/requests/compare/v2.32.5...v2.33.0)\n\n---\nupdated-dependencies:\n- dependency-name: requests\n  dependency-version: 2.33.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "b4193a072eda5dacae9a7ce29140aa38c21b5c75",
      "tree": "cb4fd7f30aacac1ea1f217e37252393af7734818",
      "parents": [
        "705110aa120fb9180425252c755d499cf086f5ff"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sun Apr 05 14:59:14 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 05 14:59:14 2026 +0900"
      },
      "message": "[ZEPPELIN-6384] Fix dropdown menu item links not clickable in full area\n\n### What is this PR for?\r\n\r\n#### Summary\r\n\r\n- Fixed dropdown menu items in header where only text was clickable instead of the full item area\r\n- Changed routerLinkActive to nzMatchRouter for proper NG-ZORRO integration\r\n- Added CSS pseudo-element to expand clickable area of anchor tags\r\n\r\n#### Cause\r\n\r\n- Likely due to NG-ZORRO dropdown menu item anchor tag style changes that reduced the clickable area to just the text content.\r\n\r\n#### Changes\r\n\r\n- Updated `header.component.html`: Replace `routerLinkActive` with `nzMatchRouter` directive\r\n- Updated `global.less`: Add `::before` pseudo-element to `.ant-dropdown-menu-item \u003e a` to expand clickable area using absolute positioning\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6384\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5124 from tbonelee/fix-dropdown-link.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "705110aa120fb9180425252c755d499cf086f5ff",
      "tree": "661a19cfde3292a72d6aef52bc878a0f109d95d3",
      "parents": [
        "5e9847b3f510bb6590aeecf8fad98d725f99e4c9"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sun Apr 05 14:57:50 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 05 14:57:50 2026 +0900"
      },
      "message": "[ZEPPELIN-6387] Fix WebSocket reconnection not reloading note in Angular UI\n\n### What is this PR for?\r\nFixes an issue where WebSocket reconnection in the new Angular UI (zeppelin-web-angular) does not reload the current note, causing \"Note is null\" errors when attempting to run paragraphs after reconnection.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6387\r\n\r\n### How should this be tested?\r\n\r\n1. Open any notebook in the new Angular UI.\r\n2. Trigger a WebSocket timeout by switching to another browser tab or window and leaving the Zeppelin tab in the background for a few minutes.\r\n   - Even without interacting with the browser, you can confirm that the WebSocket has reconnected by checking the server logs.\r\n3. Allow the system to automatically reconnect.\r\n4. Try running any paragraph → It should fail before this PR and succeed after applying this PR.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5129 from tbonelee/websocket-reconnection.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "5e9847b3f510bb6590aeecf8fad98d725f99e4c9",
      "tree": "e090171c8a39dff2bdd8ec442d070d7347716a24",
      "parents": [
        "076676aa87f92b052619691c2788bd53771a266e"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Apr 04 21:05:47 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 21:05:47 2026 +0900"
      },
      "message": "[ZEPPELIN-6358] Add E2E test coverage for notebook components\n\n### What is this PR for?\r\nThis is the final PR in the series derived from #5101.\r\n\r\nNotebook features had zero E2E coverage. This adds 20 spec files (~3500 lines).\r\n\r\n**Notebook core**\r\n- `notebook-container` — structure, action bar presence, sidebar width constraints, paragraph grid layout, extension area\r\n- `action-bar-functionality` — run all, code/output toggle, clear output, clone/export/reload, collaboration mode, revision controls, scheduler, settings group\r\n- `notebook-keyboard-shortcuts` — full ShortcutsMap coverage (Monaco editor; serial because Monaco holds focus state between tests — isolating via `beforeEach` wasn\u0027t viable)\r\n- `sidebar-functionality` — TOC panel, file tree panel, open/close state transitions\r\n- `paragraph-functionality` — edit mode, run/cancel, dynamic forms, footer DOM presence\r\n\r\n**Share features**\r\n- `folder-rename` — hover context menu, rename modal, validation, delete confirmation, folder merge on name collision\r\n- `note-rename` — inline title editing, enter/blur/escape flows, empty name rejection, special characters\r\n- `note-toc` — panel open/close, empty state message, toggle button attributes, repeated toggle\r\n\r\n#### Pulled in test failure fixes from #5180                             \r\n- Cleaned up `about-zeppelin-modal` and `note-create-modal` specs and models\r\n- Added missing aria attributes and `data-testid` selectors to `action-bar.component.html`\r\n- Bumped `flatted` 3.3.3 → 3.4.1 (npm audit)\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\nFeature\r\nDocumentation\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6358\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5181 from dididy/e2e/notebook-final.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "076676aa87f92b052619691c2788bd53771a266e",
      "tree": "b71a12c6e653aec8cf5e7600a277282d17dde1c8",
      "parents": [
        "cd8ba63f1c03245ed2cac81b745ecd44795ca420"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Apr 04 21:04:45 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 21:04:45 2026 +0900"
      },
      "message": "[ZEPPELIN-6358] Remove anti-patterns of E2E and tidy test suite\n\n### What is this PR for?\r\nApplied the [`e2e-reviewer`](https://github.com/dididy/e2e-skills) skill on the existing E2E suite. The skill does static analysis — it catches tests that can never actually fail, silent skips, swallowed errors in POM methods, that kind of thing.\r\n\r\nFindings and fixes:\r\n\r\n- `home-page-enhanced-functionality.spec.ts` was mostly duplicating `home-page-elements` and `home-page-note-operations` → deleted and merged\r\n- `toBeGreaterThanOrEqual(0)` and `toBeAttached()` on static elements were always passing → replaced with assertions that can fail\r\n- `if (isVisible) { expect() }` patterns silently skip when something breaks → removed or converted to `test.skip`\r\n- Several POM methods had `.catch(() \u003d\u003e {})` with no comment → removed; kept the intentional ones and marked with `// JUSTIFIED:`\r\n- `document.querySelector` in `page.evaluate()` → swapped for Playwright locator API\r\n- Added `aria-label` / `data-testid` to action bar HTML; a few tests were breaking on DOM structure changes\r\n- Renamed a handful of tests whose names didn\u0027t match what they actually tested; dropped the ones that only called `toBeVisible()`\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\nRefactoring\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6358\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5180 from dididy/tidy-e2e.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "cd8ba63f1c03245ed2cac81b745ecd44795ca420",
      "tree": "e60c8bace72e368ee19517c4f839791ce2b62c08",
      "parents": [
        "221c0c5c3d5adb7056a212fc44316362a63ea140"
      ],
      "author": {
        "name": "Jongyoul Lee",
        "email": "jongyoul@gmail.com",
        "time": "Mon Mar 30 18:06:24 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 18:06:24 2026 +0900"
      },
      "message": "[ZEPPELIN-6404] Fix empty response body handling in merge_pr.py\n\n## Summary\n\n- Fix `JSONDecodeError` when JIRA transition API returns empty response body\n- Return empty dict `{}` instead of attempting to parse empty string\n\n## Context\n\nAfter merging PR #5183, the JIRA resolve step crashed with `JSONDecodeError: Expecting value: line 1 column 1`. The JIRA transition API returns HTTP 204 (No Content) on success, but `_http()` unconditionally called `json.loads()` on the empty body.\n\n## Test plan\n\n- [x] Verified JIRA transition actually succeeded despite the error\n- [ ] Run `python3 dev/merge_pr.py --pr \u003cnumber\u003e --resolve-jira --dry-run` to verify no regression\n\nCloses #5199 from jongyoul/ZEPPELIN-6404-fix-empty-response.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "221c0c5c3d5adb7056a212fc44316362a63ea140",
      "tree": "05eaa5f94c0e1ad2062b0af39ca0b3bf23c50485",
      "parents": [
        "394e24575ca7542f354940185a4a2c68b79b9630"
      ],
      "author": {
        "name": "Jongyoul Lee",
        "email": "jongyoul@gmail.com",
        "time": "Mon Mar 30 13:37:10 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 13:37:10 2026 +0900"
      },
      "message": "[ZEPPELIN-6404] Rewrite merge PR script in Python with no external dependencies\n\n## Summary\n\n- Rewrite `dev/merge_zeppelin_pr.py` as a single-file Python CLI (`dev/merge_pr.py`)\n- No external dependencies — uses only Python 3 built-in libraries (`urllib`, `json`, `subprocess`, `argparse`, `re`)\n- Runs directly with `python3 dev/merge_pr.py --pr \u003cnumber\u003e [flags]`\n- Non-interactive, AI-agent friendly design\n\n## Motivation\n\nThe existing Python merge script (`dev/merge_zeppelin_pr.py`) requires a Python virtual environment with dependencies (`jira`, `python-dotenv`), and is interactive (prompts for user input). This makes it difficult to use from CI/CD or AI agent workflows.\n\nThe new version:\n- Requires only Python 3 (no venv, no pip install)\n- All flags are CLI arguments — no interactive prompts\n- Single file, ~450 lines, zero external dependencies\n- Instance-based design (`MergePR` class)\n\n## Usage\n\n```bash\n# Dry run (shows PR info without merging)\npython3 dev/merge_pr.py --pr 5167 --dry-run\n\n# Merge and resolve JIRA\npython3 dev/merge_pr.py --pr 5167 --resolve-jira --fix-versions 0.13.0\n\n# Merge and cherry-pick into release branches\npython3 dev/merge_pr.py --pr 5167 --release-branches branch-0.12,branch-0.11\n```\n\n## Flags\n\n| Flag | Description |\n|------|-------------|\n| `--pr` | Pull request number (required) |\n| `--target` | Target branch (default: PR base branch) |\n| `--fix-versions` | JIRA fix version(s), comma-separated |\n| `--release-branches` | Release branch(es) to cherry-pick into, comma-separated |\n| `--resolve-jira` | Resolve associated JIRA issue(s) |\n| `--dry-run` | Show what would be done without making changes |\n| `--push-remote` | Git remote for pushing (default: `apache`) |\n\nTokens are read from environment variables: `GITHUB_OAUTH_KEY`, `JIRA_ACCESS_TOKEN`.\n\n## Test Plan\n\n- [x] `python3 dev/merge_pr.py --help` — shows usage\n- [x] `python3 dev/merge_pr.py --pr 5167 --dry-run` — fetches PR info correctly\n- [ ] Full merge test with a real PR\n- [ ] Cherry-pick into release branch test\n- [ ] JIRA resolution test\n\nCloses #5183 from jongyoul/ZEPPELIN-6404-go-merge-cli-v2.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "394e24575ca7542f354940185a4a2c68b79b9630",
      "tree": "f1031abec4675e1c6ab60828c38f8bbfa62cdeb4",
      "parents": [
        "5c35ad9ba2033419bf7e9e0343751d1ce2a360b0"
      ],
      "author": {
        "name": "Jongyoul Lee",
        "email": "jongyoul@gmail.com",
        "time": "Tue Mar 17 14:12:55 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 14:12:55 2026 +0900"
      },
      "message": "[ZEPPELIN-6400] Remove ZeppelinConfiguration dependency from zeppelin-interpreter module\n\n## Summary\n\n- **Move `ZeppelinConfiguration` from `zeppelin-interpreter` to `zeppelin-zengine`** so it is no longer included in the shaded interpreter JAR. This prevents the Maven shade plugin from corrupting config string literals, which caused classpath-order-dependent configuration loading failures.\n- **Replace `ZeppelinConfiguration` usage in `zeppelin-interpreter` with `Properties`-based configuration** across `InterpreterLauncher`, `LifecycleManager`, `RecoveryStorage`, `DependencyResolver`, and all launcher plugins (Docker, K8s, YARN, Flink).\n- **Update callers** in `zeppelin-zengine`, `zeppelin-server`, `flink`, and `markdown` interpreter modules.\n- **Fix `TimeoutLifecycleManager` to parse time unit suffixes** (e.g., `\"10s\"`, `\"1000ms\"`) by adding `parseTimeValue()`. Previously, `Long.parseLong(\"10s\")` threw `NumberFormatException`, causing the `TimeoutLifecycleManagerTest.testTimeout_2` to enter an infinite loop and hang CI for 6 hours.\n- **Fix flaky `PersonalizeActionsIT.testGraphAction` Selenium test** by using `clickAndWait()` instead of `clickableWait().click()`, allowing the UI to update before assertion.\n\n## Motivation\n\n`ZeppelinConfiguration` in `zeppelin-interpreter` gets processed by the Maven shade plugin, which corrupts string literals (e.g., `org.apache.zeppelin` → `unshaded.org.apache.zeppelin`). This causes config keys to mismatch at runtime depending on classpath ordering. Moving it to `zeppelin-zengine` (which is not shaded) permanently eliminates this class of bugs.\n\nAs discussed by the community: *\"ZeppelinConfiguration belongs to the Zeppelin server, and the Zeppelin interpreter should really only work on a HashMap with ConfigKey and ConfigValue.\"*\n\n## Changes\n\n| Area | Change |\n|------|--------|\n| `zeppelin-interpreter` (core) | Remove `ZeppelinConfiguration` imports; use `Properties` for config |\n| `InterpreterLauncher` | `ZeppelinConfiguration zConf` → `Properties zProperties` |\n| `LifecycleManager` / `RecoveryStorage` | Constructor takes `Properties` instead of `ZeppelinConfiguration` |\n| `TimeoutLifecycleManager` | Add `parseTimeValue()` to handle time unit suffixes (`\"10s\"`, `\"1000ms\"`) |\n| `DependencyResolver` | Accept individual config values instead of `ZeppelinConfiguration` |\n| Launcher plugins (7 files) | Updated to `Properties`-based API |\n| `zeppelin-zengine` | `PluginManager` passes derived values (absolute paths) via Properties |\n| `ZeppelinConfiguration.java` | Moved from `zeppelin-interpreter` → `zeppelin-zengine` |\n| `PersonalizeActionsIT` | Fix flaky `testGraphAction` by waiting for UI update after click |\n\n## Future Work\n\nSome logic was duplicated during this refactoring to keep `zeppelin-interpreter` independent of `ZeppelinConfiguration`:\n\n- `TimeoutLifecycleManager.parseTimeValue()` duplicates `ZeppelinConfiguration.timeUnitToMill()` — both parse time strings like `\"10s\"` or `\"1000ms\"` via `Duration.parse(\"PT\" + value)`. A shared utility in `zeppelin-common` could consolidate this in the future.\n- Config key strings (e.g., `\"zeppelin.interpreter.lifecyclemanager.timeout.threshold\"`) are now hardcoded as plain strings in `zeppelin-interpreter` rather than referencing `ConfVars` enum constants. If config key management becomes an issue, a lightweight key constants class could be introduced.\n\n## Test Plan\n\n- [x] CI: `core.yml` - Core module tests (including `TimeoutLifecycleManagerTest`)\n- [x] CI: `core.yml` - Interpreter tests (Spark, Flink)\n- [x] CI: `frontend.yml` - E2E tests (Playwright + Selenium)\n- [x] CI: `quick.yml` - RAT license check\n- [x] Verify shaded JAR does not contain `ZeppelinConfiguration`\n\nCloses #5167 from jongyoul/ZEPPELIN-6400-remove-zepconf-from-interpreter.\n\nSigned-off-by: Jongyoul Lee \u003cjongyoul@gmail.com\u003e"
    },
    {
      "commit": "5c35ad9ba2033419bf7e9e0343751d1ce2a360b0",
      "tree": "d03d4a5b298648a8f22f180ffae5b7eac4b22083",
      "parents": [
        "c9fa525692911908fde47bf5fb9c3d8388220751"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Tue Mar 10 00:23:27 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 00:23:27 2026 +0900"
      },
      "message": "[ZEPPELIN-6358] Fix notebook UI bugs and add aria attributes and test IDs for selectors #5101\n\n### What is this PR for?\r\nThis PR fixes several notebook-related UI issues and improves testability and accessibility.\r\n\r\n### Changes\r\n- Fix an issue where the search menu trigger did not work correctly.\r\n- Prevent folder renaming when the input is empty by disabling the confirm button.\r\n- Add accessibility (ARIA) attributes and test-specific attributes to improve usability and E2E test stability.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\nRefactoring\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6358\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No \r\n\n\nCloses #5133 from dididy/e2e/notebook-bug.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "c9fa525692911908fde47bf5fb9c3d8388220751",
      "tree": "7d822332e9c3f9ae1f5f4be91041cf5fabf3c46c",
      "parents": [
        "1be5c3e70428eb757b9577f40a1a90f7ca82fce1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 09 23:54:57 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 23:54:57 2026 +0900"
      },
      "message": "Bump immutable from 4.3.7 to 4.3.8 in /zeppelin-web-angular\n\nBumps [immutable](https://github.com/immutable-js/immutable-js) from 4.3.7 to 4.3.8.\n- [Release notes](https://github.com/immutable-js/immutable-js/releases)\n- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/immutable-js/immutable-js/compare/v4.3.7...v4.3.8)\n\n---\nupdated-dependencies:\n- dependency-name: immutable\n  dependency-version: 4.3.8\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1be5c3e70428eb757b9577f40a1a90f7ca82fce1",
      "tree": "d3d3bcf36a181001610e5017b1e305f81f472b7d",
      "parents": [
        "08fa86aeab2ccb4837c5b2d19820115acb206672"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Mon Mar 09 23:20:44 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 23:20:44 2026 +0900"
      },
      "message": "[ZEPPELIN-6397] Bump Testcontainers version to 1.21.4\n\n### What is this PR for?\r\n\r\nThis PR bumps the testcontainers minor/patch versions.\r\n\r\n\u003cimg width\u003d\"2156\" height\u003d\"124\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/1db7118f-98f8-490f-863c-dc9eecc6e7dd\" /\u003e\r\n\r\nThe interpreter-test-non-core job has been failing intermittently. Based on the error pattern, this appears related to a compatibility issue between older Testcontainers versions and newer Docker Engine APIs (see: https://github.com/testcontainers/testcontainers-java/issues/11212).\r\n\r\nTestcontainers released a patch to address this, so this PR updates Testcontainers to 1.21.4 (release notes: https://github.com/testcontainers/testcontainers-java/releases/tag/1.21.4).\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?[\r\n* Open an issue on Jira https://issues.apache.org/jira/browse/ZEPPELIN-6397\r\n\r\n### How should this be tested?\r\nCheck `interpreter-test-non-core` job.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5159 from tbonelee/bump-testcontainers-neo4j.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "08fa86aeab2ccb4837c5b2d19820115acb206672",
      "tree": "a01b364f9fe4ca2f01f70900605724b8b7e4a3da",
      "parents": [
        "aaa52286a36e18ee9747546a5c2089d50a402a9a"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Mon Mar 09 23:18:36 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 23:18:36 2026 +0900"
      },
      "message": "[ZEPPELIN-6401] Resolve all npm audit vulnerabilities in zeppelin-react\n\n### What is this PR for?\r\nResolved all 16 npm audit vulnerabilities (8 high, 6 moderate, 2 low) in zeppelin-web-angular/projects/zeppelin-react.\r\n\r\nDirect dependency upgrades:\r\n- webpack 5.88.0 → 5.105.4 (moderate: DOM Clobbering XSS, SSRF)\r\n- webpack-dev-server 4.15.0 → 5.2.3 (moderate: source code theft vulnerability)\r\n- \u003cat\u003eantv/g2plot 2.4.35 → 2.3.32 (high: XSS, Path Traversal)\r\n  - g2plot 2.4.35 pulls in fmin → rollup\u003cat\u003e2.x as transitive dependency, which has 2 high severity vulnerabilities\r\n  - g2plot 2.3.32 does not depend on fmin, so rollup is removed entirely\r\n  - No API breaking changes — Column, Line, Pie, Scatter all available in 2.3.32\r\n- xlsx 0.18.5 → replaced with xlsx-js-style 1.2.0 (high: Prototype Pollution, ReDoS)\r\n  - All versions of xlsx on npm are vulnerable with no patched version available\r\n  - xlsx-js-style is an API-compatible community fork with the vulnerabilities fixed\r\n- \u003cat\u003etypes/xlsx 0.0.36 → removed (no longer needed after xlsx replacement)\r\n\r\nTransitive dependency fixes (via npm audit fix):\r\n- lodash 4.17.21 → 4.17.23 (moderate: Prototype Pollution)\r\n- lodash-es 4.17.21 → 4.17.23 (moderate: Prototype Pollution)\r\n- node-forge 1.3.1 → 1.3.3 (high: ASN.1 vulnerabilities)\r\n- serialize-javascript — resolved via webpack upgrade (high: RCE, dep removed in newer terser-webpack-plugin)\r\n- qs/express/body-parser — audit fix (moderate: DoS)\r\n- ajv — audit fix (moderate: ReDoS)\r\n\r\nConstraints:\r\n- Node 18 environment maintained (serialize-javascript 7.x requires Node \u003e\u003d 20, resolved by upgrading webpack instead)\r\n\r\nVerification:\r\n- npm audit → 0 vulnerabilities\r\n- npm run build → success\r\n\r\nRelated Dependabot PRs (redundant, to be closed):\r\n- #5168, #5169, #5170, #5171, #5172, #5173\r\n\r\n\r\n### What type of PR is it?\r\nHot Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6401\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\n\nCloses #5176 from dididy/fix/zeppelin-react-audit.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "aaa52286a36e18ee9747546a5c2089d50a402a9a",
      "tree": "a7237253d1e3b8bbcd9438fa8f5d75cf4fdd7c6f",
      "parents": [
        "4bde6b27dd8f0b6a79479a84532759d358bc2bd9"
      ],
      "author": {
        "name": "Gyeongtae Park",
        "email": "gyeongtae@apache.org",
        "time": "Mon Mar 09 22:24:30 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 22:24:30 2026 +0900"
      },
      "message": "[ZEPPELIN-6402] Update copyright year to 2026 in NOTICE file\n\n### What is this PR for?\r\nThis PR updates the copyright year range in the NOTICE file from 2015-2025 to 2015-2026 to reflect ongoing development and contributions in 2026.\r\n\r\n### What type of PR is it?\r\nDocumentation\r\n\r\n### Todos\r\n* [x] - Update copyright year in NOTICE file\r\n\r\n### What is the Jira issue?\r\n* https://issues.apache.org/jira/browse/ZEPPELIN-6402\r\n\r\n### How should this be tested?\r\n* Verify that the NOTICE file contains the updated copyright year range \"2015 - 2026\"\r\n* Confirm that no other changes were made to the NOTICE file\r\n\r\n### Screenshots (if appropriate)\r\nN/A\r\n\r\n### Questions:\r\n* Does the license files need to update? No.\r\n* Is there breaking changes for older versions? No.\r\n* Does this needs documentation? No.\n\nCloses #5177 from ParkGyeongTae/ZEPPELIN-6402.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "4bde6b27dd8f0b6a79479a84532759d358bc2bd9",
      "tree": "fc3636f05fd02011791e5cfef0ade3a84bceeddd",
      "parents": [
        "c3ccd9b4dd40eac2fc7500ae15b71cbee9384cd5"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Mar 07 01:30:16 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 07 01:30:16 2026 +0900"
      },
      "message": "[ZEPPELIN-6371] Convert published paragraph rendering to Micro Frontend(Angular to React) in New UI\n\n### What is this PR for?\r\n\r\n[Micro Frontend Migration(Angular to React) Proposal](https://cwiki.apache.org/confluence/display/ZEPPELIN/Micro+Frontend+Migration%28Angular+to+React%29+Proposal)\r\n\r\n---\r\n\r\n#### Summary\r\n\r\n* Implement React-based micro-frontend architecture using Module Federation.\r\n* Convert published paragraph component to support React rendering.\r\n* Add environment-based configuration for development and production builds.\r\n\r\n#### Changes\r\n\r\n**1. React Micro-Frontend Project Setup**\r\n\r\n* Created new React project at `projects/zeppelin-react/`.\r\n* Configured Webpack Module Federation for micro-frontend architecture.\r\n* Set up React 18 with TypeScript support.\r\n\r\n**2. Component Implementation**\r\n\r\n*New React Components:*\r\n\r\n* `PublishedParagraph`: Main entry point for published paragraph rendering.\r\n* `SingleResultRenderer`: Template for rendering single paragraph results.\r\n\r\n*Renderers:*\r\n\r\n* `HTMLRenderer`: Renders HTML content with sanitization.\r\n* `TextRenderer`: Renders plain text with ANSI support.\r\n* `ImageRenderer`: Renders image outputs.\r\n\r\n*Visualizations:*\r\n\r\n* `TableVisualization`: Table rendering with sorting, filtering, and export.\r\n* `VisualizationControls`: Control panel for table operations.\r\n\r\n*Common Components:*\r\n\r\n* `Loading`: Loading state indicator.\r\n* `Empty`: Empty state display.\r\n\r\n**3. Angular Integration**\r\n\r\n* `paragraph.component.ts`: Added React widget loading logic via Module Federation.\r\n* `paragraph.component.html`: Added React container element.\r\n* `environment.ts` / `environment.prod.ts`: Added `reactRemoteEntryUrl` configuration.\r\n\r\n  * Development: `http://localhost:3001/remoteEntry.js`\r\n  * Production: `/assets/react/remoteEntry.js`\r\n\r\n**4. Build Configuration**\r\n\r\n* `angular.json`: Copy React build output to `/assets/react/`.\r\n* `webpack.config.js`: Configured Module Federation plugin:\r\n\r\n  * Dev server: port 3001\r\n  * CORS headers for cross-origin requests\r\n  * Environment-specific `publicPath`\r\n* `proxy.conf.js`: Updated proxy configuration.\r\n\r\n**5. Package**\r\n\r\n* Added React and React-DOM dependencies.\r\n* Added Webpack and Module Federation plugins.\r\n* Added Ant Design for React UI components.\r\n* Added \u003cat\u003eantv/g2plot for data visualization (also used in Angular version with G2).\r\n\r\n#### License\r\nThis PR uses several open-source libraries. The `xlsx` (v0.18.5) and `typescript` (v4.6.4) packages are licensed under **Apache-2.0**, while all other dependencies and devDependencies (such as `react`, `react-dom`, `antd`, `\u003cat\u003eant-design/icons`, etc.) are licensed under **MIT**. The MIT license is more permissive than Apache-2.0, so including MIT-licensed packages does not violate Apache-2.0 terms. All packages may be used commercially, and license notices should be included when distributing the project.\r\n\r\n#### Technical Details\r\n\r\n**Module Federation Configuration**\r\n\r\n```ts\r\n// Development: http://localhost:3001/remoteEntry.js\r\n// Production: /assets/react/remoteEntry.js\r\n\r\nnew ModuleFederationPlugin({\r\n  name: \u0027reactApp\u0027,\r\n  filename: \u0027remoteEntry.js\u0027,\r\n  exposes: {\r\n    \u0027./PublishedParagraph\u0027: \u0027./src/pages/PublishedParagraph\u0027\r\n  }\r\n})\r\n```\r\n\r\n#### Usage\r\n\r\n* Render published paragraph with React:\r\n  `/notebook/{noteId}/paragraph/{paragraphId}?react\u003dtrue`\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6371\r\n\r\n### How should this be tested?\r\n\r\n```sh\r\n// Start Zeppelin Server\r\n./mvnw clean install -DskipTests\r\n./mvnw clean package -DskipTests\r\n./bin/zeppelin-daemon.sh start\r\n\r\n// Start Zeppelin New UI Client\r\ncd zeppelin-web-angular\r\nnvm use\r\nnpm i\r\nnpm run start\r\n```\r\n\r\n#### TextRenderer\r\nhttp://localhost:4200/#/notebook/2EYDJKFFY/paragraph/20180118-122136_1299905608?react\u003dtrue\r\n\r\n#### TableVisualization\r\nhttp://localhost:4200/#/notebook/2EYDJKFFY/paragraph/20180118-122136_1299905608?react\u003dtrue\r\n\r\n#### ImageRenderer\r\nhttp://localhost:4200/#/notebook/2F1S9ZY8Z/paragraph/20180117-220535_590781730?react\u003dtrue\r\n\r\n#### HTMLRenderer - Table\r\nhttp://localhost:4200/#/notebook/2F1S9ZY8Z/paragraph/paragraph_1580885453474_1167659991?react\u003dtrue\r\n\r\n#### HTMLRenderer - Script(Bokeh JS)\r\nhttp://localhost:4200/#/notebook/2F1S9ZY8Z/paragraph/paragraph_1580885707198_-1652524072?react\u003dtrue\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5111 from dididy/feature/micro-frontend.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "c3ccd9b4dd40eac2fc7500ae15b71cbee9384cd5",
      "tree": "fff4b4bc007df54d01796632fc6046654737ef97",
      "parents": [
        "cf766dbcbc0373be73424b0ce8859d5bb747c948"
      ],
      "author": {
        "name": "Prabhjyot Singh",
        "email": "prabhjyotsingh@gmail.com",
        "time": "Sun Mar 01 08:54:45 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 01 22:54:45 2026 +0900"
      },
      "message": "[ZEPPELIN-6162] Implement revisions comparator for New UI\n\n### What is this PR for?\r\nPort the revision comparison feature from the legacy AngularJS UI to the new Angular 13 frontend. Users can now select two revisions and view paragraph-by-paragraph diffs with color-coded additions and deletions.\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n\r\n### What is the Jira issue?\r\n* https://issues.apache.org/jira/browse/ZEPPELIN-6162\r\n\r\n### How should this be tested?\r\n* Strongly recommended: add automated unit tests for any new or changed behavior\r\n* Outline any manual steps to test the PR here.\r\n\r\n### Screenshots (if appropriate)\r\n![ZEPPELIN-6162](https://github.com/user-attachments/assets/483c05e1-9fa0-4347-8f50-21d0fbd90db2)\r\n\r\n\r\n### Questions:\r\n* Does the license files need to update? no\r\n* Is there breaking changes for older versions? no\r\n* Does this needs documentation? no\r\n\n\nCloses #5155 from prabhjyotsingh/ZEPPELIN-6162.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "cf766dbcbc0373be73424b0ce8859d5bb747c948",
      "tree": "77abb807807f10c311db891501ee597f695d6599",
      "parents": [
        "776e29c89f4e1d47a89bd09c9a467acb0dce3767"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Thu Feb 26 09:52:16 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 09:52:16 2026 +0900"
      },
      "message": "[ZEPPELIN-6373] Add E2E tests about share area\n\n### What is this PR for?\r\nABOUT_ZEPPELIN:\u0027src/app/share/about-zeppelin/about-zeppelin.component\u0027,\r\nCODE_EDITOR:\u0027src/app/share/code-editor/code-editor.component\u0027,\r\nFOLDER_RENAME:\u0027src/app/share/folder-rename/folder-rename.component\u0027,\r\nHEADER:\u0027src/app/share/header/header.component\u0027,\r\nNODE_LIST:\u0027src/app/share/node-list/node-list.component\u0027,\r\nNOTE_CREATE:\u0027src/app/share/note-create/note-create.component\u0027,\r\nNOTE_IMPORT:\u0027src/app/share/note-import/note-import.component\u0027,\r\nNOTE_RENAME:\u0027src/app/share/note-rename/note-rename.component\u0027,\r\nNOTE_TOC:\u0027src/app/share/note-toc/note-toc.component\u0027,\r\nPAGE_HEADER:\u0027src/app/share/page-header/page-header.component\u0027,\r\nRESIZE_HANDLE:\u0027src/app/share/resize-handle/resize-handle.component\u0027,\r\nSHORTCUT:\u0027src/app/share/shortcut/shortcut.component\u0027,\r\nSPIN:\u0027src/app/share/spin/spin.component\u0027,\r\nTHEME_TOGGLE:\u0027src/app/share/theme-toggle/theme-toggle.component\u0027\r\n\r\n### What type of PR is it?\r\nImprovement\r\n*Please leave your type of PR only*\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6373\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No \r\n\n\nCloses #5114 from dididy/e2e/share.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "776e29c89f4e1d47a89bd09c9a467acb0dce3767",
      "tree": "4623f8025002a80538275655cfd0d9222ad269bf",
      "parents": [
        "1662cbdaf057d375d34cf911cb5a96a03744cd71"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Thu Feb 26 00:19:36 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 00:19:36 2026 +0900"
      },
      "message": "[ZEPPELIN-6398] Fix Selenium-based integration tests\n\n### What is this PR for?\r\n\r\nSelenium-based integration tests have been failing recently. \r\n\r\nThere were several issues:\r\n\r\n- The Chrome/Edge driver had a bug related to calling window.maximize(). Since a fixed window size is sufficient for our tests, I replaced it with a method that sets a fixed window size instead.\r\n- The element wait logic was not properly separated by intent, which caused unintended test failures. I refactored the wait methods to distinguish between presence, visibility, and clickability.\r\n- Browser built-in features such as the password manager could trigger alert dialogs that block test execution, so these have been disabled.\r\n\r\nPreviously, we switched to EdgeDriver (also Chromium-based) to work around the window.maximize() bug, but the same issue occurred. Therefore, I reverted back to ChromeDriver.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\n\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6398\r\n\r\n### How should this be tested?\r\n- Check `test-selenium-with-spark-module-for-spark-3-5` job\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5160 from tbonelee/fix-selenium-edge.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "1662cbdaf057d375d34cf911cb5a96a03744cd71",
      "tree": "e904e7d41d5c28fc89c16d5fe838f192dcdd439d",
      "parents": [
        "8251dc4e013cde02879d186240155da8f996bdb7"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Feb 22 20:40:14 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 22 20:40:14 2026 +0900"
      },
      "message": "[ZEPPELIN-6358] simplify utils, promote POM usage, and consolidate base logic from #5101\n\n### What is this PR for?\r\n\r\n### PR Description\r\n\r\nThis PR improves the readability and maintainability of the E2E notebook tests.\r\n\r\n- Removed over-abstracted util and wrapper methods\r\n- Moved test logic from util files into the test cases\r\n- Simplified page objects to focus on direct UI interactions\r\n- Consolidated shared logic into a base page class\r\n\r\nAs a result, the tests are clearer, flatter, and easier to maintain.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6358\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5131 from dididy/e2e/notebook-edited.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "8251dc4e013cde02879d186240155da8f996bdb7",
      "tree": "a172af97f7144ae60e1ee9da41671fc1aeb192c2",
      "parents": [
        "a041703dd76d6cee15a8c9c4bc6ad6d0d4767ebf"
      ],
      "author": {
        "name": "SeungYoung Oh",
        "email": "seung-00@naver.com",
        "time": "Thu Jan 22 15:49:09 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 22 15:49:09 2026 +0900"
      },
      "message": "[ZEPPELIN-6366] Separate WebSocket max message size into a dedicated REST API\n\n### What is this PR for?\r\nCurrently, configuration data is fetched through both REST API and WebSocket channels. However, the WebSocket path does not perform permission checks, and the only required data from it is the WebSocket max message size. \r\n\r\nI extracted the websocket max message size field into a dedicated REST API, to improve security and simplify configuration handling.\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n* [ ] #5060\r\n\r\n### What is the Jira issue?\r\n* Open an issue on Jira https://issues.apache.org/jira/browse/ZEPPELIN/6366\r\n\r\n### How should this be tested?\r\n- Check the configuration page (/configuration)\r\n- Check the notebook page (/notebook/{notebook_id})\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? Y\r\n* Does this needs documentation? N\r\n\n\nCloses #5099 from seung-00/feature/ZEPPELIN-6366.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "a041703dd76d6cee15a8c9c4bc6ad6d0d4767ebf",
      "tree": "006c073f4cff0287c08e99dae5f31517f54aac1c",
      "parents": [
        "27be0623c26becee3643f3504ec159604e940519"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Dec 28 21:25:38 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Dec 28 21:25:38 2025 +0900"
      },
      "message": "[ZEPPELIN-6358] Seperate environment config and shared utilities from #5101\n\n### What is this PR for?\r\nIn #5101, the amount of changes became too large, and a committer suggested splitting it into smaller parts. Since the updates related to the common test environment and shared utility functions have already proven to be stable, I separated those pieces into this dedicated PR.\r\n\r\nThis PR includes only the **safe, standalone changes** that improve the shared E2E environment and utilities.\r\n\r\n#### [Summary of Changes]\r\n* **Refined and separated E2E test environment setup**\r\n  * Improved global setup/teardown\r\n    * CI: using ZEPPELIN_E2E_TEST_NOTEBOOK_DIR\r\n    * To use `ZEPPELIN_E2E_TEST_NOTEBOOK_DIR` locally, the server has to be restarted at least once, which feels a bit odd to enforce during E2E test execution. To make things less messy from a UI perspective, I reorganized the structure so that all tests are collected under `E2E_TEST_FOLDER` instead.\r\n\r\n  * Added folder/notebook initialization and cleanup logic\r\n    * you can run it standalone with this command:`npm run e2e:cleanup`(automatically run this once the tests are finished)\r\n\r\n* **Extracted shared utilities and constants**\r\n  * Added common E2E constant (e.g., `E2E_TEST_FOLDER`)\r\n  * Introduced cleanup utilities to ensure stable post-test state\r\n\r\n* **Updated GitHub Actions (`frontend.yml`)**\r\n  * Added environment variables(for python interpreter), notebook repo initialization, and cleanup steps\r\n  * Due to potential storage and cost concerns, I shortened the retention period for the `Playwright report` from 30 days to 3 days\r\n\r\n* **Updated Playwright / ESLint configurations**\r\n  * ts to cjs\r\n\r\n### What type of PR is it?\r\nImprovement\r\nRefactoring\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6358\r\n\r\n### How should this be tested?\r\n```sh\r\ncd zeppelin-web-angular\r\nnvm use\r\nnpm run start\r\nnpm run e2e\r\nnpm run e2e:cleanup\r\n```\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5128 from dididy/e2e/notebook-base.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "27be0623c26becee3643f3504ec159604e940519",
      "tree": "24a440906ab3b4155b3a6aeebb333f6bcb25b6f1",
      "parents": [
        "88521103ffcafee094705f3df6f30fde5c1ea21a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Dec 09 13:37:51 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 09 13:37:51 2025 +0800"
      },
      "message": "Bump Jersey from 3.1.9 to 3.1.10\n\nFix CVE-2025-12383\n"
    },
    {
      "commit": "88521103ffcafee094705f3df6f30fde5c1ea21a",
      "tree": "2b6cd2eebbeeb1a3821922af0da4098a823608ef",
      "parents": [
        "43ea5a4351ddaa9829216c6901b93fe750c82b8d"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Tue Dec 02 17:47:38 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 02 17:47:38 2025 +0900"
      },
      "message": "[ZEPPELIN-6382] Add configuration to remove unused variables, parameters, and imports for New UI\n\n### What is this PR for?\r\n- Enforced unused-variable checks via ESLint (\u003cat\u003etypescript-eslint/no-unused-vars).\r\n- Activated strict TypeScript checks in E2E tests (noUnusedLocals, noUnusedParameters).\r\n- Apply eslint, tsc\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6382\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5123 from dididy/fix/unused-part.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "43ea5a4351ddaa9829216c6901b93fe750c82b8d",
      "tree": "a20bb31472479b52e29559927eaa2336115c0ccf",
      "parents": [
        "7e944d479b17b8481d39f01617e2e35b9bcf208a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Nov 28 13:23:47 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 28 13:23:47 2025 +0900"
      },
      "message": "Bump node-forge from 1.3.1 to 1.3.2 in /zeppelin-web-angular\n\nBumps [node-forge](https://github.com/digitalbazaar/forge) from 1.3.1 to 1.3.2.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md\"\u003enode-forge\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.3.2 - 2025-11-25\u003c/h2\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHIGH\u003c/strong\u003e: ASN.1 Validator Desynchronization\n\u003cul\u003e\n\u003cli\u003eAn Interpretation Conflict (CWE-436) vulnerability in node-forge versions\n1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1\nstructures to desynchronize schema validations, yielding a semantic\ndivergence that may bypass downstream cryptographic verifications and\nsecurity decisions.\u003c/li\u003e\n\u003cli\u003eReported by Hunter Wodzenski.\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca href\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2025-12816\"\u003eCVE-2025-12816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca href\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-5gfm-wpxj-wjgq\"\u003eGHSA-5gfm-wpxj-wjgq\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHIGH\u003c/strong\u003e: ASN.1 Unbounded Recursion\n\u003cul\u003e\n\u003cli\u003eAn Uncontrolled Recursion (CWE-674) vulnerability in node-forge versions\n1.3.1 and below enables remote, unauthenticated attackers to craft deep\nASN.1 structures that trigger unbounded recursive parsing. This leads to a\nDenial-of-Service (DoS) via stack exhaustion when parsing untrusted DER\ninputs.\u003c/li\u003e\n\u003cli\u003eReported by Hunter Wodzenski.\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca href\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2025-66031\"\u003eCVE-2025-66031\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca href\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-554w-wpv2-vw27\"\u003eGHSA-554w-wpv2-vw27\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMODERATE\u003c/strong\u003e: ASN.1 OID Integer Truncation\n\u003cul\u003e\n\u003cli\u003eAn Integer Overflow (CWE-190) vulnerability in node-forge versions 1.3.1\nand below enables remote, unauthenticated attackers to craft ASN.1\nstructures containing OIDs with oversized arcs. These arcs may be decoded\nas smaller, trusted OIDs due to 32-bit bitwise truncation, enabling the\nbypass of downstream OID-based security decisions.\u003c/li\u003e\n\u003cli\u003eReported by Hunter Wodzenski.\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca href\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2025-66030\"\u003eCVE-2025-66030\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca href\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-65ch-62r8-g69g\"\u003eGHSA-65ch-62r8-g69g\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[asn1] Fix for vulnerability identified by CVE-2025-12816 PKCS#12 MAC\nverification bypass due to missing macData enforcement and improper\nasn1.validate routine.\u003c/li\u003e\n\u003cli\u003e[asn1] Add \u003ccode\u003efromDer()\u003c/code\u003e max recursion depth check.\n\u003cul\u003e\n\u003cli\u003eAdd a \u003ccode\u003easn1.maxDepth\u003c/code\u003e global configurable maximum depth of 256.\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003easn1.fromDer()\u003c/code\u003e per-call \u003ccode\u003emaxDepth\u003c/code\u003e option.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNOTE\u003c/strong\u003e: The default maximum is assumed to be higher than needed for valid\ndata. If this assumption is false then this could be a breaking change.\nPlease file an issue if there are use cases that need a higher maximum.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNOTE\u003c/strong\u003e: The per-call \u003ccode\u003emaxDepth\u003c/code\u003e parameter has not been exposed up through\nall of the API stack due to the complexities involved. Please file an issue\nif there are use cases that require this instead of changing the default\nmaximum.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e[asn1] Improve OID handling.\n\u003cul\u003e\n\u003cli\u003eError on parsed OID values larger than \u003ccode\u003e2**32 - 1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eError on DER OID values larger than \u003ccode\u003e2**53 - 1 \u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/235ad3e70e4fdfdca4fdeb662dfba6588e2c38bd\"\u003e\u003ccode\u003e235ad3e\u003c/code\u003e\u003c/a\u003e Release 1.3.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/25982441171dc9815c87d3d886c5c8a1d092b334\"\u003e\u003ccode\u003e2598244\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/0032dd0be8b6fb1b1092ef754d1dde91c10a95ad\"\u003e\u003ccode\u003e0032dd0\u003c/code\u003e\u003c/a\u003e Fix typos.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/d75e08d255559ae401d9368346cacefde306e6df\"\u003e\u003ccode\u003ed75e08d\u003c/code\u003e\u003c/a\u003e Run new security test.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/a5ce91d03df4dcfc025b74a5b7f50389942d49c9\"\u003e\u003ccode\u003ea5ce91d\u003c/code\u003e\u003c/a\u003e Update changelog formatting.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/4652de6ddd833392e52d99b37abbbda76817c0b7\"\u003e\u003ccode\u003e4652de6\u003c/code\u003e\u003c/a\u003e Cleanups.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/eb932d94fbd88655f46ac7a94a8e13e7ed8597f7\"\u003e\u003ccode\u003eeb932d9\u003c/code\u003e\u003c/a\u003e Fix typo.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/db6954ba4b4440831a5112dea5d37ef68a28b878\"\u003e\u003ccode\u003edb6954b\u003c/code\u003e\u003c/a\u003e Fix style.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/afbf7d8e0812014da134caa5a064cf55d1f61847\"\u003e\u003ccode\u003eafbf7d8\u003c/code\u003e\u003c/a\u003e Align error message style.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/digitalbazaar/forge/commit/6607445859637442cf586eaa7fa06e99a2a8ae0b\"\u003e\u003ccode\u003e6607445\u003c/code\u003e\u003c/a\u003e Revert minor changes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/digitalbazaar/forge/compare/v1.3.1...v1.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dnode-forge\u0026package-manager\u003dnpm_and_yarn\u0026previous-version\u003d1.3.1\u0026new-version\u003d1.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `\u003cat\u003edependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `\u003cat\u003edependabot rebase` will rebase this PR\n- `\u003cat\u003edependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `\u003cat\u003edependabot merge` will merge this PR after your CI passes on it\n- `\u003cat\u003edependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `\u003cat\u003edependabot cancel merge` will cancel a previously requested merge and block automerging\n- `\u003cat\u003edependabot reopen` will reopen this PR if it is closed\n- `\u003cat\u003edependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `\u003cat\u003edependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `\u003cat\u003edependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `\u003cat\u003edependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `\u003cat\u003edependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/apache/zeppelin/network/alerts).\n\n\u003c/details\u003e\n\nCloses #5121 from dependabot[bot]/dependabot/npm_and_yarn/zeppelin-web-angular/node-forge-1.3.2.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "7e944d479b17b8481d39f01617e2e35b9bcf208a",
      "tree": "c8e5da0b2753a8c78c0a820957837427768283e4",
      "parents": [
        "3e56d81b808620a2ee04889cd282e2d248028efe"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Nov 27 23:00:44 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 27 23:00:44 2025 +0900"
      },
      "message": "Bump js-yaml in /zeppelin-web-angular\n\nBumps  and [js-yaml](https://github.com/nodeca/js-yaml). These dependencies needed to be updated together.\nUpdates `js-yaml` from 3.14.1 to 3.14.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md\"\u003ejs-yaml\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[3.14.2] - 2025-11-15\u003c/h2\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBackported v4.1.1 fix to v3\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.1.1] - 2025-11-12\u003c/h2\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix prototype pollution issue in yaml merge (\u0026lt;\u0026lt;) operator.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.1.0] - 2021-04-15\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTypes are now exported as \u003ccode\u003eyaml.types.XXX\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eEvery type now has \u003ccode\u003eoptions\u003c/code\u003e property with original arguments kept as they were\n(see \u003ccode\u003eyaml.types.int.options\u003c/code\u003e as an example).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSchema.extend()\u003c/code\u003e now keeps old type order in case of conflicts\n(e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as \u003ccode\u003eabcd\u003c/code\u003e instead of \u003ccode\u003ecbad\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.0.0] - 2021-01-03\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck \u003ca href\u003d\"https://github.com/nodeca/js-yaml/blob/master/migrate_v3_to_v4.md\"\u003emigration guide\u003c/a\u003e to see details for all breaking changes.\u003c/li\u003e\n\u003cli\u003eBreaking: \u0026quot;unsafe\u0026quot; tags \u003ccode\u003e!!js/function\u003c/code\u003e, \u003ccode\u003e!!js/regexp\u003c/code\u003e, \u003ccode\u003e!!js/undefined\u003c/code\u003e are\nmoved to \u003ca href\u003d\"https://github.com/nodeca/js-yaml-js-types\"\u003ejs-yaml-js-types\u003c/a\u003e package.\u003c/li\u003e\n\u003cli\u003eBreaking: removed \u003ccode\u003esafe*\u003c/code\u003e functions. Use \u003ccode\u003eload\u003c/code\u003e, \u003ccode\u003eloadAll\u003c/code\u003e, \u003ccode\u003edump\u003c/code\u003e\ninstead which are all now safe by default.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eyaml.DEFAULT_SAFE_SCHEMA\u003c/code\u003e and \u003ccode\u003eyaml.DEFAULT_FULL_SCHEMA\u003c/code\u003e are removed, use\n\u003ccode\u003eyaml.DEFAULT_SCHEMA\u003c/code\u003e instead.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eyaml.Schema.create(schema, tags)\u003c/code\u003e is removed, use \u003ccode\u003eschema.extend(tags)\u003c/code\u003e instead.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e!!binary\u003c/code\u003e now always mapped to \u003ccode\u003eUint8Array\u003c/code\u003e on load.\u003c/li\u003e\n\u003cli\u003eReduced nesting of \u003ccode\u003e/lib\u003c/code\u003e folder.\u003c/li\u003e\n\u003cli\u003eParse numbers according to YAML 1.2 instead of YAML 1.1 (\u003ccode\u003e01234\u003c/code\u003e is now decimal,\n\u003ccode\u003e0o1234\u003c/code\u003e is octal, \u003ccode\u003e1:23\u003c/code\u003e is parsed as string instead of base60).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edump()\u003c/code\u003e no longer quotes \u003ccode\u003e:\u003c/code\u003e, \u003ccode\u003e[\u003c/code\u003e, \u003ccode\u003e]\u003c/code\u003e, \u003ccode\u003e(\u003c/code\u003e, \u003ccode\u003e)\u003c/code\u003e except when necessary, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/470\"\u003e#470\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/557\"\u003e#557\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eLine and column in exceptions are now formatted as \u003ccode\u003e(X:Y)\u003c/code\u003e instead of\n\u003ccode\u003eat line X, column Y\u003c/code\u003e (also present in compact format), \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/332\"\u003e#332\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCode snippet created in exceptions now contains multiple lines with line numbers.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edump()\u003c/code\u003e now serializes \u003ccode\u003eundefined\u003c/code\u003e as \u003ccode\u003enull\u003c/code\u003e in collections and removes keys with\n\u003ccode\u003eundefined\u003c/code\u003e in mappings, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/571\"\u003e#571\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edump()\u003c/code\u003e with \u003ccode\u003eskipInvalid\u003dtrue\u003c/code\u003e now serializes invalid items in collections as null.\u003c/li\u003e\n\u003cli\u003eCustom tags starting with \u003ccode\u003e!\u003c/code\u003e are now dumped as \u003ccode\u003e!tag\u003c/code\u003e instead of \u003ccode\u003e!\u0026lt;!tag\u0026gt;\u003c/code\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/576\"\u003e#576\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCustom tags starting with \u003ccode\u003etag:yaml.org,2002:\u003c/code\u003e are now shorthanded using \u003ccode\u003e!!\u003c/code\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/258\"\u003e#258\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e.mjs\u003c/code\u003e (es modules) support.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003equotingType\u003c/code\u003e and \u003ccode\u003eforceQuotes\u003c/code\u003e options for dumper to configure\nstring literal style, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/290\"\u003e#290\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/529\"\u003e#529\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003estyles: { \u0027!!null\u0027: \u0027empty\u0027 }\u003c/code\u003e option for dumper\n(serializes \u003ccode\u003e{ foo: null }\u003c/code\u003e as \u0026quot;\u003ccode\u003efoo: \u003c/code\u003e\u0026quot;), \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/570\"\u003e#570\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nodeca/js-yaml/commit/9963d366dfbde0c69722452bcd40b41e7e4160a0\"\u003e\u003ccode\u003e9963d36\u003c/code\u003e\u003c/a\u003e 3.14.2 released\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nodeca/js-yaml/commit/10d3c8e70a6888543f5cdb656bb39f73e0ea77c1\"\u003e\u003ccode\u003e10d3c8e\u003c/code\u003e\u003c/a\u003e dist rebuild\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nodeca/js-yaml/commit/5278870a17454fe8621dbd8c445c412529525266\"\u003e\u003ccode\u003e5278870\u003c/code\u003e\u003c/a\u003e fix prototype pollution in merge (\u0026lt;\u0026lt;) (\u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `js-yaml` from 4.1.0 to 4.1.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md\"\u003ejs-yaml\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[3.14.2] - 2025-11-15\u003c/h2\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBackported v4.1.1 fix to v3\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.1.1] - 2025-11-12\u003c/h2\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix prototype pollution issue in yaml merge (\u0026lt;\u0026lt;) operator.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.1.0] - 2021-04-15\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTypes are now exported as \u003ccode\u003eyaml.types.XXX\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eEvery type now has \u003ccode\u003eoptions\u003c/code\u003e property with original arguments kept as they were\n(see \u003ccode\u003eyaml.types.int.options\u003c/code\u003e as an example).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSchema.extend()\u003c/code\u003e now keeps old type order in case of conflicts\n(e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as \u003ccode\u003eabcd\u003c/code\u003e instead of \u003ccode\u003ecbad\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.0.0] - 2021-01-03\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck \u003ca href\u003d\"https://github.com/nodeca/js-yaml/blob/master/migrate_v3_to_v4.md\"\u003emigration guide\u003c/a\u003e to see details for all breaking changes.\u003c/li\u003e\n\u003cli\u003eBreaking: \u0026quot;unsafe\u0026quot; tags \u003ccode\u003e!!js/function\u003c/code\u003e, \u003ccode\u003e!!js/regexp\u003c/code\u003e, \u003ccode\u003e!!js/undefined\u003c/code\u003e are\nmoved to \u003ca href\u003d\"https://github.com/nodeca/js-yaml-js-types\"\u003ejs-yaml-js-types\u003c/a\u003e package.\u003c/li\u003e\n\u003cli\u003eBreaking: removed \u003ccode\u003esafe*\u003c/code\u003e functions. Use \u003ccode\u003eload\u003c/code\u003e, \u003ccode\u003eloadAll\u003c/code\u003e, \u003ccode\u003edump\u003c/code\u003e\ninstead which are all now safe by default.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eyaml.DEFAULT_SAFE_SCHEMA\u003c/code\u003e and \u003ccode\u003eyaml.DEFAULT_FULL_SCHEMA\u003c/code\u003e are removed, use\n\u003ccode\u003eyaml.DEFAULT_SCHEMA\u003c/code\u003e instead.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eyaml.Schema.create(schema, tags)\u003c/code\u003e is removed, use \u003ccode\u003eschema.extend(tags)\u003c/code\u003e instead.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e!!binary\u003c/code\u003e now always mapped to \u003ccode\u003eUint8Array\u003c/code\u003e on load.\u003c/li\u003e\n\u003cli\u003eReduced nesting of \u003ccode\u003e/lib\u003c/code\u003e folder.\u003c/li\u003e\n\u003cli\u003eParse numbers according to YAML 1.2 instead of YAML 1.1 (\u003ccode\u003e01234\u003c/code\u003e is now decimal,\n\u003ccode\u003e0o1234\u003c/code\u003e is octal, \u003ccode\u003e1:23\u003c/code\u003e is parsed as string instead of base60).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edump()\u003c/code\u003e no longer quotes \u003ccode\u003e:\u003c/code\u003e, \u003ccode\u003e[\u003c/code\u003e, \u003ccode\u003e]\u003c/code\u003e, \u003ccode\u003e(\u003c/code\u003e, \u003ccode\u003e)\u003c/code\u003e except when necessary, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/470\"\u003e#470\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/557\"\u003e#557\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eLine and column in exceptions are now formatted as \u003ccode\u003e(X:Y)\u003c/code\u003e instead of\n\u003ccode\u003eat line X, column Y\u003c/code\u003e (also present in compact format), \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/332\"\u003e#332\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCode snippet created in exceptions now contains multiple lines with line numbers.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edump()\u003c/code\u003e now serializes \u003ccode\u003eundefined\u003c/code\u003e as \u003ccode\u003enull\u003c/code\u003e in collections and removes keys with\n\u003ccode\u003eundefined\u003c/code\u003e in mappings, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/571\"\u003e#571\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edump()\u003c/code\u003e with \u003ccode\u003eskipInvalid\u003dtrue\u003c/code\u003e now serializes invalid items in collections as null.\u003c/li\u003e\n\u003cli\u003eCustom tags starting with \u003ccode\u003e!\u003c/code\u003e are now dumped as \u003ccode\u003e!tag\u003c/code\u003e instead of \u003ccode\u003e!\u0026lt;!tag\u0026gt;\u003c/code\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/576\"\u003e#576\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCustom tags starting with \u003ccode\u003etag:yaml.org,2002:\u003c/code\u003e are now shorthanded using \u003ccode\u003e!!\u003c/code\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/258\"\u003e#258\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e.mjs\u003c/code\u003e (es modules) support.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003equotingType\u003c/code\u003e and \u003ccode\u003eforceQuotes\u003c/code\u003e options for dumper to configure\nstring literal style, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/290\"\u003e#290\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/529\"\u003e#529\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003estyles: { \u0027!!null\u0027: \u0027empty\u0027 }\u003c/code\u003e option for dumper\n(serializes \u003ccode\u003e{ foo: null }\u003c/code\u003e as \u0026quot;\u003ccode\u003efoo: \u003c/code\u003e\u0026quot;), \u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/570\"\u003e#570\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nodeca/js-yaml/commit/9963d366dfbde0c69722452bcd40b41e7e4160a0\"\u003e\u003ccode\u003e9963d36\u003c/code\u003e\u003c/a\u003e 3.14.2 released\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nodeca/js-yaml/commit/10d3c8e70a6888543f5cdb656bb39f73e0ea77c1\"\u003e\u003ccode\u003e10d3c8e\u003c/code\u003e\u003c/a\u003e dist rebuild\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nodeca/js-yaml/commit/5278870a17454fe8621dbd8c445c412529525266\"\u003e\u003ccode\u003e5278870\u003c/code\u003e\u003c/a\u003e fix prototype pollution in merge (\u0026lt;\u0026lt;) (\u003ca href\u003d\"https://redirect.github.com/nodeca/js-yaml/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `\u003cat\u003edependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `\u003cat\u003edependabot rebase` will rebase this PR\n- `\u003cat\u003edependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `\u003cat\u003edependabot merge` will merge this PR after your CI passes on it\n- `\u003cat\u003edependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `\u003cat\u003edependabot cancel merge` will cancel a previously requested merge and block automerging\n- `\u003cat\u003edependabot reopen` will reopen this PR if it is closed\n- `\u003cat\u003edependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `\u003cat\u003edependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `\u003cat\u003edependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `\u003cat\u003edependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `\u003cat\u003edependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/apache/zeppelin/network/alerts).\n\n\u003c/details\u003e\n\nCloses #5120 from dependabot[bot]/dependabot/npm_and_yarn/zeppelin-web-angular/multi-75e6bc5210.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "3e56d81b808620a2ee04889cd282e2d248028efe",
      "tree": "bdd567b4a67e3044a1eabf36636de9788dc22512",
      "parents": [
        "66b1617c5b7053ae65551a247eea501222c3cf4c"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Tue Nov 11 21:49:07 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 21:49:07 2025 +0900"
      },
      "message": "[ZEPPELIN-6375] Add auto-reconnect for abnormal WebSocket closures in new UI\n\n### What is this PR for?\r\nThis PR adds automatic WebSocket reconnection for non-normal connection closures to the Angular UI (`zeppelin-web-angular`), matching the behavior of the legacy AngularJS UI.\r\n\r\nPreviously, when the WebSocket connection was closed abnormally (e.g., due to network issues, server timeouts, or browser tab throttling), the Angular UI would not attempt to reconnect, leaving users with a broken connection and requiring a manual page refresh.\r\n\r\nThis fix monitors WebSocket close events and automatically reconnects when the close code is not 1000 (Normal Closure).\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n* [x] - Add reconnection logic for non-normal close codes\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6375\r\n- Another related issue: https://issues.apache.org/jira/browse/ZEPPELIN-6374\r\n\r\n### How should this be tested?\r\n\r\n1. Start Zeppelin server locally\r\n2. Open a notebook in the new UI\r\n3. Test abnormal closure scenarios:\r\n  - e.g., **Tab throttling**: Leave the tab inactive for 2+ minutes (If you could watch the logs for `ZeppelinServer`, then you could check the timeout disconnect right away.).\r\n4. Verify that:\r\n  - WebSocket automatically reconnects after idle timeout.\r\n  - Console shows \"WebSocket closed unexpectedly. Reconnecting...\".\r\n  - Notebook operations work after reconnection and connection status icon remain green color.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5116 from tbonelee/fix-websocket.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "66b1617c5b7053ae65551a247eea501222c3cf4c",
      "tree": "c3fef573a3ccc4733a7ebd8b7018092fd374e204",
      "parents": [
        "4882e07f09df985e5272e591f55f24ce1a2faeb0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 11 21:24:14 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 21:24:14 2025 +0900"
      },
      "message": "Bump com.nimbusds:nimbus-jose-jwt from 9.37.2 to 9.37.4 in /zeppelin-server\n\nBumps [com.nimbusds:nimbus-jose-jwt](https://bitbucket.org/connect2id/nimbus-jose-jwt) from 9.37.2 to 9.37.4.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/commits/2432c09121add9fe6b2db9173131dd777939bfee\"\u003e\u003ccode\u003e2432c09\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare for next development iteration\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/commits/fa9737c49f1ae706d8929abfcb6f346b04275e03\"\u003e\u003ccode\u003efa9737c\u003c/code\u003e\u003c/a\u003e Bumps Tink and BC deps\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/commits/431f492225d8812cc6e57c6ebe1363e2fab2baba\"\u003e\u003ccode\u003e431f492\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release 9.37.3\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/commits/f7fb882cc08f027c9ceb874acec3b51c6222861c\"\u003e\u003ccode\u003ef7fb882\u003c/code\u003e\u003c/a\u003e Backports fixes to issues \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/issues/583\"\u003e#583\u003c/a\u003e, \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/issues/577\"\u003e#577\u003c/a\u003e, \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/issues/547\"\u003e#547\u003c/a\u003e, \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/issues/549\"\u003e#549\u003c/a\u003e, \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/issues/557\"\u003e#557\u003c/a\u003e, \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/issues/574\"\u003e#574\u003c/a\u003e, updates JSONObj...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/commits/ee7f3f9093c833987c67a67e574581e61240dfb0\"\u003e\u003ccode\u003eee7f3f9\u003c/code\u003e\u003c/a\u003e Fixes HTML markup error in JavaDoc overview.html\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/commits/392252c7a8f2e0c089f6537be32c440ea4e32ed1\"\u003e\u003ccode\u003e392252c\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release 9.37.4\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://bitbucket.org/connect2id/nimbus-jose-jwt/branches/compare/9.37.4..9.37.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dcom.nimbusds:nimbus-jose-jwt\u0026package-manager\u003dmaven\u0026previous-version\u003d9.37.2\u0026new-version\u003d9.37.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `\u003cat\u003edependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `\u003cat\u003edependabot rebase` will rebase this PR\n- `\u003cat\u003edependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `\u003cat\u003edependabot merge` will merge this PR after your CI passes on it\n- `\u003cat\u003edependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `\u003cat\u003edependabot cancel merge` will cancel a previously requested merge and block automerging\n- `\u003cat\u003edependabot reopen` will reopen this PR if it is closed\n- `\u003cat\u003edependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `\u003cat\u003edependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `\u003cat\u003edependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `\u003cat\u003edependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `\u003cat\u003edependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/apache/zeppelin/network/alerts).\n\n\u003c/details\u003e\n\nCloses #5023 from dependabot[bot]/dependabot/maven/zeppelin-server/com.nimbusds-nimbus-jose-jwt-9.37.4.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "4882e07f09df985e5272e591f55f24ce1a2faeb0",
      "tree": "2bcc673e7c0a157a503d394c86f1c1ef665acbbd",
      "parents": [
        "bf62a2a25f460aaaa4794f82a0b52553187eeb7f"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Nov 11 05:28:33 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 13:28:33 2025 +0900"
      },
      "message": "[ZEPPELIN-6204] do not allow init params in JDBC URLs for H2\n\n### What is this PR for?\r\nZEPPELIN-6204\r\n\r\nSlight tidy of the existing disallow list for strings in JDBC urls so that they are checked against just the query params and not the hostname in the URL. \r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n* [ ] - Task\r\n\r\n### What is the Jira issue?\r\n* Open an issue on Jira https://issues.apache.org/jira/browse/ZEPPELIN/\r\n* Put link here, and add [ZEPPELIN-*Jira number*] in PR title, eg. [ZEPPELIN-533]\r\n\r\n### How should this be tested?\r\n* Strongly recommended: add automated unit tests for any new or changed behavior\r\n* Outline any manual steps to test the PR here.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? no\r\n* Is there breaking changes for older versions? no\r\n* Does this needs documentation? no\r\n\n\nCloses #4949 from pjfanning/ZEPPELIN-6204-jdbc.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "bf62a2a25f460aaaa4794f82a0b52553187eeb7f",
      "tree": "10b76886925e2fa6f18da1745cbe3535dcfe799d",
      "parents": [
        "b27925599deb4045aeca7fa273291a6997354ae5"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Tue Nov 04 00:15:55 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 04 00:15:55 2025 +0900"
      },
      "message": "[HOTFIX] @playwright/test 1.56.1 to 1.55.1\n\n### What is this PR for?\r\nhttps://github.com/apache/zeppelin/pull/5111#issuecomment-3480683038\r\n\r\n#5108\r\nAfter upgrading Playwright to the latest version(1.53.2 to 1.56.1), several test cases started failing on WebKit. The issue was resolved by rolling back to the previous minor version(1.55.1).\r\n\r\n[related issue]\r\nhttps://github.com/microsoft/playwright/issues/37766\r\n\r\n### What type of PR is it?\r\nHot Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5115 from dididy/fix/e2e.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "b27925599deb4045aeca7fa273291a6997354ae5",
      "tree": "142ff1d652dc7b808fbf9f6948294f3ec2a47275",
      "parents": [
        "8432cf66e73b39d003b169cd86d8604e871349e6"
      ],
      "author": {
        "name": "Yuijin Kim(yuikim)",
        "email": "106499310+kmularise@users.noreply.github.com",
        "time": "Sun Oct 26 17:19:03 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 26 17:19:03 2025 +0900"
      },
      "message": "[ZEPPELIN-6365] Add E2E tests about Notebook Repositories (/notebook-repos)\n\n### What is this PR for?\r\nAddition of Notebook Repositories E2E tests for New UI\r\n\r\n---\r\n\r\nPAGES.WORKSPACE.NOTEBOOK_REPOS\r\n\r\n→ src/app/pages/workspace/notebook-repos/notebook-repos.component\r\n\r\nPAGES.WORKSPACE.NOTEBOOK_REPOS_ITEM\r\n\r\n→ src/app/pages/workspace/notebook-repos/item/item.component\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n\r\n### Todos\r\n* [X] - add Notebook Repositories E2E test\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6365](https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView\u003d632\u0026view\u003ddetail\u0026selectedIssue\u003dZEPPELIN-6365)\r\n\r\n### How should this be tested?\r\nby E2E test CLI\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5105 from kmularise/ZEPPELIN-6365.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "8432cf66e73b39d003b169cd86d8604e871349e6",
      "tree": "1754873fb81fb56c740e731c7295acd705166d5f",
      "parents": [
        "358f9e54713d108d2ee0fd78d580a6de8b3cbe5c"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Oct 26 17:16:13 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 26 17:16:13 2025 +0900"
      },
      "message": "[ZEPPELIN-6359] Add E2E tests about Home/Dashboard Page for New UI\n\n### What is this PR for?\r\nAddition and improvement of Home/Dashboard-related E2E tests for New UI\r\n\r\n---\r\n\r\nPAGES.WORKSPACE.HOME\r\n\r\n→ src/app/pages/workspace/home/home.component\r\n\r\nPAGES.WORKSPACE.MAIN\r\n\r\n→ src/app/pages/workspace/workspace.component\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6359\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5102 from dididy/e2e/home.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "358f9e54713d108d2ee0fd78d580a6de8b3cbe5c",
      "tree": "b53ed0db82d9144707d3491e4e15d8a48822b14e",
      "parents": [
        "0a768bcc07a4b691df51eda8f26cc013e8773612"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sun Oct 26 17:08:00 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 26 17:08:00 2025 +0900"
      },
      "message": "[ZEPPELIN-6349] Bump Angular from 9 to 13\n\n### What is this PR for?\r\n\r\nThis PR bumps Angular from 9 to 13 and updates related dependencies in zeppelin-web-angular.\r\n\r\nIt addresses:\r\n- https://issues.apache.org/jira/browse/ZEPPELIN-6349\r\n- https://issues.apache.org/jira/browse/ZEPPELIN-6227 (except the custom TSLint rules)\r\n\r\nI removed the zeppelin-helium and helium-vis-example projects in this PR. The Angular rewrite of Helium was never completed, it’s currently unused, and it introduced circular-dependency-related stack overflows during the application build. Given that, removing these modules is the safer choice.\r\n\r\n#### Principal version updates\r\n- angular: 9 -\u003e 13\r\n- ansi_up: 4 -\u003e 6\r\n- date-fns: 2 -\u003e 3\r\n- tslib: 1 -\u003e 2\r\n- lint-staged: 8 -\u003e 15\r\n- typescript: 3.8 -\u003e 4.6\r\n\r\n### What type of PR is it?\r\nChore\r\n\r\n### Todos\r\n* [x] - Bump Angular version (Used angular cli)\r\n* [x] - Migrate TSLint to ESLint (Used `\u003cat\u003eangular-eslint/schematics:convert-tslint-to-eslint`)\r\n* [x] - Fix deprecated code usages\r\n* [x] - Bump other minor dependencies\r\n* [x] - Remove `zeppelin-helium` and `helium-vis-example`\r\n\r\n### What is the Jira issue?\r\n\r\n[ZEPPELIN-6349](https://issues.apache.org/jira/browse/ZEPPELIN-6349)\r\n\r\n### How should this be tested?\r\n- Run E2E tests\r\n- Manual tests across various pages\r\n- Verify `serve` (dev server), `build`, and `lint` work as expected\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5109 from tbonelee/upgrade-web-angular.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "0a768bcc07a4b691df51eda8f26cc013e8773612",
      "tree": "d75d5186e16e09a14ac0dbf5796b66d8b7238825",
      "parents": [
        "33f35dcf3c0b0b1caf9572210ab7eeb163f4628b"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Fri Oct 24 13:01:44 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 24 13:01:44 2025 +0900"
      },
      "message": "[ZEPPELIN-6370] Upgrade playwright and change the method of installing Playwright browsers\n\n### What is this PR for?\r\nhttps://github.com/apache/zeppelin/pull/5107\r\nhttps://github.com/apache/zeppelin/actions/runs/18662031473/job/53204596550?pr\u003d5107\r\n\r\nIn the Playwright E2E tests of the above bump PR, the following issue occurred:\r\n```\r\nError: browserType.launch: Executable doesn\u0027t exist at /home/runner/.cache/ms-playwright/webkit-2215/pw_run.sh\r\n```\r\n\r\nThis issue seems to be caused by the Playwright browser installation step being version-locked in `zeppelin-web-angular/pom.xml`\u0027s playwright-install execution.\r\n\r\nInstead of managing it in `pom.xml`, it would be better to add it to the `postinstall` script in `zeppelin-web-angular/package.json`, so that Playwright browsers are automatically installed when running `npm install`, either in CI and on a local environment. This PR addresses that change.\r\n\r\n61ff629c48f5f0cc552fa8a9b87d3e665b8601ea\r\n\r\nIncluding the CI caching procedure as above, it seems optimized as previous approach(pom.xml).\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6370\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5108 from dididy/e2e/upgrade-playwright.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "33f35dcf3c0b0b1caf9572210ab7eeb163f4628b",
      "tree": "f9f02c886f031bae6500912088d60d63eccf25ff",
      "parents": [
        "a03dcbcefc4e6d36993fd537d41626e27eb8e05a"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sun Oct 19 20:47:46 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 19 20:47:46 2025 +0900"
      },
      "message": "[ZEPPELIN-6356] Fix ZeppelinClientIntegrationTest\n\n### What is this PR for?\r\n\r\nAfter #5090, we started hiding unhandled error details from clients, which caused some tests that depended on those details to fail. The afffected cases are note imports/creations that should fail when the target note path already exists.\r\n\r\nThis PR introduces a `ConflictException` and updates `NotebookRestApi` to return HTTP 409 (Conflict) when `NotebookService` throws or returns `NotePathAlreadyExistsException`.\r\n\r\nI chose to do this exception-to-HTTP mapping in `NotebookRestApi` because `NotebookService` is also used outside REST contexts, and assigning HTTP status codes belongs in the REST layer.\r\n\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6356\r\n\r\n### How should this be tested?\r\n- Check if `zeppelin-integration-test` and other tests pass\r\n\r\n### Screenshots (if appropriate)\r\n\r\n\u003cimg width\u003d\"1609\" height\u003d\"100\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/a445f36c-0267-42df-a75e-9f9f05f94964\" /\u003e\r\n\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5097 from tbonelee/fix-client-integration-test.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "a03dcbcefc4e6d36993fd537d41626e27eb8e05a",
      "tree": "4059d70164dda936ef7710e33f22edcbdde23d36",
      "parents": [
        "6f9ae32a37f4998b6845eba5761e84da14dfaa7f"
      ],
      "author": {
        "name": "Yuijin Kim(yuikim)",
        "email": "106499310+kmularise@users.noreply.github.com",
        "time": "Wed Oct 15 21:55:56 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 15 14:55:56 2025 +0200"
      },
      "message": "[ZEPPELIN-6354] Remove repo.hortonworks.com\n\n### What is this PR for?\r\nThis PR removes the Hortonworks repository from the `vendor-repo` Maven profile in the root pom.xml. The Hortonworks repository\u0027s SSL certificate has recently expired, and since Hortonworks was acquired by Cloudera, maintaining a separate repository entry is no longer necessary.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n* [x] - Remove Hortonworks repository from vendor-repo profile\r\n* [x] - Verify that vendor-repo profile is not used in CI/CD pipelines\r\n* [x] - Confirm no dependencies explicitly require Hortonworks repository\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6354](https://issues.apache.org/jira/browse/ZEPPELIN-6354)\r\n\r\n### How should this be tested?\r\n* Verify that the build completes successfully without the Hortonworks repository:\r\n  ```bash\r\n  ./mvnw clean install -DskipTests\r\n  ```\r\n* Confirm that the vendor-repo profile (if manually activated) still works with Cloudera repository:\r\n  ```bash\r\n  ./mvnw clean install -DskipTests -Pvendor-repo\r\n  ```\r\n* Check that no dependencies are downloaded from the Hortonworks repository during build\r\n\r\n### Screenshots (if appropriate)\r\nN/A\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\r\n### Additional Notes:\r\n- The `vendor-repo` profile is not currently used in any GitHub Actions workflows\r\n- Cloudera repository is retained in the profile for potential vendor-specific artifacts\r\n- Future consideration: The entire `vendor-repo` profile could be removed if not needed, as CI/CD pipelines don\u0027t use it\r\n\r\n\n\nCloses #5103 from kmularise/ZEPPELIN-6354.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "6f9ae32a37f4998b6845eba5761e84da14dfaa7f",
      "tree": "64abb6da7817af9f85227869b3182529c523d116",
      "parents": [
        "f1f671394dc742ec35ede32be039850cdf8a1145"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Fri Oct 10 20:25:34 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 10 20:25:34 2025 +0900"
      },
      "message": "[ZEPPELIN-6324] Auto-Run Paragraph When Accessed via \"Link This Paragraph\"\n\n### What is this PR for?\r\nSince this PR depends on the test utilities introduced in #5098, please review only 348a257f7f215b2631f9dabc43b37bbc1f381bde commit.\r\nI’ll rebase once #5098 is merged.\r\n\r\n**Summary**  \r\nThis PR improves the behavior when accessing a published paragraph via **\"Link This Paragraph\"** that has never been executed.\r\n\r\n**Background**  \r\nCurrently, if a paragraph has not been run and therefore has no result, nothing is displayed when accessing its shared link.  \r\nThis can be confusing to users.  \r\nWhile it would make sense to automatically execute the paragraph, running it immediately might cause **side effects** (e.g., updates to external databases).  \r\nTo address this, the PR introduces a confirmation step before execution — an idea originally suggested by **CHANHO LEE (Committer)**.\r\n\r\n**Changes**  \r\n- Adds a **confirmation modal** when accessing a published paragraph that has no results.  \r\n  - Asks the user whether to execute the paragraph.  \r\n  - Only runs the paragraph upon user confirmation.  \r\n- Adds **comprehensive E2E tests** to verify the functionality.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6324\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5100 from dididy/fix/publish-paragraph-auto-run.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "f1f671394dc742ec35ede32be039850cdf8a1145",
      "tree": "618e46c068c6aedce0dfd856ac921d228f9be2c2",
      "parents": [
        "8ef350e8b9738e2c98142be1faf69ec4eb0ced29"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Thu Oct 09 16:35:37 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 09 16:35:37 2025 +0900"
      },
      "message": "[ZEPPELIN-6330] Redirect to home with error if shared paragraph(or note) doesn’t exist\n\n### What is this PR for?\r\n\r\nIf a user accesses a shared link (via **“Link this paragraph”**) for a paragraph that does not exist, it now **redirects to the home screen** and **displays an error modal** indicating that the paragraph does not exist. Added tests to cover this behavior.\r\n\r\n---\r\n\r\n**Correct button text in Create Note modal** - db87e51\r\n```\r\n    \u003cnz-form-label\u003e\r\n      \u003cng-container *ngIf\u003d\"cloneNote; else importTpl\"\u003eClone Note\u003c/ng-container\u003e\r\n      \u003cng-template #importTpl\u003eNote Name\u003c/ng-template\u003e\r\n    \u003c/nz-form-label\u003e\r\n    ...\r\n    \u003cbutton nz-button nzType\u003d\"primary\" (click)\u003d\"createNote()\"\u003e\r\n      \u003cng-container *ngIf\u003d\"cloneNote; else importTpl\"\u003eClone\u003c/ng-container\u003e\r\n      \u003cng-template #importTpl\u003eCreate\u003c/ng-template\u003e\r\n    \u003c/button\u003e\r\n```\r\n\r\n- There was an issue where importTpl was duplicated, causing the \"Note Name\" to be overridden on the \"Create\" button. Renamed button\u0027s importTpl to importTplBtn to fix this.\r\n\r\n---\r\n\r\n**App component related E2E test updates** - daf6045\r\n- Updated  tests for the App component to ensure verify correct behavior under various scenarios.\r\n\r\n---\r\n\r\n**Add create new note precedure when it\u0027s empty** - 94933a4\r\nAdded a notebook test utility for creating a new note and a common utility that creates a note if none exists, which can be used in multiple places. \r\n- zeppelin-web-angular/e2e/models/notebook.util.ts\r\n- zeppelin-web-angular/e2e/utils.ts\r\n\r\n\r\n### What type of PR is it?\r\nBug Fix\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6330\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5098 from dididy/fix/link-paragraph-invalid-url.\n\nSigned-off-by: Chan Lee \u003cchanho0325@gmail.com\u003e"
    },
    {
      "commit": "8ef350e8b9738e2c98142be1faf69ec4eb0ced29",
      "tree": "91a80d80637681230cb2c9825a1c2e1cbdd47184",
      "parents": [
        "3ad1a2c486398a39db29dd82ff0a3e617a6e346a"
      ],
      "author": {
        "name": "hyeyoon Jung",
        "email": "jeonghy95@gmail.com",
        "time": "Tue Oct 07 20:13:13 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 07 20:13:13 2025 +0900"
      },
      "message": "[ZEPPELIN-6279] Add Search/Highlight keyword feature for Code Editor\n\n### What is this PR for?\r\nThis PR is a re-implementation of the Search and Replace UI, a feature that was available in the Classic UI.\r\nThe core search and highlighting logic has been fully rewritten to work with the Monaco Editor, which replaces the legacy Ace Editor library. \r\n\r\n### What type of PR is it?\r\nFeature\r\n\r\n### Todos\r\n* [ ] - Replace and Replace All features are not implemented yet.\r\n* [ ] - The feature to display the total counts and the current index is not implemented yet.\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6279](https://issues.apache.org/jira/browse/ZEPPELIN-6279)\r\n\r\n### How should this be tested?\r\n**Manual Testing**\r\n* Check out the PR branch and check if search and highlight feature works. \r\n\r\n### Screenshots (if appropriate)\r\n\u003cimg width\u003d\"972\" height\u003d\"280\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/5e9f0ff1-c796-4e59-8e91-40f3fe1a2ce8\" /\u003e\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5079 from grcenneat/feat/ZEPPELIN-6279.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "3ad1a2c486398a39db29dd82ff0a3e617a6e346a",
      "tree": "44746bb388731dec3735dc1d921d2ebe8b87ce51",
      "parents": [
        "9aac655ef9fce3cdb91f4fac3dbc4a6fff9c3d1e"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Tue Oct 07 11:45:39 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 07 11:45:39 2025 +0900"
      },
      "message": "[ZEPPELIN-6351] Close modals only on their own user actions\n\n### What is this PR for?\r\nOn the home page, an open modal (e.g., `Import Note`, `Create New Note`) closes when a  `NOTES_INFO` message is received.\r\n\r\nThis is unexpected and makes running parallel E2E tests that create new notes unreliable.\r\n\r\n#### Root cause\r\nBoth modals treated any `NOTES_INFO` message as the result of *their* own submit action.\r\nSince `NOTES_INFO` message is broadcast for various events, this led to false positives.\r\n\r\n#### Fix\r\nClose modals only in response to messages addressed to the submitting client: `IMPORT_NOTE` and `NEW_NOTE`. The server already sends `NEW_NOTE` (used by the old UI), but not `IMPORT_NOTE`. I added a server-sent `IMPORT_NOTE` and replaced `broadcastNote(note)` with sending `IMPORT_NOTE` only to the caller. The previously broadcast `NOTE` is mainly useful to users already on that note page; for a newly imported note, no user is on that page yet, so the broadcast is unnecessary.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\n[[ZEPPELIN-6351]](https://issues.apache.org/jira/browse/ZEPPELIN-6351)\r\n\r\n### How should this be tested?\r\n- Open two browser windows (A and B).\r\n- In A, open a modal (e.g., Import Note or Create New Note).\r\n- In B, perform a submit that triggers a note update. Verify the modal in A does not close.\r\n- In A, submit the modal. Verify it closes and the note list updates.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n#### [AS-IS]\r\n\r\nhttps://github.com/user-attachments/assets/a38a8334-81d3-45ae-9264-755143df9041\r\n\r\n#### [TO-BE]\r\n\r\n\r\nhttps://github.com/user-attachments/assets/b5e9148a-2a2a-441c-a389-aa1f558a025d\r\n\r\n\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5092 from tbonelee/fix-modal-close.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "9aac655ef9fce3cdb91f4fac3dbc4a6fff9c3d1e",
      "tree": "18a655d6080135c2ae15224161341a28b77d7ba4",
      "parents": [
        "6dd68c3f9702554c4c7afde68795885e7c985c3e"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Tue Oct 07 11:44:34 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 07 11:44:34 2025 +0900"
      },
      "message": "[ZEPPELIN-6332] Unify keyboard event handling between Angular and Monaco editor\n\n### What is this PR for?\r\n\r\nKeyboard event handling logic is currently split between in `paragraph.component.ts`(Angular) and `code-editor.component.ts` (Monaco editor) in new UI.\r\n\r\nSince both Angular and the Monaco editor capture key events, the auctual handler depends on where the focus is.\r\n\r\nRefactoring this logic would improve cohesion and type safety, making the code more readable and less prone to bugs.\r\n\r\n#### Changes\r\n\r\n##### Extracted keybinding logic into a separate module\r\n- Keybinding logic involves low-level event handling details, but it is not a core responsibility of the components.\r\n- To improve separation of concerns and reusability, I extracted the logic into a dedicated module: `\u003cat\u003ezeppelin/key-binding`.\r\n\r\n##### Added a keybinding coverter\r\n- Introduced a converter from Angular keybindings to Monaco editor keybindings.\r\n- This allows keybindings defined once  in `shortcuts-map.ts` to be reused for both Angular and Monaco editor handlers.\r\n\r\n##### Unified keybinding handling in a single class\r\n- Initialization of keybinding handlers for both Angular and Monaco editor is now managed by a new `KeyBinder` class.\r\n- A `KeyBinder` instance is created in each `ParagraphComponent`.\r\n- Angular handlers are registerd during `ParagraphComponent` initialization, while Monaco handlers are registered when the editor is initialized (triggered by the `initKeyBindings` emitter in `NotebookParagraphCodeEditorComponent`).\r\n- All handlers simpley emit the appropriate action key to an RxJS `Subject` within `KeyBinder`.\r\n\r\n##### Categorized handler for each action between Angular and Monaco editor at type level.\r\n- All actions are mapped to corresponding handler method name via `ParagraphActionToHandlerName`. Each actions must be explicitly specified as a key at the type level, and each value must be one of the method names from `NotebookParagraphKeyboardEventHandler`.\r\n- The `MonacoKeyboardEventHandler` type defines method names for some actions, while the rest are defined in `AngularKeyboardEventHandler`. Both are subtypes of `NotebookParagraphKeyboardEventHandler` and the methods in each type are mutually exclusive.\r\n- `NotebookParagraphCodeEditorComponent` implements the Monaco handler, and `ParagraphComponent` implements the Angular handler.\r\n- Both handler implementation receives an `action` parameter via` handleKeyEvent(action, event)`, then look up the corresponding method in `ParagraphActionToHandlerName` using the `action` value.\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6332](https://issues.apache.org/jira/browse/ZEPPELIN-6332)\r\n\r\n### How should this be tested?\r\nSince E2E tests are not added, we could check key shortcuts manually while running Zeppelin.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5080 from tbonelee/override-default-keybindings.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "6dd68c3f9702554c4c7afde68795885e7c985c3e",
      "tree": "3790454406d09e4464c1878e306333cb59e084b7",
      "parents": [
        "89aecde0ed381d5ff6c68ed299c1562e675445e5"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Tue Oct 07 11:43:09 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 07 11:43:09 2025 +0900"
      },
      "message": "[ZEPPELIN-6327] Fix wrong order of the arguments for Visualization components\n\n### What is this PR for?\r\nVisualizations are not working because the constructor arguments were passed in the wrong order.\r\nSince using `any` made this error hard to detect, I replaced it with specific types.\r\n(Related to #5053)\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6327\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5074 from tbonelee/fix-argument-order.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "89aecde0ed381d5ff6c68ed299c1562e675445e5",
      "tree": "33c443b0bfad0381bb74be6b61bfa84e71236136",
      "parents": [
        "94f1d8175fbfeab64c85ab5d8eca087ada8b4e5c"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Mon Oct 06 10:44:58 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 06 10:44:58 2025 +0900"
      },
      "message": "[ZEPPELIN-6357] Fixed missing login prerequisite in each test\n\n### What is this PR for?\r\nhttps://github.com/apache/zeppelin/actions/runs/18239525409/job/51939323284?pr\u003d5095\r\n\r\nI recently found that the `run-playwright-e2e-tests (auth)` step wasn’t running properly during the New UI\u0027s E2E tests.  \r\nThe root cause was that the tests required a setup (tear-up) process.  \r\nSince handling login in `globalSetup` within `playwright.config` made it difficult to account for all browser contexts,  \r\nI added a method([performLoginIfRequired](https://github.com/apache/zeppelin/pull/5096/files#diff-10918824923e3beebfd460fdab4db4ee063a0f1ee10c49bb5829e459e3af31f3R164-R196)) in `utils` to perform the login when a `shiro.ini` file exists, and made each test execute it in `beforeEach`.\r\n\r\nDuring this process, I also merged the `helper` into `utils`, as they essentially served the same purpose.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6357\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5096 from dididy/fix/login-tearup.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "94f1d8175fbfeab64c85ab5d8eca087ada8b4e5c",
      "tree": "032b2e1bd40984a0884ca529757f879600945118",
      "parents": [
        "eee7ebb6887ed6d1e1881396222628a7d2ca9bf8"
      ],
      "author": {
        "name": "Dongmin Cha",
        "email": "40655807+chadongmin@users.noreply.github.com",
        "time": "Sun Oct 05 17:09:37 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 05 17:09:37 2025 +0900"
      },
      "message": "[ZEPPELIN-6352] Prevent information disclosure in WebApplicationExceptionMapper\n\n### What is this PR for?\r\n  This PR fixes a security vulnerability in `WebApplicationExceptionMapper` that exposes sensitive information through exception serialization. When exceptions occur, the current implementation\r\n  serializes the entire exception object to JSON and returns it to clients, potentially leaking stack traces, internal paths, class names, and other sensitive details. This PR replaces the detailed\r\n  exception response with a generic error message while maintaining proper server-side logging for debugging purposes.\r\n\r\n  ### What type of PR is it?\r\n  Improvement\r\n\r\n  ### Todos\r\n  * [x] - Replace exception serialization with generic error message\r\n  * [x] - Maintain server-side error logging\r\n\r\n  ### What is the Jira issue?\r\n  * https://issues.apache.org/jira/browse/ZEPPELIN-6352\r\n\r\n  ### How should this be tested?\r\n  * **Automated testing**: Unit tests should verify that non-WebApplicationExceptions return a generic error message instead of detailed exception information\r\n  * **Manual testing**:\r\n    1. Trigger an exception in the application\r\n    2. Verify that the client receives only the generic error message: `{\"status\":\"error\",\"message\":\"Internal server error\"}`\r\n    3. Check server logs to confirm the full exception details are still logged\r\n\r\n  ### Screenshots (if appropriate)\r\n  N/A\r\n\r\n  ### Questions:\r\n  * Does the license files need to update? **No**\r\n  * Is there breaking changes for older versions? **No** - Only changes the error response format for better security\r\n  * Does this needs documentation? **No**\r\n\n\nCloses #5090 from chadongmin/ZEPPELIN-6352.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "eee7ebb6887ed6d1e1881396222628a7d2ca9bf8",
      "tree": "8a14a9b5ec99c52c47cdd7a42c991317a806e6cf",
      "parents": [
        "190ecd6a2febd58616e0fdbb2686fbd2b2ea7e7a"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Oct 05 17:03:06 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 05 17:03:06 2025 +0900"
      },
      "message": "[ZEPPELIN-6323] Apply dark mode to the new UI\n\n### What is this PR for?\r\nThis PR adds dark mode support and system theme integration for the Zeppelin New UI. There were multiple demands such as [ZEPPELIN-5062](https://issues.apache.org/jira/browse/ZEPPELIN-5602) and [ZEPPELIN-4024](https://issues.apache.org/jira/browse/ZEPPELIN-4024).\r\n\r\n#### Example: Follow system theme + other parts\r\n\r\nhttps://github.com/user-attachments/assets/2159d54e-6403-4f80-91f0-3f66a93881e1\r\n\r\n#### Example: Change with button + notebook\r\n\r\n\r\nhttps://github.com/user-attachments/assets/59bdf1bc-86a3-42e1-a3d0-1d89d955ed7d\r\n\r\n\r\n#### Automatic System Theme Detection \u0026 Sync  \r\n- Automatically detect OS-level dark/light mode settings  \r\n- Real-time detection and application of system theme changes  \r\n- Theme cycle pattern: `auto(system) → opposite theme → original theme → auto`  \r\n\r\n#### Comprehensive Dark Mode UI Support  \r\n- Applied dark mode styles across all major components  \r\n- Added dark mode overrides for Ant Design components  \r\n- Full Monaco Editor dark theme support  \r\n- Consistent color scheme and visual hierarchy  \r\n\r\n#### Enhanced User Experience  \r\n- Eliminated FOUC (Flash of Unstyled Content) with logic handled in `index.html`  \r\n- Easy theme switching via a toggle button  \r\n- Persisted user preferences in local storage  \r\n- Theme state maintained after page reloads  \r\n\r\nWith dark mode support and system theme integration, Zeppelin delivers a modern, user-friendly experience. Users can either rely on system theme settings for automatic adaptation or manually select their preferred theme.  \r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n* [ ] I created a dark mode [background image](https://github.com/dididy/zeppelin/blob/5d078a40c17e0561202e809da0761016516b86f2/zeppelin-web-angular/src/assets/images/bg-dark.png) used for login and loading with ChatGPT, but I need to verify whether there are any copyright issues.\r\n* [ ] Due to the limited environment setup, I wasn’t able to check all the cases where graphs are rendered. I think we can leave this as a follow-up issue to work on later.\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6323](https://issues.apache.org/jira/browse/ZEPPELIN-6323)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5078 from dididy/feat/darkmode.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "190ecd6a2febd58616e0fdbb2686fbd2b2ea7e7a",
      "tree": "e4498bc65983f709ad72e6347265f26372996613",
      "parents": [
        "7c7b00fa78dab19b16fee8b55458f69ef127a0e9"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Oct 04 10:49:52 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 04 10:49:52 2025 +0900"
      },
      "message": "[ZEPPELIN-6336] Enable Conditional Login Test Based on shiro.ini Presence in Zeppelin\n\n### What is this PR for?\r\nCurrently, Zeppelin(zeppelin-web-angular)’s E2E authentication tests require the presence of a `shiro.ini` file to run.  \r\nHowever, in certain build or CI environments, this file may not exist.  \r\nIn such cases, login tests may fail or behave unpredictably.  \r\n\r\nTo improve flexibility, the test framework should support both scenarios:  \r\n- **Auth mode (`shiro.ini` exists)** → Run all tests, including authentication/login tests  \r\n- **Anonymous mode (`shiro.ini` does not exist)** → Skip authentication/login tests, but run all other tests  \r\n\r\n#### 1. GitHub Actions Workflow (Matrix Mode)\r\n- Added `strategy.matrix.mode: [anonymous, auth]`\r\n- In `auth` mode, copy `shiro.ini.template → shiro.ini`\r\n- In `anonymous` mode, skip `shiro.ini` setup to simulate a no-auth environment\r\n\r\n#### 2. Playwright Global Setup / Teardown\r\n- **`global-setup.ts`**\r\n  - Added `LoginTestUtil.isShiroEnabled()` to detect presence of `shiro.ini`\r\n  - If enabled → load credentials \u0026 run login tests  \r\n  - If disabled → skip login tests, log message  \r\n- **`global-teardown.ts`**\r\n  - Added environment cleanup (e.g., reset cache)\r\n\r\n#### 3. Authentication Utility (`login-page.util.ts`)\r\n- `isShiroEnabled()`: Checks if `shiro.ini` is accessible via `fs.access`\r\n- `getTestCredentials()`: Parses credentials only when `shiro.ini` exists\r\n- `resetCache()`: Clears cached values between test runs\r\n\r\n#### 4. Test Code Updates\r\n- **`app.spec.ts`**  \r\n  - Conditionally checks whether login page or workspace should be visible, based on `isShiroEnabled()`\r\n- **Other Playwright tests**  \r\n  - Authentication-related tests are skipped when `shiro.ini` is not present\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6336\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5088 from dididy/fix/ZEPPELIN-6336.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "7c7b00fa78dab19b16fee8b55458f69ef127a0e9",
      "tree": "7c09f23528b899286b49329ee8979b4af2ee82be",
      "parents": [
        "5484bebb6e988d474787147d725f7db17d619d91"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sat Oct 04 00:01:38 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 04 00:01:38 2025 +0900"
      },
      "message": "[CI-HOTFIX] Remove not allowed action in Selenium test\n\nI attempted to create a related JIRA issue, but the Apache JIRA site isn\u0027t working for an hour. Therefore, I’m proceeding without creating the issue.\r\n\r\n### What is this PR for?\r\nCurrently, our CI workflow uses browser-actions/setup-edge\u003cat\u003ev1 to install Microsoft Edge. However, this action is not allowed in the apache/zeppelin repository because only actions from approved/verified sources can be used.\r\n\r\n\u003cimg width\u003d\"2109\" height\u003d\"241\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/28b0e90a-ffaf-41b4-9c25-495088a20963\" /\u003e\r\n\r\nTo resolve this, I removed the external action and replace it with a direct installation step.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n\r\n### How should this be tested?\r\n- Check if CI works\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5093 from tbonelee/remove-not-allowed-action.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "5484bebb6e988d474787147d725f7db17d619d91",
      "tree": "55ae9ee9e057333f2bf4b59954ef975c0e4e2abd",
      "parents": [
        "3d1ee7c6bfeb178d853e8f67af97f0c2b326da96"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Fri Oct 03 23:46:01 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 03 23:46:01 2025 +0900"
      },
      "message": "[ZEPPELIN-6339] Fix - Anonymous users can access /login in the New UI, unlike the Classic UI\n\n### What is this PR for?\r\n#### [Classic UI]\r\n\r\nhttps://github.com/user-attachments/assets/9ae01649-5525-4310-b467-4dc96f205987\r\n\r\n\r\n#### [As-Is]\r\n\r\n\r\nhttps://github.com/user-attachments/assets/654ce13a-1770-4c61-bc4c-c9cc09ba397d\r\n\r\n\r\n#### [To-Be]\r\n\r\n\r\nhttps://github.com/user-attachments/assets/9c8140e3-ff7f-4698-af93-8ae6859f6dee\r\n\r\nAnonymous users were able to access /login in the New UI, unlike the Classic UI.\r\nThis has been restricted, and I have added tests to cover the change.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6339\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No \r\n\n\nCloses #5087 from dididy/fix/login-issue.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "3d1ee7c6bfeb178d853e8f67af97f0c2b326da96",
      "tree": "72f155167bc9636e9bb3700d6fcaaebdd7a7c0df",
      "parents": [
        "25ec6ed966db56ea04d995d16b77fb553665dd26"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanho0325@gmail.com",
        "time": "Thu Oct 02 19:35:20 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 02 19:35:20 2025 +0900"
      },
      "message": "[ZEPPELIN-6350] Fix Selenium test by Replacing Firefox with Edge\n\n### What is this PR for?\r\nThis PR stabilizes the `test-selenium...` job by switching the Selenium browser from Firefox to Microsoft Edge.\r\nIn #4941, we worked around a Linux ChromeDriver issue (https://github.com/SeleniumHQ/selenium/issues/15358) by moving from Chrome to Firefox, but that workaround also seems to be not working well.\r\n\r\nI use Edge driver instead, since it does not have flakiness like Firefox driver and is more aligned with Chrome since it is also based on Chromium.\r\n\r\nLimitation: The root cause of Firefox browser failures has not been fully analyzed.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\n[[ZEPPELIN-6350]](https://issues.apache.org/jira/browse/ZEPPELIN-6350)\r\n\r\n### How should this be tested?\r\n- Check `test-selenium...` job in `frontend`\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5089 from tbonelee/fix-selenium-test.\n\nSigned-off-by: Chan Lee \u003cchanho0325@gmail.com\u003e"
    },
    {
      "commit": "25ec6ed966db56ea04d995d16b77fb553665dd26",
      "tree": "b94e24896db1aefd6d677b099397a8beb4435f94",
      "parents": [
        "f4f822d05c59aa941a697cb34ccdd3b37dd1a795"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanho0325@gmail.com",
        "time": "Thu Oct 02 19:34:17 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 02 19:34:17 2025 +0900"
      },
      "message": "[ZEPPELIN-6353] Migrate Windows build CI from AppVeyor to GitHub Actions\n\n### What is this PR for?\r\n\r\n#### Background\r\n\r\n- Windows build/test currently runs on AppVeyor.\r\n\r\n#### Problem\r\n\r\n- AppVeyor jobs are hard for individual contributors to reproduce and debug.\r\n  - Hard to debug failing Windows build test.\r\n- Maintaining a separate CI provider increases overhead.\r\n\r\n#### Proposal\r\n\r\n- Port the Windows build/test job to GitHub Actions with feature parity.\r\n\r\n#### Benefits\r\n\r\n- Single CI platform, easier contributor workflows, simpler maintenance.\r\n\r\n#### Definition of Done\r\n\r\nAll Windows checks run on GitHub Actions and pass consistently.\r\nAppVeyor is removed from required checks and configuration.\r\n\r\n\r\n### What type of PR is it?\r\nCI\r\n\r\n### Todos\r\n- [x] Add a Windows workflow on GitHub Actions (build).\r\n- [x] Ensure caching/artifacts.\r\n- [ ] Disable AppVeyor from repository settings after GA workflow is green and stable.\r\n\r\n### What is the Jira issue?\r\n[[ZEPPELIN-6353]](https://issues.apache.org/jira/browse/ZEPPELIN-6353)\r\n\r\n### How should this be tested?\r\n- Check `windows-build` job in `core`\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5091 from tbonelee/migrate-windows-build.\n\nSigned-off-by: Chan Lee \u003cchanho0325@gmail.com\u003e"
    },
    {
      "commit": "f4f822d05c59aa941a697cb34ccdd3b37dd1a795",
      "tree": "4a3d1313b7586fac034b8b9a69f4205fd857b7ce",
      "parents": [
        "8fd90cf8f6a92ad58454023a88ca0468839da3aa"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Mon Sep 29 12:13:37 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 29 12:13:37 2025 +0900"
      },
      "message": "[ZEPPELIN-6233] Upgraded the Node.js version of zeppelin-web-angular from 16 to 18\n\n### What is this PR for?\r\nUpgraded the Node.js version of zeppelin-web-angular from **16.20.2** to **18.20.8**\r\n\r\n#### [[zeppelin-web-angular/package.json](https://github.com/apache/zeppelin/compare/master...dididy:zeppelin:test/node18?expand\u003d1#diff-c7de4df5c0afd29d2acd136879ab99f0fec5aeb696a4423885124e93bd1a986f)]\r\nOpenSSL legacy provider: Added NODE_OPTIONS\u003d\u0027--openssl-legacy-provider\u0027 to maintain compatibility with libraries that rely on legacy cryptographic algorithms, which are no longer enabled by default in Node 18 (OpenSSL 3).\r\n\r\nI upgraded Husky from version 3 to version 9 and added `\"prepare\": \"husky\"` to the `package.json`. In Husky v9, the `prepare` script runs automatically when a user executes `npm install`, which ensures that Git hooks are installed without any additional manual steps. Unlike `postinstall`, which runs after package installation, `prepare` runs during the installation process, so the hooks are ready immediately after `npm install`.\r\n\r\nHusky\u0027s Git hook management has moved from `package.json` to the `.husky/` directory. All hook scripts that were previously defined in `package.json` have been migrated to individual files under `.husky/`, following the new Husky v9 structure. This change ensures a clearer separation of configuration and hook scripts and aligns with the recommended setup for Husky v9.\r\n\r\n#### [[zeppelin-web-angular/proxy.conf.js](https://github.com/apache/zeppelin/compare/master...dididy:zeppelin:test/node18?expand\u003d1#diff-2a24ea2db081bdc01ecadf2293530e5997cdd179f9dc47820627776fc1b5e591)]\r\nUpdated the proxy target from `localhost` to `127.0.0.1` following the Node.js 18 upgrade.\r\n\r\nIn Node.js 18, `localhost` may resolve to IPv6 (`::1`) first, which can cause connection issues with servers bound to IPv4 (`127.0.0.1`).  \r\nUsing `127.0.0.1` ensures a consistent IPv4 connection and improves stability.\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\nZEPPELIN-6233\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5086 from dididy/test/node18.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "8fd90cf8f6a92ad58454023a88ca0468839da3aa",
      "tree": "3fbe3bec2f415b9b9666b545199abdb45dccc15f",
      "parents": [
        "ae68cf57413c0848bd958201a6121a9fabc0365b"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sun Sep 28 12:50:19 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 28 12:50:19 2025 +0900"
      },
      "message": "[ZEPPELIN-6338] Allow separate frontend modules to use different Node/NPM versions\n\n### What is this PR for?\r\nMoved the `node.version` and `npm.version` properties from the parent `pom.xml` to each module\u0027s `pom.xml`.\r\nThis allows `zeppelin-web` and `zeppelin-web-angular` to manage their Node/NPM versions independently.\r\n\r\nNote: Each module installs and manages its own Node/NPM, so this change simply makes that independence explicit without adding extra maintenance burden or increasing package size.\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6338\r\n\r\n### How should this be tested?\r\nCheck CIs if Node and npm is installed for both modules.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5084 from tbonelee/update-nodejs.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "ae68cf57413c0848bd958201a6121a9fabc0365b",
      "tree": "2b7f7e648feb24b2d59b7acbeaca5646baf10b8b",
      "parents": [
        "80ff51cdf580b5718c0c531096aa75c2c03b62d2"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sat Sep 27 13:57:47 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 27 13:57:47 2025 +0900"
      },
      "message": "[ZEPPELIN-6328] Enable strict template modes in zeppelin-web-angular\n\n### What is this PR for?\r\nType checks in template checks are not fully enabled right now, which makes it harder to catch type errors.\r\nEnabling strict type checks in Angular templates would help surface these errors at compile time.\r\n\r\nI enabled `strictTemplates` and `fullTemplateTypeCheck` options in tsconfig files.\r\nThen I ran `npm run build` and fixed those type errors.\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6328\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5075 from tbonelee/strict-template.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "80ff51cdf580b5718c0c531096aa75c2c03b62d2",
      "tree": "7c3f6d57affb5c5b83aa42932e2872b00b620810",
      "parents": [
        "3e9e89565d311bfbaaafc9932b3adb5ce6104b1d"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sat Sep 27 13:33:21 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 27 13:33:21 2025 +0900"
      },
      "message": "[ZEPPELIN-6336] Fix failing zengine tests caused by invalid interpreters.json\n\n### What is this PR for?\r\nTests in the `zeppelin-zengine` module were failing. The main reason was that the `interpreter.json` in test resources were invalid: the value object did not have an `id` field matching its corresponding key.\r\nAs a result, the deserialized `InterpreterSetting` instance had an auto-genarated `id` field, causing the key and value.id to be inconsistent.\r\nBefore #5063, invalid settings were simply skipped. However, after that change, they caused a NPE.\r\n\r\nThis PR fixes the invalid JSON files and adds minor validation logic in the deserialization method so that such issues can be detected early by users.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6335\r\n\r\n### How should this be tested?\r\n* Check `core-modules` - `zeppelin-zengine` tests in CI\r\n\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5081 from tbonelee/fix-test-resource.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "3e9e89565d311bfbaaafc9932b3adb5ce6104b1d",
      "tree": "f6d0d5c470bcece9844cc89a18e5f5ed4fc6d61b",
      "parents": [
        "948f1652f9277a9e5b25051eee6e0674f137afd3"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Sep 21 11:26:55 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 21 11:26:55 2025 +0900"
      },
      "message": "[ZEPPELIN-6314] Set up a new E2E testing environment in the New UI\n\n### What is this PR for?\r\n#### [Summary]\r\n\r\n- **Proposal:** Migrate the existing Protractor (and Karma/Jasmine-based E2E/testing system) to a **Playwright**-based testing framework.  \r\n- **Objective:** Achieve a more stable and faster testing process while supporting modern E2E requirements such as cross-browser testing, multi-tab scenarios, and automatic waits. Additionally, leverage **Playwright MCP / code generator** to automate and accelerate test creation.  \r\n\r\n#### [Background]\r\n\r\n1. **Protractor** has long been the standard for E2E testing in the Angular ecosystem. However, with the [official deprecation/termination of support by the Angular team](https://blog.angular.dev/protractor-deprecation-update-august-2023-2beac7402ce0), long-term maintenance can no longer be relied upon.  \r\n2. Existing Protractor tests are WebDriver-based (control method, wait strategies, etc.), which often led to flaky test cases and increased maintenance costs.\r\n3. The **Karma + Jasmine**-based unit testing environment, widely used as the default in Angular CLI, also has limitations in terms of build/compile costs, speed, and developer experience (configuration, parallel execution, etc.). Modern alternatives offer a better DX.  \r\n    - Since there were no test files, the related environment was removed from this branch, and any future unit tests will be migrated to **Jest**.\r\n\r\n#### [Why Playwright?]\r\n\r\n\u003e Playwright provides a robust ecosystem with **stability, speed, standardization, and AI-assisted automation capabilities**.\r\n\r\n- **[Test Generator (Codegen)](https://playwright.dev/docs/codegen)**  \r\n  - Records user interactions in the browser and generates scaffolding for tests—useful for quickly setting up E2E scenarios.  \r\n- **[MCP (Model Context Protocol) Integration](https://playwright.dev/agents/playwright-mcp-generating-tests)**  \r\n  - Playwright has extensive documentation and examples for workflows that generate and validate tests via MCP (LLM ↔ test runner interface), enabling automated test creation and LLM-assisted refactoring. This reduces the need for fully manual test writing.  \r\n  - In the MCP era, Playwright is the most widely used tool.\r\n    - According to [State of JavaScript 2024](https://2024.stateofjs.com/en-US/libraries/testing/#testing_work), Playwright is the most widely used E2E tool at work.\r\n- **Functional Advantages**  \r\n  - Multi-browser support: Chromium / Firefox / WebKit  \r\n  - Multi-tab \u0026 cross-domain (cross-origin) testing  \r\n  - Robust auto-waiting, parallel execution  \r\n  - Built-in reporters, traces, videos, snapshots    \r\n- **Why Not Cypress?**  \r\n  - Parallel execution requires paid [Cypress Cloud](https://docs.cypress.io/cloud/features/smart-orchestration/parallelization)\r\n  - Cannot handle [iframes](https://docs.cypress.io/app/guides/cross-origin-testing#Origin), [new tabs](https://reflect.run/articles/accessing-a-new-window-in-cypress-tests), [multi-tab](https://momentic.ai/resources/the-definitive-guide-to-cypress-multi-tab-and-window-handling), or [popup scenarios](https://reflect.run/articles/accessing-a-new-window-in-cypress-tests)without tricks  \r\n  - MCP support is community-driven and not standardized\r\n- **Why Not Puppeteer?**  \r\n  - [Chrome-dependent](https://pptr.dev/supported-browsers), [unsuitable for multi-environment E2E testing](https://www.browserstack.com/guide/cross-browser-testing-in-puppeteer)\r\n\r\n#### [Project Structure Overview]\r\n\r\n- **fixtures/**: Environment setup tools for test execution (e.g., `tearup` / `teardown`).\r\n- **models/**: Contains POM (Page Object Model) classes for reusable page actions.\r\n- **tests/**: Contains spec files for the actual test cases.\r\n- **helper.ts**: Zeppelin-specific helper classes.\r\n- **reporter.coverage.*.ts**: Custom reporters for checking test coverage.\r\n- **utils.ts**: Test utilities and page constants.\r\n\r\n[Node 16 is **no longer supported** in `\u003cat\u003eplaywright/test` versions **after v1.53.2**](https://playwright.dev/docs/release-notes#miscellaneous-1). As a result, this project uses **v1.53.2** instead of the latest version (v1.55.0) to maintain compatibility.  \r\n\r\n#### [Coverage Rule]\r\n\r\n\u003e **Goal:** Ensure that for each `*.component.ts` file, **at least one test passes**. In other words, verify that E2E tests cover the functionality of each component.\r\n\r\n\u003cimg width\u003d\"1130\" height\u003d\"888\" alt\u003d\"스크린샷 2025-09-11 오후 9 09 57\" src\u003d\"https://github.com/user-attachments/assets/7307d9e5-66b4-45d8-a8aa-6691fdbe6558\" /\u003e\r\n\r\n**Approach (Proposed Flow)**\r\n\r\n1. **Enable frontend code coverage collection** by adding a custom reporter.  \r\n2. At the start of each test (or when entering a page), register coverage using a helper like `testPageBeforeEach({TEST-PATH})`. Example usage shown below.  \r\n3. During the test execution, if additional coverage is generated, register it via the `testPage({TEST-PATH}, testInfo)` helper.  \r\n4. **In the Playwright custom reporter**, after all tests have finished, parse the collected coverage data:  \r\n   - Read the list of files matching `src/app/**/*.component.ts`.  \r\n   - Verify that each component has test coverage\r\n   - If any component is not sufficiently covered, fail the CI or generate a separate report.\r\n\r\n**Example: Using `testPageBeforeEach` and `testPage`**\r\n\r\n```ts\r\ntest.describe(\u0027TEST EXAMPLE\u0027, () \u003d\u003e {\r\n  testPageBeforeEach(\u0027src/app/app.component\u0027);\r\n  ...\r\n  test(\u0027TEST FOR LOGIN\u0027, async ({ page }, testInfo) \u003d\u003e {\r\n    testPage(\u0027src/app/pages/login/login.component\u0027, testInfo);\r\n    ...\r\n  });\r\n  ...\r\n});\r\n```\r\n\r\n#### [Test Generators / Leveraging MCP]\r\n\u003e **Automated Initial Scaffolding**: Developers no longer need to manually write each scenario. Using Playwright Codegen / MCP, initial test templates can be generated automatically and then refined by humans, dramatically increasing productivity.  \r\n\r\n- **[Using Test Generator Options](https://playwright.dev/docs/codegen)**  \r\n  - You can specify viewport, device, color scheme, geolocation, locale, timezone, `auth.json` file, etc.  \r\n  - `npm run e2e:codegen`\r\n- **[LLM-Assisted Test Generation](https://www.checklyhq.com/blog/generate-end-to-end-tests-with-ai-and-playwright)**  \r\n  - Through MCP can be provided with the page state to suggest or generate test cases, enabling rapid coverage expansion.  \r\n  - Developed by Microsoft, MCP integrates well with IDEs like VS Code, making AI-assisted features (test code auto-generation, scenario suggestions, etc.) seamless.  \r\n  - Example workflow connecting Playwright test runner with MCP server:  \r\n    - Read the webpage state → LLM generates test cases automatically  \r\n    - Page Object Model is auto-created/recommended  \r\n    - Scenario execution and result feedback can be integrated  - **Playwright MCP Integrations**\r\n  - [Copilot](https://dev.to/debs_obrien/letting-playwright-mcp-explore-your-site-and-write-your-tests-mf1) / [Claude](https://kailash-pathak.medium.com/api-testing-with-llm-claude-and-playwright-mcp-model-context-protocol-a08d6ab979dd) / [Cursor](https://medium.com/\u003cat\u003ejagdalebr/supercharge-testing-with-playwright-mcp-server-and-cursor-ai-0e66f2430d11) / [Chrome Extension](https://kailash-pathak.medium.com/streamline-web-automation-with-the-playwright-mcp-chrome-extension-4ff9e43469cd)\r\n\r\n#### [Reference]\r\n- [apache/apisix-dashboard](https://github.com/apache/apisix-dashboard)\r\n- [Protractor deprecation: Angular Blog](https://blog.angular.dev/protractor-deprecation-update-august-2023-2beac7402ce0)\r\n- [Playwright Codegen](https://playwright.dev/docs/codegen)\r\n- [Playwright MCP / Generative test examples](https://playwright.dev/agents/playwright-mcp-generating-tests)\r\n- [Playwright Migration Guide](https://playwright.dev/docs/protractor)\r\n- [Playwright Reporter API / Custom reporters](https://playwright.dev/docs/api/class-reporter)\r\n\r\n### What type of PR is it?\r\nImprovement\r\nFeature\r\n\r\n### Todos\r\n- [x] The account currently logs in as **anonymous** in the local environment, but I’m not sure how to perform a tear-up with a specific account. I’ll need to look into this further. If anyone is familiar with this, I would appreciate advice. \u003c- I found `conf/shifo.ini`\r\n- [ ] Regarding coverage measurement, we could consider adopting a better approach if one exists. From what I’ve found so far, there doesn’t seem to be a tool that can automatically detect and measure coverage.\r\n- [x] The GitHub Action is running too slowly, and it seems we could improve performance by using a caching strategy. \u003c- Modify it so that it runs during Maven’s test phase and is referenced accordingly\r\n- [ ] We should discuss the approach of moving the E2E tests to a separate repository.\r\n- [ ] We need to consider how to contribute to E2E tests. Currently, the plan is as follows:\r\n  - After this PR is merged, either use [ZEPPELIN-6314](https://issues.apache.org/jira/browse/ZEPPELIN-6314) or create a. new parent issue, then manage contributions as sub-issues.  \r\n    - To avoid duplicate work, contributors can:\r\n      1. Check the `PAGES` variable in `utils` to find areas they want to work on.\r\n      2. Leave a comment and open a new sub-issue.  \r\n         - Example comment: \r\n           - \"I would like to work on testing the header area.\"\r\n           - Path: `src/app/share/header/header.component`\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6314](https://issues.apache.org/jira/browse/ZEPPELIN-6314)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N \r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5072 from dididy/feat/ZEPPELIN-6314.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "948f1652f9277a9e5b25051eee6e0674f137afd3",
      "tree": "0dfecdb2e44de920c029ed63150dc6c5b5d6c78a",
      "parents": [
        "8d18618eabbcc5ab6e27f30363712207445f499b"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Fri Sep 19 21:16:41 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 19 21:16:41 2025 +0900"
      },
      "message": "[ZEPPELIN-6265] Support classic Helium viz packages in new UI\n\n### What is this PR for?\r\nThis PR enables the use of external Helium visualization packages, which are previously available only in the classic UI, in the new UI.\r\n\r\nThe process of loading and importing Helium packages, as well as rendering them, closely follows the logic from the classic UI.\r\n\r\nSince the new-style visualization classes in the new UI are not compatible with the existing ones, the implementation branches accordingly to handle both.\r\n\r\nClassic Helium visualization packages depend on legacy technologies such as AngularJS, jQuery, and several visualization libraries, which had to be included as a result.\r\nFor Bootstrap styles, conflicts arose with existing styles, so I copied and modified the original HTML templates to prevent clashes.\r\nIf a Helium package attempts to use the original HTML template, it will be replaced with the modified version.\r\n\r\nAdditionally, I identified that the Helium visualization support classes from the discontinued development of the new UI are no longer in use, so I removed them.\r\n\r\n### What type of PR is it?\r\n\r\nImprovement\r\n\r\n### Todos\r\n* [v] - Added support for loading Helium packages\r\n* [v] - Fixed style mismatches in Helium packages\r\n* [v] - Other functional issues resolved\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6265\r\n\r\n### How should this be tested?\r\n* Enables a classic Helium visualization package in the classic UI, and verify that it works in the new UI.\r\n  - Note: The `/helium` package management page has not yet been added.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5006 from tbonelee/helium-vis.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "8d18618eabbcc5ab6e27f30363712207445f499b",
      "tree": "8e0930747f17617528cd9a059fa5557c01726540",
      "parents": [
        "3c10d379c50a682fb6aa109e7c72586309243405"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Thu Sep 18 11:45:17 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 18 11:45:17 2025 +0900"
      },
      "message": "[ZEPPELIN-6325] Add Custom TSLint Rule to Alphabetically Order Exports in public-api.ts\n\n### What is this PR for?\r\nhttps://github.com/apache/zeppelin/pull/5065#issuecomment-3266268119\r\n\r\nIn #5065, it was suggested that keeping exports sorted alphabetically would improve readability and consistency.\r\n\r\nTSLint does not provide a built-in rule for this (only `ordered-imports` exists for imports). Therefore, following the approach from #5053, I added a custom TSLint rule to enforce alphabetical ordering for exports.\r\n\r\nApplying this rule across the entire codebase would introduce many disruptive changes, so for now it is scoped only to the **public-api.ts** file.\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6325](https://issues.apache.org/jira/browse/ZEPPELIN-6325)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5071 from dididy/test/orderedExports.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "3c10d379c50a682fb6aa109e7c72586309243405",
      "tree": "47d4adb6af18d4b82290dcb151201cdefc7eedd7",
      "parents": [
        "5aa65256ff02c1d5e949892d1f1118e507df513e"
      ],
      "author": {
        "name": "Gyeongtae Park",
        "email": "gyeongtae@apache.org",
        "time": "Tue Sep 16 20:15:54 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 16 13:15:54 2025 +0200"
      },
      "message": "[ZEPPELIN-6271] Remove TravisCI-related scripts no longer in use\n\n### What is this PR for?\r\nTravisCI is no longer used in this project, so the following obsolete files have been removed:\r\n- dev/travis/save-logs.py\r\n- dev/travis/travis-install.sh\r\nThis cleanup eliminates unused CI scripts and reduces maintenance overhead.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n* [x] - Remove dev/travis/save-logs.py\r\n* [x] - Remove dev/travis/travis-install.sh\r\n\r\n### What is the Jira issue?\r\n* Jira: https://issues.apache.org/jira/browse/ZEPPELIN-6271\r\n\r\n### How should this be tested?\r\nN/A\r\n\r\n### Screenshots (if appropriate)\r\nN/A\r\n\r\n### Questions:\r\n* Does the license files need to update? No.\r\n* Is there breaking changes for older versions? No.\r\n* Does this needs documentation? No.\r\n\n\nCloses #5019 from ParkGyeongTae/ZEPPELIN-6271.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "5aa65256ff02c1d5e949892d1f1118e507df513e",
      "tree": "0bfcb06ac1119fd96a625816aceece3afd2ea9da",
      "parents": [
        "3073e3f034ab4bf59cc52881e72e318545af3f78"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Mon Sep 15 23:39:28 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 15 23:39:28 2025 +0900"
      },
      "message": "[ZEPPELIN-6315] Add a lint rule to prevent circular imports in zeppelin-web-angular\n\n### What is this PR for?\r\n\r\nCircular imports in JS/TS can make imported symbols unexpectedly `undefined` at runtime and also confuse build and tooling. This PR introduces a TSLint rule to detect circular imports and refactors imports to prevent them.\r\n\r\n- Added `tslint-no-circular-imports` and enabled the rule.\r\n- Fixed explicit circular-import violations.\r\n- Standardized import conventions and layering rules to avoid regressions.\r\n\r\n#### Import conventions\r\n\r\nTo keep dependencies simple and acyclic:\r\n\r\n1. Cross-module improts -\u003e use the modules\u0027s barrel\r\nImport from the module entry (its public API), not deep files.\r\n```ts\r\n// good\r\nimport { Foo } from \u0027\u003cat\u003ezeppelin/some-module\u0027;\r\n// bad\r\nimport { Foo } from \u0027\u003cat\u003ezeppelin/some-module/feature/foo\u0027;\r\n```\r\n- Rationale: reduces tight coupling and ad-hoc interweaving between modules.\r\n\r\n2. Intra-module imports -\u003e use relative paths\r\nInside the same module, import relatively instead of via that module\u0027s barrel.\r\n```ts\r\n// good\r\nimport { Bar } from \u0027./bar/bar.component\u0027;\r\n// bad\r\nimport { Bar } from \u0027\u003cat\u003ezeppelin/this-module\u0027;\r\n```\r\n- Rationale: prevents barrel -\u003e implementation -\u003e barrel loops that often create cycles.\r\n\r\n\u003e Terminology\r\n\u003e A \"module\" here means a directory published via a single alias like \u003cat\u003ezeppelin/{module} (one slash).\r\n\r\n#### Layering rules\r\n\r\nEnforce a single direction of dependencies. This keeps cycles out by construction.\r\nThis interpretation aims to minimize disruption to the existing structure. If you have alternative proposals, please let me know.\r\n\r\n- `core`: framework-agnostic types, tokens, and utilities.\r\n  - Can be used by anyone.\r\n  - Must not depend on `services`, `pages`, or `share`\r\n- `services`: non-UI logics\r\n  - May depend on `core`.\r\n  - Must not depend on `share` or `pages`.\r\n- `pages`: May depend on `services`, `share`, and `core`.\r\n- `share` : presentational componets, directives\r\n  - May depend on `core` and `service`\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6315](https://issues.apache.org/jira/browse/ZEPPELIN-6315)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5065 from tbonelee/circular-import.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "3073e3f034ab4bf59cc52881e72e318545af3f78",
      "tree": "7e76fb35f5a8e227c8567ede9b61eb5c2495e2b4",
      "parents": [
        "75a9caa7b6731e0c1b36aa4ff245b1e461b02d5c"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Mon Sep 15 23:28:39 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 15 23:28:39 2025 +0900"
      },
      "message": "[ZEPPELIN-6236] Prettify format to pass lint in web-angluar\n\n### What is this PR for?\r\nSome files are not prettified so that `zeppelin-web-angular` test is failing.\r\nI just reformat those files to make it pass the CI\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6326\r\n\r\n### How should this be tested?\r\nCheck zeppelin-web-angular CI\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5073 from tbonelee/prettify.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "75a9caa7b6731e0c1b36aa4ff245b1e461b02d5c",
      "tree": "3e9acbca5f687069f6fb6b1cb20cb2e25936b384",
      "parents": [
        "c9d6b133a1536fc412bb74ed4716f09420f1e9e4"
      ],
      "author": {
        "name": "YeonKyung Ryu",
        "email": "80758099+celinayk@users.noreply.github.com",
        "time": "Mon Sep 15 13:05:15 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 15 13:05:15 2025 +0900"
      },
      "message": "[ZEPPELIN-6309] Improve method by replacing JsonObject parameter\n\n### What is this PR for?\r\nRefactored the `convertPermissionsFromUsersToOwners` method in InterpreterSetting.java to improve code readability and maintainability by separating JSON parsing logic from business logic, addressing the TODO comment that identified this as \"ugly code\".\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n\r\n### Todos\r\n  * [x] - Refactor convertPermissionsFromUsersToOwners method to remove JsonObject parameter\r\n  * [x] - Extract JSON parsing logic into separate static helper method\r\n  * [x] - Update all callers to use new method signature\r\n  \r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6309](https://issues.apache.org/jira/browse/ZEPPELIN-6309)\r\n\r\n### How should this be tested?\r\n\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5063 from celinayk/ZEPPELIN-6309.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "c9d6b133a1536fc412bb74ed4716f09420f1e9e4",
      "tree": "92d31ae277d22a15c0c629094b82d469b564224b",
      "parents": [
        "0f20ffcd0f32d8195203ad871d1f4bc52f10b8c2"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Tue Sep 09 19:54:14 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 09 19:54:14 2025 +0900"
      },
      "message": "[ZEPPELIN-6319] Fixing unsupported wildcard path expansion in zeppelin-web-angular\n\n### What is this PR for?\r\nWindows cmd and does not support wildcard path expansion, which causes errors like the one below.\r\n\u003cimg width\u003d\"954\" height\u003d\"190\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/3356609d-d2a6-4135-8c35-75d35df54291\" /\u003e\r\n\r\nThis PR fixes the issue by replacing the glob pattern path argument with a specific `tsconfig.json` file for `tslint-rules/`.\r\n\r\n\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6319\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5070 from tbonelee/fix-wildcard-path.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "0f20ffcd0f32d8195203ad871d1f4bc52f10b8c2",
      "tree": "908bbdc7b28059835f7333868eda4c2604da23ef",
      "parents": [
        "4fbfaec6160f338248c44b72938ca50d38068d19"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Mon Sep 08 00:22:21 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 00:22:21 2025 +0900"
      },
      "message": "[ZEPPELIN-6203] Connect shortcut modal for info button\n\n### What is this PR for?\r\n\u003cimg width\u003d\"417\" height\u003d\"103\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/d4fca2f3-0dca-43ae-b159-ca881bd1766d\" /\u003e\r\n\r\nNothing happened when I click above info button inside of Zeppelin Notebook. So I connect this function work properly. \r\n\r\nThis button related in [here](https://github.com/apache/zeppelin/blob/526eb15b8732909ab994adba76e0c3e33bfa001c/zeppelin-web-angular/src/app/pages/workspace/notebook/action-bar/action-bar.component.ts#L239) so I made shared shortcut component and connect it. Now it works well.\r\n\r\n\r\n\u003cimg width\u003d\"1624\" height\u003d\"1056\" alt\u003d\"스크린샷 2025-07-12 오후 6 10 05\" src\u003d\"https://github.com/user-attachments/assets/d71e7264-eefb-4e80-bf4d-cf4467627d5e\" /\u003e\r\n\r\nI refer to [zeppelin-web\u0027s shortcut file](https://github.com/apache/zeppelin/blob/526eb15b8732909ab994adba76e0c3e33bfa001c/zeppelin-web/src/app/notebook/shortcut.html)\r\n\r\n### What type of PR is it?\r\nBug Fix\r\nFeature\r\nRefactoring\r\n\r\n### Todos\r\n* [x] makes html file\u0027s isMac working well\r\n* [ ] Adjust shortcut for zeppelin-web to zeppelin-web-angular / check this file for preventing weird working when user try to use shortcut // [here](https://github.com/apache/zeppelin/blob/526eb15b8732909ab994adba76e0c3e33bfa001c/zeppelin-web-angular/src/app/services/shortcut.service.ts) [ZEPPELIN-6229](https://issues.apache.org/jira/browse/ZEPPELIN-6229) [ZEPPELIN-6197](https://issues.apache.org/jira/browse/ZEPPELIN-6197)\r\n* [ ] Made \"Clone paragraph\" button work properly in New UI // [ZEPPELIN-6294](https://issues.apache.org/jira/browse/ZEPPELIN-6294)\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6203\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #4963 from dididy/fix/ZEPPELIN-6203.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "4fbfaec6160f338248c44b72938ca50d38068d19",
      "tree": "1172ea86ff9d380c59c715e0efe281c67d57798d",
      "parents": [
        "4297661d8f15453a30a898dc9151c6ab6c181e7f"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Sep 07 21:55:33 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 07 21:55:33 2025 +0900"
      },
      "message": "[ZEPPELIN-6298] Fix cursor-related issues in New UI\u0027s Paragraph\n\n### What is this PR for?\r\n**Description:**\r\nCursor behavior in the New UI’s paragraph needs to be fixed for several cursor related actions, including double-clicking, running all above/below, adding(clone), and removing paragraphs.\r\n\r\nWhen **cloneParagraph()** is called, it internally calls **addParagraph()**, which has already been tested. The same addParagraph-related code is also applied in #5044. If either PR is merged first, I will rebase accordingly. I have also confirmed that **cloneParagraph()** works correctly through #5044.\r\n\r\nDue to timing issues, I used `setTimeout` for **removeParagraph()** and **doubleClickParagraph()**. Since this is in the UI area, it likely won’t have major side effects, but I will look into it further.\r\n\r\n**Expected:**\r\n- When **doubleClickParagraph()** is executed, the cursor should move to the end of the paragraph.\r\n- When **runAllAbove()** or **runAllBelow()** is executed, the current cursor position should be remembered, and after execution, focus should return to the previous cursor position.\r\n- When **addParagraph()** is executed, the newly added paragraph should receive focus.\r\n- When **removeParagraph()** is executed, focus should move to the paragraph that takes the deleted paragraph’s place.\r\n\r\n**Actual (New UI):**\r\n- When **doubleClickParagraph()** is executed, the cursor moves to the beginning instead of the end.\r\n- After **runAllAbove()** or **runAllBelow()**, focus is lost completely.\r\n- When **addParagraph()** is executed, the new paragraph does not automatically receive focus.\r\n- After **removeParagraph()**, focus may not move to the correct paragraph.\r\n\r\n**[Appropriate action - Classic UI]**\r\n\r\nhttps://github.com/user-attachments/assets/fc0066f7-4e03-4e3b-9d5b-2f33df415ba7\r\n\r\nRun all above -\u003e Run all below -\u003e Double click .md paragraph  -\u003e Add paragraph -\u003e Delete paragraph\r\n\r\n**[AS-IS]**\r\n\r\nhttps://github.com/user-attachments/assets/f699f788-cf29-4c4c-8c47-2ef34d7962f0\r\n\r\nRun all above -\u003e Run all below -\u003e Double click .md paragraph  -\u003e Add paragraph -\u003e Delete paragraph\r\n\r\n**[TO-BE]**\r\n\r\nhttps://github.com/user-attachments/assets/1206c524-103f-4328-85ee-04408073b628\r\n\r\nRun all above -\u003e Run all below -\u003e Double click .md paragraph  -\u003e Add paragraph -\u003e Delete paragraph\r\n\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6298](https://issues.apache.org/jira/browse/ZEPPELIN-6298)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5057 from dididy/fix/ZEPPELIN-6298.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "4297661d8f15453a30a898dc9151c6ab6c181e7f",
      "tree": "cea0a1b91cee1671f34792728e04f7b69c8829a2",
      "parents": [
        "85b75502e9e6ccb1591ddbc3a0a75af8ee78827d"
      ],
      "author": {
        "name": "YeonKyung Ryu",
        "email": "80758099+celinayk@users.noreply.github.com",
        "time": "Sun Sep 07 19:44:44 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 07 19:44:44 2025 +0900"
      },
      "message": "[ZEPPELIN-6308] Extract hardcoded py4j values to constants\n\n### What is this PR for?\r\nThis PR extracts hardcoded py4j values to constants in Python interpreters to improve maintainability. It creates a new PythonConstants class to centralize py4j version and file path constants, replacing hardcoded strings across multiple Python interpreter classes. This addresses the TODO comment requesting to avoid hardcoded py4j values.\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n\r\n### Todos\r\n* [x] - Create PythonConstants class with py4j constants\r\n* [x] - Replace hardcoded py4j values in IPythonInterpreter\r\n* [x] - Replace hardcoded py4j values in PythonInterpreter\r\n* [x] - Replace hardcoded py4j values in PythonDockerInterpreter\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6308](https://issues.apache.org/jira/browse/ZEPPELIN-6308)\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5056 from celinayk/ZEPPELIN-6308.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "85b75502e9e6ccb1591ddbc3a0a75af8ee78827d",
      "tree": "2fd58bfe8d0bcb580e6c004371ba6132ceb1d185",
      "parents": [
        "bd5aac87782b4ed7a60ac0740d81f21fafbbb3e5"
      ],
      "author": {
        "name": "eunhwa99",
        "email": "68810660+eunhwa99@users.noreply.github.com",
        "time": "Sun Sep 07 17:37:36 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 07 17:37:36 2025 +0900"
      },
      "message": "[ZEPPELIN-6306] Prevent NPE in StaticRepl by fail-fast JavaCompiler check\n\n### What is this PR for?\r\n- ToolProvider.getSystemJavaCompiler() can return null in JRE environments.\r\n- Added a fail-fast null check in StaticRepl to throw a clear exception early.\r\n- Updated unit test to reflect this behavior.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n* [ ] - Task\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6306](https://issues.apache.org/jira/browse/ZEPPELIN-6306)\r\n\r\n### How should this be tested?\r\n*  Run the existing unit test `testJDKCompilerAvailability()` to ensure the compiler is available in JDK.\r\n* Run all Zeppelin unit tests to confirm no regressions.\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? no\r\n* Is there breaking changes for older versions? no\r\n* Does this needs documentation? no\r\n\n\nCloses #5069 from eunhwa99/ZEPPELIN-6306.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "bd5aac87782b4ed7a60ac0740d81f21fafbbb3e5",
      "tree": "8898b93eb03dc8bbcd36bb4b3a395c761a64d638",
      "parents": [
        "65fd70fd3521f607eee066a7bf3ad5c71f9cd69b"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Sep 07 13:04:21 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 07 13:04:21 2025 +0900"
      },
      "message": "[ZEPPELIN-6317] Fix responsive layout issue of the control action bar in New UI\n\n### What is this PR for?\r\nIn the Classic UI, when the window width was reduced, the top control bar area expanded vertically without breaking and did not overlap with paragraphs. However, in the New UI, the control bar layout breaks, its height is not flexible, and due to its fixed height, some paragraph buttons become unclickable.\r\n\r\n**[Appropriate action - Classic UI]**\r\n\r\nhttps://github.com/user-attachments/assets/117660db-ffae-41b6-a4ac-acec5b26389e\r\n\r\n\r\n**[AS-IS]**\r\n\r\nhttps://github.com/user-attachments/assets/228ee02d-e516-4db5-bd0c-5bcb79fabf5a\r\n\r\n\r\n**[TO-BE]**\r\n\r\nhttps://github.com/user-attachments/assets/a7bfee29-8878-4c45-9e85-ddf7532ab67a\r\n\r\n### What type of PR is it?\r\nBug Fix\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6317](https://issues.apache.org/jira/browse/ZEPPELIN-6317)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5067 from dididy/fix/ZEPPELIN-6317.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "65fd70fd3521f607eee066a7bf3ad5c71f9cd69b",
      "tree": "f84f667d995ebb7143d4cc84f4200deef0385660",
      "parents": [
        "078b754ad6abdb74148480f9364920b4a1853085"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sun Sep 07 13:03:34 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 07 13:03:34 2025 +0900"
      },
      "message": "[ZEPPELIN-6197] 6229] Fixed the shortcuts in the New UI so that they match the Classic UI and work correctly\n\n### What is this PR for?\r\nUnlike the Classic UI, the New UI either lacked implementations for several shortcuts or had shortcuts assigned differently from the Classic UI. I consider this a significant issue, and after addressing other related derivative issues, I am finally submitting it.\r\n\r\n#### d96ae5bde - Remove the top margin in the editor search\r\n[AS-IS]\r\n\u003cimg width\u003d\"671\" height\u003d\"136\" alt\u003d\"스크린샷 2025-09-01 오후 11 26 14\" src\u003d\"https://github.com/user-attachments/assets/fcd0a107-4b22-42f2-978f-f0781c5fd675\" /\u003e\r\n[TO-BE]\r\n\u003cimg width\u003d\"669\" height\u003d\"136\" alt\u003d\"스크린샷 2025-09-01 오후 11 26 23\" src\u003d\"https://github.com/user-attachments/assets/475c05e6-ffae-4410-920f-7b0a9e44388d\" /\u003e\r\n\r\nFixed an issue where the top area increased by 33px when search was activated. \u003c- [referece](https://github.com/microsoft/monaco-editor/blob/5a7ba61be909ae9e4889768a3453ebb0dec392e2/monaco-editor/typedoc/monaco.d.ts#L3473)\r\n\r\n#### 0d24eb420 - Handle focus on PARAGRAPH_MOVED receive\r\nWhen performing \"Move Paragraph Up\" or \"Move Paragraph Down,\" the paragraph moves up or down after receiving `PARAGRAPH_MOVED`. During this process, focus was being skipped, so I added it.\r\n\r\n#### 1d3d294bc - Overriding shortcuts conflict with the editor\r\nIn the New UI, we use the Monaco editor, where reserved shortcuts had to be explicitly overridden. I added shortcut functionality for four actions: \"Toggle Editor\", \"Cut the Line\", \"Paste the Line\", and \"Search Inside the Code\".\r\n\r\n#### 57f45e1e8 - Make action bar searchCode accessible to siblings\r\nThere are `paragraph.component.ts` and `action-bar.component.ts` that share `notebook.component.ts` as their parent. In the Classic UI, \"Find in Code\" is a shortcut that activates the search button in the action-bar. Although this functionality is currently marked as [TODO](https://github.com/dididy/zeppelin/blob/fix/ZEPPELIN-6197/6229/zeppelin-web-angular/src/app/pages/workspace/notebook/action-bar/action-bar.component.ts#L220-L222)([ZEPPELIN-6279](https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView\u003d632\u0026view\u003ddetail\u0026selectedIssue\u003dZEPPELIN-6279)) in the New UI, I set up the connection by adding a Template Reference Variable and Event Binding in `notebook.component.html`. With this setup, `paragraph.component.ts` can invoke the **searchCode()** method of `action-bar.component.ts`.\r\n\r\n#### b027a33 - Ensure shortcut keys work correctly\r\n\u003cimg width\u003d\"605\" height\u003d\"1088\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/2c4bc264-07e5-4abe-93bb-a2656a86527b\" /\u003e\r\n\r\nAll shortcut orders have been updated based on the Classic UI. There was logic to handle key bindings differently for macOS, but upon review, it was unnecessary and has been removed. On macOS, typing a combination of Alt and an English letter can produce a different character, so to ensure correct behavior, this resulting character combination is included in the shortcut handling. I added several actions that were not yet implemented.\r\n\r\nThe distinction between command mode and edit mode for shortcuts was meaningless, so it was removed. The original implementation seemed intended to mimic a vi-like behavior, but this would have made the shortcut system different from the Classic UI.\r\n\r\nIn the Classic UI, \"Auto Completion\" had a shortcut to trigger it manually. In the New UI, auto completion is triggered automatically when typing, so \"Auto Completion\" shortcut was unnecessary and has been removed in this PR.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6197](https://issues.apache.org/jira/browse/ZEPPELIN-6197)]\r\n* [[ZEPPELIN-6229](https://issues.apache.org/jira/browse/ZEPPELIN-6229)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5064 from dididy/fix/ZEPPELIN-6197/6229.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "078b754ad6abdb74148480f9364920b4a1853085",
      "tree": "28ee736cf082fd1aeea7246ae443eeb91efbd115",
      "parents": [
        "7110bed788b51bfcd5e891f44dcc77335f0599bd"
      ],
      "author": {
        "name": "Juyeon",
        "email": "proceane1@gmail.com",
        "time": "Sat Sep 06 20:37:39 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 06 20:37:39 2025 +0900"
      },
      "message": "[ZEPPELIN-6282] Add null check condition\n\n### What is this PR for?\r\nThis PR was created to prevent an error that occurs in the `InterpreterSetting.getInterpreterGroup` method when `groupId` is null and is retrieved from the Set.\r\nNormally, the groupId parameter does not seem to be passed as null.\r\nI found it when tested service shutdown(#4965).\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n* [x] - Add null check condition\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6282\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5026 from proceane/feature/ZEPPELIN-6282.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "7110bed788b51bfcd5e891f44dcc77335f0599bd",
      "tree": "0d11507810d07bb2761e646e00acae0236d4cb5c",
      "parents": [
        "320c1a20a492251eedbed79341810a5175f16831"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Sep 06 16:53:19 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 06 16:53:19 2025 +0900"
      },
      "message": "[ZEPPELIN-6305] Modify package.json so that lint and prettier cover projects folder\n\n### What is this PR for?\r\n\u003e This PR for **zeppeling-web-angular**\r\n\r\nIn `npm run lint`, `projects folder` is linted using ng, but `prettier` only checks the `src folder`. In `lint-staged`, neither lint nor `prettier` checks the `projects folder`. This seems to need fixing.\r\n\r\nBecause `ng lint --fix` is not supported, I added a `lint:fix` script to run `tslint` with the `--fix` option. \r\n\r\nSince src and projects folders need to reference different tslint configs, I added the corresponding option to `lint-staged`.\r\n\r\n### What type of PR is it?\r\n\r\nBug Fix\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6305](https://issues.apache.org/jira/browse/ZEPPELIN-6305)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\n\nCloses #5054 from dididy/fix/ZEPPELIN-6305.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "320c1a20a492251eedbed79341810a5175f16831",
      "tree": "060b910dd281c51422cca133a36b284ad40b2d9b",
      "parents": [
        "f45587db39531b885343122f83ecb20f16bd7f0e"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Sep 06 16:04:00 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 06 16:04:00 2025 +0900"
      },
      "message": "[ZEPPELIN-6138] Add .nvmrc to set node v16.20.2 for Zeppelin client\n\n### What is this PR for?\r\nUsing a `.nvmrc` file allows people using `nvm` to easily specify and switch to the desired Node version. In my work, I often use different Node versions for Zeppelin and other projects, and switching between them every time can be cumbersome. Setting up a `.nvmrc` would automate this process, making it much more convenient. It would also allow `nvm` users to not worry about the Node version, thereby reducing unnecessary overhead.\r\n\r\nhttps://github.com/apache/superset/blob/master/docs/.nvmrc\r\n\r\nI looked at other Apache projects and found that Superset already uses a `.nvmrc` file. Therefore, it would be beneficial to apply the same to Zeppelin. And in this PR, I pinned Node to version **16.20.2** for both **zeppelin-web** and **zeppelin-web-angular**, the latest release of Node 16, using `.nvmrc`.\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6318](https://issues.apache.org/jira/browse/ZEPPELIN-6318)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5068 from dididy/chore/ZEPPELIN-6318.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "f45587db39531b885343122f83ecb20f16bd7f0e",
      "tree": "5aa356f7720a8fb224ba9ba7b26a6b7683962e72",
      "parents": [
        "3a0e42131b24d6e216031d2213349ef35a3303ae"
      ],
      "author": {
        "name": "eunhwa99",
        "email": "68810660+eunhwa99@users.noreply.github.com",
        "time": "Fri Sep 05 14:40:13 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 05 14:40:13 2025 +0900"
      },
      "message": "[ZEPPELIN-6299] Refactor StaticRepl for readability, correctness, and modern Java usage\n\n### What is this PR for?\r\nThis PR refactors the `StaticRepl` class to improve readability, maintainability, and align with modern Java best practices.  \r\nThere are no functional changes.  \r\n\r\n- Generic type refinement with diamond operator in loop:  Adds type safety by explicitly specifying the generic type. Prevents unchecked warnings and makes the code clearer to readers and tools.\r\n- Replace `Arrays.asList` to `List.of` :  List.of (Java 9+) produces an immutable list, which is safer and better communicates the intent that the list will not be modified. It avoids side effects of Arrays.asList, which is fixed-size and backed by the original array.\r\n- Minor typos fixed: Corrected spelling mistakes and adjusted comments.\r\n-  Removes redundant boolean comparison to follow standard Java coding conventions.\r\n- Replace index-based loop with enhanced for-each to eliminate boilerplate index management, improves readability, and reduces chances of off-by-one errors. It makes the intent (\"iterate all elements\") clearer.\r\n- Variable declaration moved closer to usage to improve code locality and readability by reducing variable scope. This makes the code easier to maintain and follow.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n* [ ] - Task\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6299](https://issues.apache.org/jira/browse/ZEPPELIN-6299)  \r\n\r\n### How should this be tested?\r\n* Run existing unit tests to confirm behavior remains unchanged.  \r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5048 from eunhwa99/ZEPPELIN-6299.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "3a0e42131b24d6e216031d2213349ef35a3303ae",
      "tree": "5489cd7e5224fb22bba1ec129969f27f150f2585",
      "parents": [
        "a0ef5b8096e49b7a7705374544b0efece3f02228"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Fri Sep 05 07:49:37 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 05 07:49:37 2025 +0900"
      },
      "message": "[ZEPPELIN-6316] Fix broken tests caused by field name change\n\n### What is this PR for?\r\nAfter a field name change in `NewNoteRequest`, several tests are failing.\r\n\r\n```\r\nError: Failures:\r\nError: NotebookRestApiTest.testCreateNote:555-\u003elambda$testCreateNote$17:557 expected: \u003ctest1\u003e but was: \u003cUntitled Note\u003e\r\nError: ZeppelinRestApiTest.testCloneNote:440-\u003elambda$testCloneNote$8:443 Compare note names \u003d\u003d\u003e expected: \u003cclone Note Name\u003e but was: \u003cCloned Note_2M6SWJ8WV\u003e\r\nError: ZeppelinRestApiTest.testNoteCreateWithName:159-\u003etestNoteCreate:235-\u003elambda$testNoteCreate$2:245 compare note name \u003d\u003d\u003e expected: \u003cTest note name\u003e but was: \u003cUntitled Note\u003e\r\nError: ZeppelinRestApiTest.testNoteCreateWithParagraphs:181 test note create method:\r\n```\r\nRelated Issue: #5055 \r\n\r\n\r\n### What type of PR is it?\r\nFixing broken tests\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6316](https://issues.apache.org/jira/browse/ZEPPELIN-6316)\r\n\r\n### How should this be tested?\r\n- Check if tests success in `core-modules` job.\r\n  - `NotebookRestApiTest.testCreateNote`\r\n  - `ZeppelinRestApiTest.testCloneNote`\r\n  - `ZeppelinRestApiTest.testNoteCreateWithName`\r\n  - `ZeppelinRestApiTest.testNoteCreateWithParagraphs`\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5066 from tbonelee/fix-tests.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "a0ef5b8096e49b7a7705374544b0efece3f02228",
      "tree": "6df6fae897652c6418665a3b0b618b3c4d35afa0",
      "parents": [
        "96e2c65018a1f8f7b035e09cf646d8448891c2a1"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Tue Sep 02 23:44:59 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 02 23:44:59 2025 +0900"
      },
      "message": "[ZEPPELIN-6304] Changes to interpreter bindings are not reflected when reopening the binding settings\n\n### What is this PR for?\r\n**Description:**\r\nChanging the interpreter for a paragraph did not update the binding list area when clicking the `Interpreter Binding` button in the **action bar**. Although the server had the correct values, the client did not call the update function.\r\n\r\n**[Appropriate action - Classic UI]**\r\n\r\nhttps://github.com/user-attachments/assets/f2bbb602-056f-4f09-8015-e0268233f246\r\n\r\n**[AS-IS]**\r\n\r\nhttps://github.com/user-attachments/assets/38b41567-eccd-47b6-942d-afa603d86dff\r\n\r\n**[TO-BE]**\r\n\r\nhttps://github.com/user-attachments/assets/b9959eb8-5408-49fb-a9e5-15a725ca048a\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6304](https://issues.apache.org/jira/browse/ZEPPELIN-6304)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5061 from dididy/fix/ZEPPELIN-6304.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "96e2c65018a1f8f7b035e09cf646d8448891c2a1",
      "tree": "a01c051dacb1280e473dc4c0e906200c9f91ca50",
      "parents": [
        "093648f1411e34874dea40fdd795b8f8b2ba74e3"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Tue Sep 02 22:44:40 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 02 22:44:40 2025 +0900"
      },
      "message": "[ZEPPELIN-6310] When paragraph to edit, word wrap doesn\u0027t work\n\n### What is this PR for?\r\n**Description:**\r\nYou can check that in the Classic UI, word wrap is applied when editing an paragraph, but in the New UI it is not, which makes editing difficult. From a user’s perspective, the lack of word wrap can make editing both inconvenient and confusing, so this issue should be addressed. Also, in the case of .md files, word wrap is applied when the file is executed, but it is not applied when editing, which seems to cause an inconsistency.\r\n\r\n**[Appropriate action - Classic UI]**\r\n\r\nhttps://github.com/user-attachments/assets/064d883d-0b3e-44cb-9448-bc00848bae78\r\n\r\n**[AS-IS]**\r\n\r\nhttps://github.com/user-attachments/assets/3084b82a-a8fd-492f-8ef0-3fa421f92e99\r\n\r\n**[TO-BE]**\r\n\r\nhttps://github.com/user-attachments/assets/8b8db68b-9373-41d1-b091-57599b34a4f2\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6310](https://issues.apache.org/jira/browse/ZEPPELIN-6310)]\r\n\r\n### How should this be tested?\r\n* Strongly recommended: add automated unit tests for any new or changed behavior\r\n* Outline any manual steps to test the PR here.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\n\nCloses #5058 from dididy/fix/ZEPPELIN-6310.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "093648f1411e34874dea40fdd795b8f8b2ba74e3",
      "tree": "3b4d06fdbef3ec29e79767a63e52ddef6a0c0e6c",
      "parents": [
        "225f8a07fac3bfb22d543b9f5c5283495eb911b5"
      ],
      "author": {
        "name": "Paul Zhang",
        "email": "xzhangyao@126.com",
        "time": "Mon Sep 01 20:53:39 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 01 21:53:39 2025 +0900"
      },
      "message": "[MINOR] Update java version check that only allows java 11 or newer\n\n### What is this PR for?\r\nUpdate java version check that only allows java 11 or newer\r\n\r\n### What type of PR is it?\r\n\r\nHot Fix\r\n\r\n\r\n### Todos\r\nN/A\r\n\r\n### What is the Jira issue?\r\nN/A\r\n\r\n### How should this be tested?\r\nManually tested.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5051 from paul8263/java-check.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "225f8a07fac3bfb22d543b9f5c5283495eb911b5",
      "tree": "4eda88c35af9bdd57b88fcc2417c261437056aff",
      "parents": [
        "d6ec9741bf1596b0fc5721b82e57b0c8ef5ff2e5"
      ],
      "author": {
        "name": "Paul Zhang",
        "email": "xzhangyao@126.com",
        "time": "Mon Sep 01 20:51:32 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 01 21:51:32 2025 +0900"
      },
      "message": "[ZEPPELIN-6295] Add configurations that allow LDAP users map directly to role\n\n### What is this PR for?\r\n\r\nAdd configurations that allow LDAP users map directly to the role\r\n\r\n### What type of PR is it?\r\n\r\nImprovement\r\n\r\n\r\n### Todos\r\nN/A\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6295](https://issues.apache.org/jira/browse/ZEPPELIN-6295)\r\n\r\n### How should this be tested?\r\n\r\nAdded unit tests \u0026 compiled and tested manually.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? Yes. And the doc has been updated.\r\n\n\nCloses #5046 from paul8263/ZEPPELIN-6295.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "d6ec9741bf1596b0fc5721b82e57b0c8ef5ff2e5",
      "tree": "5fc0b5ac85c8b77fde0520f6bb4188a997c93a65",
      "parents": [
        "f4f8a72a5f3f29fb1086f1dc9e8eb31cb40f8e18"
      ],
      "author": {
        "name": "YeonKyung Ryu",
        "email": "80758099+celinayk@users.noreply.github.com",
        "time": "Sat Aug 30 23:46:10 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 30 23:46:10 2025 +0900"
      },
      "message": "[ZEPPELIN-6307] Rename fieldname in NewNoteRequest class\n\n### What is this PR for?\r\nThis PR renames the field \u0027name\u0027 to \u0027notePath\u0027 in the NewNoteRequest class to better reflect its purpose. The field actually represents the note\u0027s path rather than just a name, making the code more semantically clear and addressing the TODO comment that requested this change.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n\r\n### Todos\r\n* [x] - Rename field \u0027name\u0027 to \u0027notePath\u0027 in NewNoteRequest class\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6307](https://issues.apache.org/jira/browse/ZEPPELIN-6307)\r\n\r\n### How should this be tested?\r\n\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5055 from celinayk/ZEPPELIN-6307.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "f4f8a72a5f3f29fb1086f1dc9e8eb31cb40f8e18",
      "tree": "423acabdc937bb72e30bcb19f7560765da67797b",
      "parents": [
        "ade854e2e82fb2834a138485a5d4316edec0c83f"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Sat Aug 30 23:40:45 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 30 23:40:45 2025 +0900"
      },
      "message": "[ZEPPELIN-6301] Add tslint custom rule about ensure the order in constructor\n\n### What is this PR for?\r\nhttps://github.com/apache/zeppelin/pull/5045#discussion_r2300816684\r\n\r\nFollowing above PR, I received feedback from a committer suggesting that constructor parameters should be ordered as public → protected → private.\r\nI found it deeply but there was no existing TSLint rule for this, So I implemented a custom rule. ([zeppelin-web-angular/tslint-rules/constructorParamsOrderRule.ts](https://github.com/apache/zeppelin/pull/5053/files#diff-2e35dbfe878aa60da74ba9c5399ab6e1ea53eef07a47aef0bc7ff0f95651f31b)) \r\n\r\nIt works as intended, and I ran lint --fix with the new rule and confirmed that it was applied correctly. The modified files are also included in this PR. \r\n\r\nIf you want to test it just follow below command.\r\n\r\n```sh\r\n// Base Dir: ./zeppelin/zeppelin-web-angular\r\nnpm run lint\r\n```\r\nor\r\n```sh\r\n// Base Dir: ./zeppelin/zeppelin-web-angular\r\nnpx tslint -c tslint.json \u0027src/**/*.ts\u0027 --fix\r\n```\r\n\r\nYou can build the lint rule file using the command below\r\n\r\n```sh\r\n// Base Dir: ./zeppelin/zeppelin-web-angular/tslint-rules\r\nnpx tsc constructorParamsOrderRule.ts\r\n```\r\n\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6301](https://issues.apache.org/jira/browse/ZEPPELIN-6301)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5053 from dididy/fix/ZEPPELIN-6301.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "ade854e2e82fb2834a138485a5d4316edec0c83f",
      "tree": "8ac62ae64f3ea854a6b918eb76685d128ab40cba",
      "parents": [
        "279af4f3229f6bc975c803bc3e5131cb62cf70b7"
      ],
      "author": {
        "name": "Yuijin Kim(yuikim)",
        "email": "106499310+kmularise@users.noreply.github.com",
        "time": "Thu Aug 28 22:09:07 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 28 22:09:07 2025 +0900"
      },
      "message": "[ZEPPELIN-6234] fix: table() function not working\n\n### What is this PR for?\r\nThis PR introduces the ensureTableFunction() method to enhance compatibility with mongosh (MongoDB Shell) in the Apache Zeppelin Mongo interpreter context. Previously, the .table() function was attached to DBQuery.prototype, which may not be sufficient in newer MongoDB environments where command cursors or altered prototypes are used.\r\nThe new method safely injects the .table() utility function into relevant cursor prototypes at runtime, ensuring table rendering works as expected even under mongosh.\r\n\r\nAdditionally, the changes:\r\n\r\n- Introduce safer prototype extension using a dummy cursor check.\r\n- Preserve the original behavior for backwards compatibility.\r\n- Avoid redundant registration in unsupported environments.\r\n\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n* [x] - Add ensureTableFunction() for dynamic prototype injection\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6234](https://issues.apache.org/jira/browse/ZEPPELIN-6234): MongoDB interpreter: .table() function not working\r\n\r\n### How should this be tested?\r\n1. Use Apache Zeppelin with the MongoDB interpreter.\r\n2. Connect to a MongoDB 8.x instance using mongosh.\r\n3. Execute a standard query with .table():\r\n```js\r\ndb.collection.find().table()\r\n```\r\n\r\n4. Verify:\r\n- `%table` format renders properly in Zeppelin UI.\r\n- No registration or prototype errors occur in shell.\r\n- Legacy Mongo Shells continue to function as before.\r\n\r\n### Screenshots (if appropriate)\r\n\u003cimg width\u003d\"510\" height\u003d\"270\" alt\u003d\"Pasted Graphic\" src\u003d\"https://github.com/user-attachments/assets/9da70f3e-739a-46fa-819a-b8877de213cc\" /\u003e\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No. The solution maintains backward compatibility.\r\n* Does this needs documentation? Optional. Could be mentioned in Mongo interpreter tips or mongosh compatibility notes.\r\n\n\nCloses #4987 from kmularise/ZEPPELIN-6234.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "279af4f3229f6bc975c803bc3e5131cb62cf70b7",
      "tree": "ba8c572a1cd00f098637b0741a9a39cc99a19e93",
      "parents": [
        "fbd94da456288b50b1290e233ada41879e9e62aa"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Thu Aug 28 21:14:03 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 28 21:14:03 2025 +0900"
      },
      "message": "[ZEPPELIN-6302] Route to home when click note trash button in New UI\n\n### What is this PR for?\r\n**[Appropriate action - Classic UI]**\r\n\r\nhttps://github.com/user-attachments/assets/b47c3c60-a7f3-45ef-b438-7aadd127134a\r\n\r\nIn the Classic UI, clicking the trash button takes me to the home screen.\r\n\r\n\r\n\r\n**[AS-IS]**\r\n\r\nhttps://github.com/user-attachments/assets/f4b7d08d-ee33-4c8d-aeda-bb31ebb570db\r\n\r\nHowever, it doesn’t work in the New UI(delete action works well, but it doesn’t navigate to the home screen), so it needs to be fixed.\r\n\r\n**[TO-BE]**\r\n\r\n\r\nhttps://github.com/user-attachments/assets/c97d9ebd-d75d-47fa-b1ee-55d502058494\r\n\r\n\r\n\r\n\r\n\r\nI solved it by adding a very simple routing code into the note deletion logic.\r\n\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6302](https://issues.apache.org/jira/browse/ZEPPELIN-6302)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5050 from dididy/fix/ZEPPELIN-6302.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "fbd94da456288b50b1290e233ada41879e9e62aa",
      "tree": "a24486d3e305722bb21445612ef33ea1147110fe",
      "parents": [
        "1f8e7635534967d54903cc342c3aa41bb8833f5b"
      ],
      "author": {
        "name": "Yeonhee Hayden Kim",
        "email": "devyeony@gmail.com",
        "time": "Thu Aug 28 21:11:26 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 28 21:11:26 2025 +0900"
      },
      "message": "[ZEPPELIN-6216] Show clear message when job manager is disabled instead of infinite loading\n\n\u003e This PR is a rebased version of [#5022](https://github.com/apache/zeppelin/pull/5022)\r\n\u003e The previous PR was automatically closed because the branch was deleted, so I recreated the branch and opened this new PR.  \r\n\r\n### What is this PR for?\r\nThis PR fixes the issue that occurs when `zeppelin.jobmanager.enable` is set to `false`. In this case, the server sends no response, causing the Job Manager page in both classic and new UIs to show an infinite loading indicator. This behavior confuses users and gives the impression that the page is broken.\r\n\r\nTo improve user experience, this PR introduces explicit server-side handling that returns an explicit \"not allowed\" response when the Job Manager is disabled via configuration. Additionally, both classic and new UIs have been updated to properly handle this response and display a user-friendly message: **\"Job Manager is disabled in the current configuration.\"**\r\n\r\nThis change ensures users are informed about the disabled state instead of encountering an endless loading screen.\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n\r\n### Todos\r\n* [x] Implement server-side forbidden response when Job Manager is disabled\r\n* [x] Add `JOB_MANAGER_DISABLED` WebSocket message and corresponding handling in both Classic and New UI\r\n* [x] Add unit and integration tests covering the new behavior\r\n\r\n**Note:** \r\n* Although REST API tests have been implemented, the current frontend (both Classic and New UI) interacts with the Job Manager primarily through WebSocket communication. Therefore, the functional verification and actual handling of the \"Job Manager disabled\" scenario have been focused on the WebSocket path. The REST API tests are prepared to ensure future compatibility if the REST endpoints are used.\r\n* In the user-request handling method, a ForbiddenException triggers sending a clear error message to the client so the UI can inform the user that the Job Manager is disabled. However, during broadcast events where no direct client request is involved, the exception is logged at debug level and silently skipped to avoid unnecessary noise or client interruptions.\r\n\r\n\r\n### What is the Jira issue?\r\n[[ZEPPELIN-6216]](https://issues.apache.org/jira/browse/ZEPPELIN-6216)\r\n\r\n\r\n### How should this be tested?\r\n* Automated tests have been added to cover the new behavior when the Job Manager is disabled:\r\n  * Unit tests in `JobManagerServiceTest` verify that forbidden exceptions are thrown.\r\n  * REST API tests in `NotebookRestApiTest` check that HTTP 403 responses with appropriate messages are returned.\r\n  * WebSocket and server event handling tests in `NotebookServerTest` ensure no unexpected exceptions occur and proper notification messages are sent.\r\n* Manual testing steps:\r\n  1. Set `zeppelin.jobmanager.enable` to `false` via `ZeppelinConfiguration`.\r\n  2. Access the Job Manager page in both classic and new UI.\r\n  3. Confirm that instead of infinite loading, a clear message stating **\"Job Manager is disabled in the current configuration.\"** is displayed.\r\n\r\n\r\n### Screenshots (if appropriate)\r\n* AS-IS (New UI)\r\n\u003cimg width\u003d\"862\" height\u003d\"362\" alt\u003d\"AS-IS NEW UI\" src\u003d\"https://github.com/user-attachments/assets/e2a1288f-5952-4ea0-a31b-a267f49f171e\" /\u003e\r\n\r\n* AS-IS (Classic UI)\r\n\u003cimg width\u003d\"864\" height\u003d\"424\" alt\u003d\"AS-IS CLASSIC UI\" src\u003d\"https://github.com/user-attachments/assets/bc111aff-e95c-4427-a266-af7f9f600407\" /\u003e\r\n\r\n* TO-BE (New UI)\r\n\u003cimg width\u003d\"870\" height\u003d\"305\" alt\u003d\"TO-BE NEW UI\" src\u003d\"https://github.com/user-attachments/assets/0555e5dc-2ee8-4000-b1eb-c7d2259e96b1\" /\u003e\r\n\r\n* TO-BE (Classic UI)\r\n\u003cimg width\u003d\"875\" height\u003d\"275\" alt\u003d\"TO-BE CLASSIC UI\" src\u003d\"https://github.com/user-attachments/assets/e0a87e98-fde8-467b-9df3-d9ada39deb36\" /\u003e\r\n\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\n\nCloses #5035 from devyeony/feature/ZEPPELIN-6216.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "1f8e7635534967d54903cc342c3aa41bb8833f5b",
      "tree": "5a4efe7ea4b7d077074e08658dca0b8feca731aa",
      "parents": [
        "f541b461151d06244f36ac65777fd236170ba001"
      ],
      "author": {
        "name": "강현욱",
        "email": "43662405+hyunw9@users.noreply.github.com",
        "time": "Wed Aug 27 21:48:44 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 27 20:48:44 2025 +0800"
      },
      "message": "[ZEPPELIN-6303] Align JDK requirement to 11 in build guide\n\n### What is this PR for?\r\n\r\nCurrently, the `how_to_build.md` documentation specifies that **Java 1.8** is required to build Zeppelin from source.\r\n\r\nHowever, the project\u0027s root `pom.xml` file defines the `java.version` property as **11**.\r\n\r\nThis discrepancy can confuse new contributors, leading them to set up an incorrect development environment and encounter build failures.\r\n\r\nhttps://github.com/apache/zeppelin/blob/f541b461151d06244f36ac65777fd236170ba001/pom.xml#L100\r\n\r\n- In `docs/setup/basics/how_to_build.md`:\r\n  - Change the required JDK version from `1.8` to `11`.\r\n  - Update the sample installation command from `openjdk-8-jdk` to `openjdk-11-jdk`.\r\n  \r\n\r\n### What type of PR is it?\r\nDocumentation\r\n\r\n### Todos\r\n* [x] - Update how_to_build.md docs\r\n\r\n### What is the Jira issue?\r\n[[ZEPPELIN-6303]](https://issues.apache.org/jira/browse/ZEPPELIN-6303)\r\n\r\n### How should this be tested?\r\nThis is a trivial documentation update, so if the current CI passes, there’s no need for additional unit tests.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? - No\r\n* Is there breaking changes for older versions? - No\r\n* Does this needs documentation? - No\r\n\n\nCloses #5052 from hyunw9/ZEPPELIN-6303.\n\nSigned-off-by: Cheng Pan \u003cchengpan@apache.org\u003e"
    },
    {
      "commit": "f541b461151d06244f36ac65777fd236170ba001",
      "tree": "5111bc48bd789964d134ba19d862d80ad8704850",
      "parents": [
        "8d73bfc50c5746913b762a5d83acf6d9628efc10"
      ],
      "author": {
        "name": "YONGJAE LEE(이용재)",
        "email": "dev.yongjaelee@gmail.com",
        "time": "Wed Aug 27 20:01:33 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 27 20:01:33 2025 +0900"
      },
      "message": "[ZEPPELIN-6296] Modify New UI when entering a note, the note name is displayed in the page title\n\n### What is this PR for?\r\n**[Appropriate action - Classic UI]**\r\n\r\n\u003cimg width\u003d\"1382\" height\u003d\"487\" alt\u003d\"스크린샷 2025-08-25 오후 9 18 14\" src\u003d\"https://github.com/user-attachments/assets/5fc7010e-8e99-49de-a7fd-1a5db3bd4c42\" /\u003e\r\n\r\nIn Classic UI, the tab title is displayed as “Zeppelin” on the main page. However, when entering a note, the title changes to the note’s name (left tab: main, right tab: note view).\r\n\r\n**[AS-IS]**\r\n\u003cimg width\u003d\"1382\" height\u003d\"487\" alt\u003d\"스크린샷 2025-08-25 오후 9 19 04\" src\u003d\"https://github.com/user-attachments/assets/acbabffb-6c0a-424b-837e-713e0081672d\" /\u003e\r\n\r\nIn contrast, in the New UI the page title is fixed as “Zeppelin” on all pages. It seems necessary to modify this to behave like the Classic UI.\r\n\r\n**[TO-BE]**\r\n\u003cimg width\u003d\"1382\" height\u003d\"487\" alt\u003d\"스크린샷 2025-08-25 오후 9 41 57\" src\u003d\"https://github.com/user-attachments/assets/b601f346-8fcb-49b6-b9c1-cacd95aaadae\" /\u003e\r\n\r\nI fixed it to work properly by using the existing \u003cat\u003eangular/platform-browser package’s \"Title\".\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6296](https://issues.apache.org/jira/browse/ZEPPELIN-6296)]\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5045 from dididy/fix/ZEPPELIN-6296.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "8d73bfc50c5746913b762a5d83acf6d9628efc10",
      "tree": "2375c5a2c31973e9d8fa3f4c92e8c2ce9f462aae",
      "parents": [
        "0f92acc64a4165ec9ad3962aa8e8790c82b60993"
      ],
      "author": {
        "name": "eunhwa99",
        "email": "68810660+eunhwa99@users.noreply.github.com",
        "time": "Tue Aug 26 22:59:11 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 15:59:11 2025 +0200"
      },
      "message": "[ZEPPELIN-6300] Replace deprecated StringUtils.equals to Strings.CS.equals\n\n### What is this PR for?\r\nReplaces deprecated `StringUtils.equals` with `Strings.CS.equals` in `NotebookServer` for null-safe comparison.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n* [ ] - Task\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6300](https://issues.apache.org/jira/browse/ZEPPELIN-6300)\r\n\r\n### How should this be tested?\r\n* Run existing unit tests for `NotebookServer` to confirm behavior is unchanged. \r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5049 from eunhwa99/ZEPPELIN-6300.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "0f92acc64a4165ec9ad3962aa8e8790c82b60993",
      "tree": "cf7cdf7e27774c18e9d2104b83cddf738143bbc5",
      "parents": [
        "a14243ca354d41af19e9cc2b7ad5383eef38ed64"
      ],
      "author": {
        "name": "강현욱",
        "email": "43662405+hyunw9@users.noreply.github.com",
        "time": "Tue Aug 26 20:45:29 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 20:45:29 2025 +0900"
      },
      "message": "[ZEPPELIN-6292] Fix e2e test build dependency order by including zeppelin-web-angular\n\n### What is this PR for?\r\nThe `run-e2e-tests-in-zeppelin-web` GitHub Actions workflow is currently failing with a `FileNotFoundException` error. \r\nThis failure affects the build stability and prevents proper CI validation of frontend changes.\r\n\r\nThe current CI workflow has a build dependency ordering issue:\r\n  1. Current problematic workflow step:\r\n     ```\r\n     ./mvnw verify -pl zeppelin-web -Pweb-classic -Pspark-scala-2.12 -Pspark-3.4 -Pweb-dist -Pweb-e2e\r\n\r\n  2. Issue: The workflow only builds zeppelin-web module but skips zeppelin-web-angular\r\n  3. Impact: zeppelin-web requires built artifacts from zeppelin-web-angular/dist/ directory\r\n  4. Result: Zeppelin server startup fails because it cannot find the frontend build output\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n### Todos\r\n* [x] Add `zeppelin-web-angular` to Maven project list to ensure proper build dependency order\r\n* [x] Resolve `FileNotFoundException` for `/zeppelin-web-angular/dist/zeppelin` directory \r\n\r\n### What is the Jira issue?\r\n* [[ZEPPELIN-6292]](https://issues.apache.org/jira/browse/ZEPPELIN-6292)\r\n\r\n### How should this be tested?\r\n* github actions CI already including e2e tests\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? - No\r\n* Is there breaking changes for older versions? - No\r\n* Does this needs documentation? - No \r\n\n\nCloses #5043 from hyunw9/ZEPPELIN-6292.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "a14243ca354d41af19e9cc2b7ad5383eef38ed64",
      "tree": "9e44444a381a78935b51ac65c84f5b829a7deea9",
      "parents": [
        "d197a3ea2a0060464acb800bedc2713c917e4b96"
      ],
      "author": {
        "name": "Yuijin Kim(yuikim)",
        "email": "106499310+kmularise@users.noreply.github.com",
        "time": "Tue Aug 26 20:10:35 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 20:10:35 2025 +0900"
      },
      "message": "[ZEPPELIN-6181] Login form does not pass plus sign into authenticator\n\n### What is this PR for?\r\n\r\nThis PR fixes an authentication bug where plus signs (+) in usernames or passwords were being incorrectly converted to spaces during login form submission. The issue affected both LDAP authenticator and local users in shiro.ini (IniRealm), causing authentication failures for any credentials containing URL-unsafe characters.\r\n\r\n### What type of PR is it?\r\n\r\nBug Fix\r\n\r\n### Todos\r\n\r\n* [x] - Apply encodeURIComponent() to userName and password fields\r\n* [x] - Test with credentials containing plus signs and other special characters\r\n\r\n### What is the Jira issue?\r\n\r\n* [ZEPPELIN-6181](https://issues.apache.org/jira/browse/ZEPPELIN-6181) : Login form does not pass plus sign into authenticator\r\n\r\n### How should this be tested?\r\n\r\n**Manual Testing:**\r\n1. Create a test user with username containing plus sign (e.g., `user+test`)\r\n2. Create a test user with password containing plus sign (e.g., `pass+word`)\r\n3. Attempt to login through the web interface\r\n4. Verify authentication succeeds for both cases\r\n\r\n### Screenshots (if appropriate)\r\n\r\nN/A\r\n\r\n### Questions:\r\n\r\n* Does the license files need to update? **No**\r\n* Is there breaking changes for older versions? **No**\r\n* Does this needs documentation? **No** - This is a bug fix that maintains existing functionality\n\nCloses #5024 from kmularise/ZEPPELIN-6181.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "d197a3ea2a0060464acb800bedc2713c917e4b96",
      "tree": "531639178e01423d8deb80bd9acb0a08cf2093df",
      "parents": [
        "1b2ed761343d8ba170159f81860318e336a5f81d"
      ],
      "author": {
        "name": "Philipp Dallig",
        "email": "philipp.dallig@gmail.com",
        "time": "Tue Aug 26 10:51:12 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 10:51:12 2025 +0200"
      },
      "message": "[HOTFIX] Add missing License header to dev/requirements\n\n### What is this PR for?\r\nHotfix for missing license header. Regression in https://github.com/apache/zeppelin/commit/eb923af44fe4ce4f9ce8867c00df\r\n\r\n\r\n### What type of PR is it?\r\nHot Fix\r\n\r\n### How should this be tested?\r\n* CI rat check\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5047 from Reamer/hotfix_rat.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "1b2ed761343d8ba170159f81860318e336a5f81d",
      "tree": "42cb52edee9e468032cc29a4b0ffa68d0d9b0e0c",
      "parents": [
        "53fe7c123befbdd8e09dbc30bfff8dbefd2deb20"
      ],
      "author": {
        "name": "SeungYoung Oh",
        "email": "seung-00@naver.com",
        "time": "Mon Aug 25 21:20:46 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 25 21:20:46 2025 +0900"
      },
      "message": "[ZEPPELIN-6286] Add lint check to zeppelin-web-angular CI workflow\n\n### What is this PR for?\r\nThis PR updates zeppelin-web-angular\u0027s pom.xml to run lint during the CI workflow.\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6286](https://issues.apache.org/jira/browse/ZEPPELIN/ZEPPELIN-6286)\r\n\r\n### How should this be tested?\r\n* Check the CI results, [run-tests-in-zeppelin-web-angular](https://github.com/seung-00/zeppelin/actions/runs/17176443513/job/48732990974#logs)\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5042 from seung-00/feature/ZEPPELIN-6286.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "53fe7c123befbdd8e09dbc30bfff8dbefd2deb20",
      "tree": "10bb1d7a5f579ccfab4b9470c27ea37fc5b338f1",
      "parents": [
        "55789d367fae348a750b4ff6332779f749615d4b"
      ],
      "author": {
        "name": "Juyeon",
        "email": "proceane1@gmail.com",
        "time": "Mon Aug 25 20:17:16 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 25 20:17:16 2025 +0900"
      },
      "message": "[ZEPPELIN-6273] Add unit test for AngularInterpreter\n\n### What is this PR for?\r\nSince there is currently no test class that can test AngularInterpreter, I added unit tests for `org.apache.zeppelin.angular.AngularInterpreter` to cover the core behavior.\r\n- Verify interpret echoes input with Type.ANGULAR and Code.SUCCESS\r\n- Verify empty input returns Type.ANGULAR with empty data\r\n- Verify cancel does not throw\r\n- Verify completion returns empty list\r\n- Verify getFormType() returns FormType.NATIVE\r\n- Verify getProgress() returns 0\r\n- Verify scheduler is FIFOScheduler and name contains AngularInterpreter\r\n\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### What is the Jira issue?\r\nhttps://issues.apache.org/jira/browse/ZEPPELIN-6273\r\n\r\n### How should this be tested?\r\n* In the angular module, run test.\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5021 from proceane/feature/ZEPPELIN-6273.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "55789d367fae348a750b4ff6332779f749615d4b",
      "tree": "71d498b312bd002340de6b25dc0d5c5c8c79e493",
      "parents": [
        "eb923af44fe4ce4f9ce8867c00dfc300c0ee02af"
      ],
      "author": {
        "name": "renechoi",
        "email": "115696395+renechoi@users.noreply.github.com",
        "time": "Mon Aug 25 15:47:14 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 25 08:47:14 2025 +0200"
      },
      "message": "[ZEPPELIN-6256] Fix resource leaks in SparkInterpreterLauncher.detectSparkScalaVersion\n\n## What is this PR for?\r\n  This PR fixes resource leaks in the `detectSparkScalaVersion` method of `SparkInterpreterLauncher.java` by modernizing the implementation to capture process output directly without temporary files.\r\n\r\n  **Previous issues:**\r\n  - Resource leak from unclosed FileInputStream when reading process output\r\n  - Disk space accumulation from undeleted temporary files\r\n\r\n  **Solution:**\r\n  - Directly capture process error stream using `IOUtils.toString(process.getErrorStream(), StandardCharsets.UTF_8)`\r\n  - Eliminated temporary file creation entirely for cleaner, more efficient implementation\r\n\r\n  ## What type of PR is it?\r\n  Bug Fix / Code Improvement\r\n\r\n  ## Todos\r\n  - [x] Code review\r\n  - [x] CI build verification\r\n\r\n  ## What is the Jira issue?\r\n  https://issues.apache.org/jira/browse/ZEPPELIN-6256\r\n\r\n  ## How should this be tested?\r\n  **Unit test added:**\r\n  - `testDetectSparkScalaVersionDirectStreamCapture`: Verifies the modernized stream capture approach works correctly and returns valid Scala version (2.12 or 2.13)\r\n\r\n  **Manual testing:**\r\n  1. Start Zeppelin with Spark interpreter\r\n  2. Verify Spark interpreter launches successfully\r\n  3. Confirm no temporary files created in temp directory\r\n  4. Monitor system resources - no file descriptor leaks\r\n\r\n\r\n  ## Screenshots (if appropriate)\r\n  N/A\r\n\r\n  ## Questions:\r\n  - **Does the license files need to update?** No\r\n  - **Is there breaking changes for older versions?** No\r\n  - **Does this needs documentation?** No\r\n\r\n  ## Implementation Details\r\n  - Modernized to capture process output directly via `IOUtils.toString()` without intermediate temporary files\r\n  - Maintains full backward compatibility with no API changes\r\n  - Cleaner, more maintainable code following modern Java practices\r\n  - Eliminates all file system operations for output capture\r\n\n\nCloses #5000 from renechoi/ZEPPELIN-6256-upstream-clean.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "eb923af44fe4ce4f9ce8867c00dfc300c0ee02af",
      "tree": "cfb36b4fa6eb1b42ba71e92a514e5a69f34a78b0",
      "parents": [
        "8b2aabbace56c184e7f3fbe868807c3b72518a40"
      ],
      "author": {
        "name": "ChanHo Lee",
        "email": "chanholee@apache.org",
        "time": "Sun Aug 24 21:01:06 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 24 21:01:06 2025 +0900"
      },
      "message": "[ZEPPELIN-6290] Add .env file support and update merge script documentation\n\n### What is this PR for?\r\n\r\nAdd .env file support and update merge script documentation\r\n- Added .env file to .gitignore to prevent dotenv files from being tracked.\r\n- Updated `merge_zeppelin_pr.py` to load environment variables from a .env file, enhancing configuration management.\r\n- Added `/dev/requirements.txt` to pin Python package versions and use it for package installation.\r\n- Revised error message for missing JIRA library to provide clearer installation instructions.\r\n\r\n### What type of PR is it?\r\nImprovement\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6290](https://issues.apache.org/jira/browse/ZEPPELIN-6290)\r\n\r\n### How should this be tested?\r\n* Run `uv pip install -r {REPO_ROOT}/requirements.txt`\r\n* Environment variable configurations could be tested by adding `{REPO_ROOT}/dev/.env` file and run `merge_zeppelin_pr.py`\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5041 from tbonelee/add-dotenv.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "8b2aabbace56c184e7f3fbe868807c3b72518a40",
      "tree": "832e556a74c5f2e3316c240e034deaa74a39ce51",
      "parents": [
        "934d4e36b14c58d93df7653123dc15ab192d3712"
      ],
      "author": {
        "name": "YeonKyung Ryu",
        "email": "80758099+celinayk@users.noreply.github.com",
        "time": "Sat Aug 23 00:10:54 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 23 00:10:54 2025 +0900"
      },
      "message": "[ZEPPELIN-6280] Remove unused LivyPySpark3Interpreter class\n\n### What is this PR for?\r\nThis PR removes the unused LivyPySpark3Interpreter.java class from the codebase. This class is no longer referenced anywhere in the project, so its removal helps simplify the code and reduce maintenance overhead.\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n* [x] - Remove zeppelin/livy/src/main/java/org/apache/zeppelin/livy/LivyPySpark3Interpreter.java\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6280](https://issues.apache.org/jira/browse/ZEPPELIN-6280)\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5028 from celinayk/ZEPPELIN-6280.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "934d4e36b14c58d93df7653123dc15ab192d3712",
      "tree": "29d8fcfac60c3826b990640da100df530c6358c6",
      "parents": [
        "f68d69b119cc654ffbca6dc9621f34915197e854"
      ],
      "author": {
        "name": "eunhwa99",
        "email": "68810660+eunhwa99@users.noreply.github.com",
        "time": "Fri Aug 22 22:47:34 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 22 15:47:34 2025 +0200"
      },
      "message": "[ZEPPELIN-6285] Refactor getNotesInfo to improve readability and immutability\n\n### What is this PR for?\r\nThis PR refactors the getNotesInfo method in NotebookService to improve readability and enforce immutability.\r\nThe functional behavior remains unchanged, but the code is now more concise and safer for multi-threaded access.\r\n- Use `Comparator.comparing` for cleaner sorting logic\r\n- Return an `unmodifiable list` to emphasize immutability\r\n- Remove redundant condition for improved readability\r\n- Refactored getNotesInfo to use inline return, eliminating intermediate variables.\r\n\r\nThis change is internal-only and does not affect any runtime behavior or public APIs.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n\r\n### Todos\r\n* [ ] - Task\r\n\r\n### What is the Jira issue?\r\n* [Zeppelin-6285](https://issues.apache.org/jira/browse/ZEPPELIN-6285)\r\n\r\n### How should this be tested?\r\n* No functional changes; existing tests should pass as-is.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? no\r\n* Is there breaking changes for older versions? no\r\n* Does this needs documentation? no\r\n\n\nCloses #5033 from eunhwa99/ZEPPELIN-6285.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "f68d69b119cc654ffbca6dc9621f34915197e854",
      "tree": "0b4ca4517354957c39056464486bdfa2bbbc504f",
      "parents": [
        "31f7d569095fc56104c75f58d94e12431ffbcef3"
      ],
      "author": {
        "name": "YeonKyung Ryu",
        "email": "80758099+celinayk@users.noreply.github.com",
        "time": "Fri Aug 22 22:05:20 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 22 22:05:20 2025 +0900"
      },
      "message": "[ZEPPELIN-6281] Add Unit Tests for LivyVersion Class\n\n### What is this PR for?\r\nThis PR adds a comprehensive suite of unit tests for the LivyVersion class. The LivyVersion class is critical for ensuring Zeppelin\u0027s compatibility with various versions of the Livy server.\r\n\r\n\r\n### What type of PR is it?\r\nTest\r\n\r\n### Todos\r\n* [x] Add LivyVersionTest.java with comprehensive test cases.\r\n* [x] Ensure all tests pass with the existing LivyVersion implementation.\r\n\r\n### What is the Jira issue?\r\n[ZEPPELIN-6281](https://issues.apache.org/jira/browse/ZEPPELIN-6281)\r\n\r\n### How should this be tested?\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5029 from celinayk/ZEPPELIN-6281.\n\nSigned-off-by: ParkGyeongTae \u003cgyeongtae@apache.org\u003e"
    },
    {
      "commit": "31f7d569095fc56104c75f58d94e12431ffbcef3",
      "tree": "495211e17c8c6f790596af8c3a81bcc6a68659fd",
      "parents": [
        "f32b50fcc1c897e72198da6ffba8a47576d199af"
      ],
      "author": {
        "name": "Paul Zhang",
        "email": "xzhangyao@126.com",
        "time": "Fri Aug 22 20:20:20 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 22 21:20:20 2025 +0900"
      },
      "message": "[ZEPPELIN-6164][HOTFIX] Fix the problem that previous PR for does not …\n\n…work\r\n\r\n### What is this PR for?\r\nFix the problem that previous PR for ZEPPELIN-6164 does not work.\r\n\r\n### What type of PR is it?\r\nBug Fix\r\n\r\n\r\n### Todos\r\n \r\n\r\n### What is the Jira issue?\r\n\r\n[ZEPPELIN-6164](https://issues.apache.org/jira/browse/ZEPPELIN-6164)\r\n\r\n\r\n### How should this be tested?\r\nCompiled and tested manually.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5031 from paul8263/ZEPPELIN-6164.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "f32b50fcc1c897e72198da6ffba8a47576d199af",
      "tree": "680a16ebb46e38df2d64700dfaa18a035d8483ba",
      "parents": [
        "7b26f92242390a351ed358d18f505684cc4d58b5"
      ],
      "author": {
        "name": "강현욱",
        "email": "43662405+hyunw9@users.noreply.github.com",
        "time": "Fri Aug 22 17:14:14 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 22 10:14:14 2025 +0200"
      },
      "message": "[ZEPPELIN-6288] Replace Yoda conditions in InterpreterFactory with standard null checks\n\n### What is this PR for?\r\n\r\nIn `src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java`\r\n\r\nThe codebase contains several instances of Yoda conditions (e.g., `if (null !\u003d setting)`) which negatively impact code readability.\r\n\r\nAdditionally, the use of these checks causes inconsistencies with the existing codebase style. So, this improvement aligns the code with the standard null-check style.\r\n\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n* [x] - Refactor null-check style \r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6288](https://issues.apache.org/jira/browse/ZEPPELIN-6288)\r\n\r\n### How should this be tested?\r\n* As this modification involves no functional changes but only coding style improvements, passing existing tests ensures there are no issues.\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? - No\r\n* Is there breaking changes for older versions? - No\r\n* Does this needs documentation? - No\r\n\n\nCloses #5037 from hyunw9/origin/ZEPPELIN-6288.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "7b26f92242390a351ed358d18f505684cc4d58b5",
      "tree": "70cda000357a1cd114de5b8f2b294ec1118d73e9",
      "parents": [
        "01efbd11aee1857123b1d8bbcf15dcb26772df0c"
      ],
      "author": {
        "name": "SeungYoung Oh",
        "email": "seung-00@naver.com",
        "time": "Fri Aug 22 10:17:14 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 22 10:17:14 2025 +0900"
      },
      "message": "[ZEPPELIN-6287] Fix lint errors in zeppelin-web-angular modules\n\n### What is this PR for?\r\nFix various lint errors in zeppelin-web-angular.\r\nThey were hidden, I think, because lint script was only running on staged local files during pre-commit.\r\n- add prettier check to the lint script\r\n- add types/webpack-env dependency for type safety\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n* [ ] [ZEPPELIN-6286](https://issues.apache.org/jira/browse/ZEPPELIN-6286) Add lint check to zeppelin-web-angular CI workflow\r\n\r\n### What is the Jira issue?\r\n* [ZEPPELIN-6287](https://issues.apache.org/jira/browse/ZEPPELIN-6287)\r\n\r\n### How should this be tested?\r\n* run `npm run lint`\r\n\r\n### Screenshots (if appropriate)\r\n\r\n### Questions:\r\n* Does the license files need to update? No\r\n* Is there breaking changes for older versions? No\r\n* Does this needs documentation? No\r\n\n\nCloses #5036 from seung-00/feature/ZEPPELIN-6287.\n\nSigned-off-by: ChanHo Lee \u003cchanholee@apache.org\u003e"
    },
    {
      "commit": "01efbd11aee1857123b1d8bbcf15dcb26772df0c",
      "tree": "6de8d565dda841e55e30c88740c73563c67e6fa6",
      "parents": [
        "6dd03ab5bd07f192f7ec6381c651add65eb17a1f"
      ],
      "author": {
        "name": "renechoi",
        "email": "115696395+renechoi@users.noreply.github.com",
        "time": "Thu Aug 21 15:36:51 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 21 08:36:51 2025 +0200"
      },
      "message": "[ZEPPELIN-6259] Add null safety checks in SparkInterpreterLauncher.detectSparkScalaVersionByReplClass\n\n### What is this PR for?\r\nThis PR adds null safety checks to the `detectSparkScalaVersionByReplClass` method in `SparkInterpreterLauncher.java` to prevent NullPointerException and provide clear error messages when the Spark jars directory is inaccessible.\r\n\r\n### Current Issues Fixed:\r\n1. **NullPointerException Risk**: `listFiles()` returns null when directory doesn\u0027t exist or is inaccessible\r\n2. **Poor Error Messages**: Users get cryptic NPE instead of meaningful error messages\r\n3. **Missing Validation**: No checks for directory existence or type\r\n\r\n### What type of PR is it?\r\nBug Fix / Improvement\r\n\r\n### Todos\r\n* [ ] - Code review\r\n* [ ] - CI build verification\r\n\r\n### What is the Jira issue?\r\n* https://issues.apache.org/jira/browse/ZEPPELIN-6259\r\n\r\n### How should this be tested?\r\n* **Unit tests added**:\r\n    - `testDetectSparkScalaVersionByReplClassWithNonExistentDirectory` - Verifies error when directory doesn\u0027t exist\r\n    - `testDetectSparkScalaVersionByReplClassWithFileInsteadOfDirectory` - Verifies error when path is a file\r\n    - `testDetectSparkScalaVersionByReplClassWithValidDirectory` - Verifies normal operation works\r\n    - `testDetectSparkScalaVersionByReplClassWithEmptyDirectory` - Verifies error when no spark-repl jars found\r\n\r\n* **Manual testing**:\r\n    - Set invalid SPARK_HOME and verify clear error messages\r\n    - Remove read permissions on SPARK_HOME/jars and verify permission error\r\n\r\n* **CI**: All existing tests pass\r\n\r\n### Screenshots (if appropriate)\r\nN/A\r\n\r\n### Questions:\r\n* Does the license files need to update? **No**\r\n* Is there breaking changes for older versions? **No**\r\n* Does this needs documentation? **No**\r\n\r\n### Implementation Details\r\n- Added directory existence check with clear error message\r\n- Added directory type validation (ensures it\u0027s not a file)\r\n- Added null check for `listFiles()` result with permission hint\r\n- All error messages include the problematic path for easier debugging\r\n- Used IOException for file system related errors (consistent with Java conventions)\r\n\r\n### Error Message Examples\r\nBefore (NPE):\r\njava.lang.NullPointerException\r\nat java.util.stream.Stream.of(Stream.java:1012)\r\n\r\nAfter (Clear messages):\r\njava.io.IOException: Spark jars directory does not exist: /invalid/path/jars. Please check your SPARK_HOME setting.\r\njava.io.IOException: Spark jars path is not a directory: /some/file/jars\r\njava.io.IOException: Cannot access Spark jars directory: /restricted/jars. Please check permissions.\r\n\r\n### Benefits\r\n1. **Better User Experience**: Clear error messages help users quickly identify and fix configuration issues\r\n2. **Defensive Programming**: Prevents crashes from null pointer exceptions\r\n3. **Easier Debugging**: Specific error messages with paths make troubleshooting straightforward\r\n4. **Production Ready**: Handles edge cases that can occur in various deployment environments\n\nCloses #4999 from renechoi/ZEPPELIN-6259-upstream-clean.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    },
    {
      "commit": "6dd03ab5bd07f192f7ec6381c651add65eb17a1f",
      "tree": "bf3e1c3dd6902a1773492598cdca80f680135de2",
      "parents": [
        "27e9b8fb5010a79e939f9382a917d8d031fe181b"
      ],
      "author": {
        "name": "SeungYoung Oh",
        "email": "seung-00@naver.com",
        "time": "Wed Aug 20 15:38:48 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 20 08:38:48 2025 +0200"
      },
      "message": "[ZEPPELIN-6283] Decouple \u0027isRevisionSupported\u0027 state from configuration API response\n\n### What is this PR for?\r\nThis PR separates the `isRevisionSupported` field from the configuration API into a dedicated endpoint.\r\nNo internal logic is changed.\r\n* `isRevisionSupported` seems to be more related to Notebook logic rather than configuration. It is included in the WebSocket configuration response, making the code more complex and less extensible.\r\n  * For example, the REST configuration response doesn’t have `isRevisionSupported`. Adding it would require injecting a Notebook instance into ConfigurationsRestApi, which doesn’t seem related to configurations. It feels like a code smell.\r\n* On the client, it was previously fetched globally. Now it is fetched in the Notebook page. There seems to be no need to use it as a global state.\r\n\r\n### What type of PR is it?\r\nRefactoring\r\n\r\n### Todos\r\n\r\n### What is the Jira issue?\r\n- [ZEPPELIN-6283](https://issues.apache.org/jira/browse/ZEPPELIN-6283)\r\n\r\n### How should this be tested?\r\n* Run `NotebookTest.testRevisionSupported()`\r\n* Verify on both New UI and Old UI\r\n\r\n### Questions:\r\n* Does the license files need to update? N\r\n* Is there breaking changes for older versions? N\r\n* Does this needs documentation? N\r\n\n\nCloses #5030 from seung-00/feature/ZEPPELIN-6283.\n\nSigned-off-by: Philipp Dallig \u003cphilipp.dallig@gmail.com\u003e"
    }
  ],
  "next": "27e9b8fb5010a79e939f9382a917d8d031fe181b"
}
