This is an automated email from the ASF dual-hosted git repository.

voidmatcha pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 28894a1fc6 [ZEPPELIN-6722] Record the pinned Angular notebook route 
baseline
28894a1fc6 is described below

commit 28894a1fc68bc188be72437f81d8d014240c5c52
Author: 김예나 <[email protected]>
AuthorDate: Wed Sep 30 21:04:12 2026 +0900

    [ZEPPELIN-6722] Record the pinned Angular notebook route baseline
    
    ### What is this PR for?
    
    Record the pinned Angular notebook route baseline with the benchmark 
contract from ZEPPELIN-6668, before the React route host (ZEPPELIN-6675) lands 
and the current Angular path can no longer be measured under the same 
conditions.
    
    * Measured at `7f7b995c3` (the ZEPPELIN-6668 merge, current `master`), with 
a clean working tree (`workingTreeDirty: false`).
    * One run in one environment: 10 cold and 10 warm samples, no outlier 
removed, nothing merged from other runs.
    * No script, fixture or config change. The measurement tool stays exactly 
as ZEPPELIN-6668 fixed it, so the recorded commit identifies the tool that 
produced these numbers.
    
    | Metric (ms) | Cold median | Cold p95 | Warm median | Warm p95 |
    | --- | --- | --- | --- | --- |
    | `notebookReadyMs` | 1102.9 | 1181.9 | 806.2 | 871.6 |
    | `fcpMs` | 28 | 44 | 36 | 40 |
    
    Raw samples: cold 1092.4–1181.9 ms, warm 768.9–871.6 ms. The JSON files are 
authoritative; the table rounds to 0.1 ms.
    
    Entry bundles (raw / gzip bytes): `main` 6,691,449 / 1,786,481, `scripts` 
825,757 / 238,428, `styles` 136,950 / 23,253, `polyfills` 56,102 / 20,644; 
React `remoteEntry.js` 4,109 / 1,785.
    
    Environment: macOS (Darwin 23.6.0), Apple M3 Pro, 36 GiB, Playwright 
Chromium 140.0.7339.186, Node v22.21.1 (the `.nvmrc` version), AC power. 
Zeppelin was built from the same commit (`zeppelin-server` with its 
dependencies, and `shell`), with anonymous access and an empty isolated 
notebook directory. Measurement started after the post-build Spotlight indexing 
settled (1-minute load average 3.8).
    
    Files:
    * `e2e/performance/baselines/70eef3f8-….raw.json` / `.summary.json`: added 
with `git add -f`, as the README describes, because generated outputs stay 
git-ignored.
    * `e2e/performance/README.md`: the sentence saying there is no pinned 
baseline now points to the recorded one, and a `Recorded Angular baseline` 
section lists the commit, environment and summary. It also notes that note 
import needs at least one interpreter. With none installed, import fails with 
HTTP 500 (`InterpreterSettingManager.getDefaultInterpreterSetting` throws 
`IndexOutOfBoundsException`). The fixture's paragraphs use `%sh`, so building 
`shell` is enough. No existing sentence [...]
    
    ### What type of PR is it?
    Improvement
    
    ### Todos
    * [x] Record 10 cold and 10 warm samples at a pinned `master` commit
    * [x] Commit raw and summary JSON with the environment record
    * [x] Point the README at the recorded baseline
    
    ### What is the Jira issue?
    [ZEPPELIN-6722](https://issues.apache.org/jira/browse/ZEPPELIN-6722)
    
    ### How should this be tested?
    
    ```bash
    cd zeppelin-web-angular
    npm run test:shell -- test/notebook-baseline.spec.ts
    # against an isolated Zeppelin serving the `npm run build` output, with the 
shell interpreter installed
    PLAYWRIGHT_BASE_URL=http://localhost:8080/ PERF_NOTEBOOK_DISPOSABLE=1 npm 
run perf:notebook-baseline
    ```
    
    What I ran locally:
    * Contract unit tests: 12/12 passed.
    * Dry run (1 cold + 1 warm) passed before the real run; its output was not 
committed.
    * The real run passed and the imported note was deleted afterwards (the 
notebook store was empty again).
    * I recomputed the median and nearest-rank p95 from the raw samples. They 
match the summary, and the raw and summary metadata are identical.
    * Bundle SHA-256, raw bytes and `zlib` gzip bytes match the built `dist` 
files.
    * Fixture hash mismatch: changing one byte in the fixture made the command 
fail with `Benchmark fixture SHA-256 mismatch`. The fixture was restored before 
committing.
    * Ready-condition mismatch was **not** exercised against a live server. It 
relies on the existing ZEPPELIN-6668 spec and unit tests.
    * No Playwright E2E suite run, since this PR changes no application or test 
code.
    
    Numbers from a different machine are not expected to match. Compare a later 
run with this baseline only when it was recorded in the same environment.
    
    ### Screenshots (if appropriate)
    
    N/A.
    
    ### Questions:
    * Does the license files need to update? No. The baseline JSON is covered 
by the existing RAT `**/*.json` exclusion.
    * Is there breaking changes for older versions? No.
    * Does this needs documentation? The benchmark README is updated in this PR.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    
    Closes #5512 from kimyenac/ZEPPELIN-6722.
    
    Signed-off-by: YONGJAE LEE <[email protected]>
---
 zeppelin-web-angular/e2e/performance/README.md     |  19 ++-
 .../70eef3f8-b75c-427a-b8b4-bfcd65b71264.raw.json  | 185 +++++++++++++++++++++
 ...eef3f8-b75c-427a-b8b4-bfcd65b71264.summary.json |  87 ++++++++++
 3 files changed, 289 insertions(+), 2 deletions(-)

diff --git a/zeppelin-web-angular/e2e/performance/README.md 
b/zeppelin-web-angular/e2e/performance/README.md
index f1f8b70e0d..4f01adbf3b 100644
--- a/zeppelin-web-angular/e2e/performance/README.md
+++ b/zeppelin-web-angular/e2e/performance/README.md
@@ -15,11 +15,11 @@ limitations under the License.
 
 # Notebook route benchmark contract
 
-ZEPPELIN-6668 defines the fixture and measurement format. It does not 
establish a pinned Angular baseline. Generated JSON is ignored by Git.
+ZEPPELIN-6668 defines the fixture and measurement format. ZEPPELIN-6722 
records the pinned Angular baseline described under [Recorded Angular 
baseline](#recorded-angular-baseline). Generated JSON is ignored by Git; only 
that recorded baseline is committed.
 
 Build with `npm run build`, then serve `dist/zeppelin` with an isolated local 
Zeppelin backend. The benchmark imports one note and deletes that note in 
cleanup. Do not point it at a shared notebook store. It checks the served 
index's entry script list and the served entry asset hashes against the local 
build before importing the fixture; server-injected inline markup does not 
affect this check. The normal E2E suite does not run this benchmark; no 
development server is started by its conf [...]
 
-To serve the fresh build, start Zeppelin from this source tree after `npm run 
build`. In `zeppelin-server`'s `ZeppelinConfiguration`, `zeppelin.default.ui` 
defaults to `new` and `zeppelin.angular.war` defaults to 
`zeppelin-web-angular/dist/zeppelin`, so the benchmark requests that `dist` at 
`/` unless either property is overridden. Use `localhost` in 
`PLAYWRIGHT_BASE_URL`: unless `zeppelin.server.allowed.origins` is set, the 
server accepts a WebSocket origin only from `localhost` or its  [...]
+To serve the fresh build, start Zeppelin from this source tree after `npm run 
build`. In `zeppelin-server`'s `ZeppelinConfiguration`, `zeppelin.default.ui` 
defaults to `new` and `zeppelin.angular.war` defaults to 
`zeppelin-web-angular/dist/zeppelin`, so the benchmark requests that `dist` at 
`/` unless either property is overridden. Use `localhost` in 
`PLAYWRIGHT_BASE_URL`: unless `zeppelin.server.allowed.origins` is set, the 
server accepts a WebSocket origin only from `localhost` or its  [...]
 
 `playwright.performance.config.js` intentionally throws when 
`PLAYWRIGHT_BASE_URL` or `PERF_NOTEBOOK_DISPOSABLE=1` is missing, so `npx 
playwright test --list --config playwright.performance.config.js` needs them 
too.
 
@@ -47,3 +47,18 @@ Outputs are `baselines/<run-id>.raw.json` and 
`<run-id>.summary.json`. Both cont
 `bundles.angularEntryChunks` lists JavaScript entry scripts from the built 
Angular `index.html`. `bundles.reactRemoteEntry` measures the separately served 
`assets/react/remoteEntry.js`. Each file records relative path, SHA-256, raw 
bytes and gzip bytes. These are entry asset measurements, not the whole `dist` 
tree or a claim about the complete notebook route's lazy-loaded bundle size.
 
 Focused static checks: `npm run test:shell -- test/notebook-baseline.spec.ts` 
and `npx eslint e2e/performance/*.ts e2e/models/notebook-performance-page.ts`.
+
+## Recorded Angular baseline
+
+`baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.raw.json` and `.summary.json` 
are the pinned Angular notebook route baseline, recorded before the React route 
host (ZEPPELIN-6675) lands. They are a single run of 10 cold and 10 warm 
samples in one environment; no outlier was removed and no other run is merged 
into them.
+
+* Zeppelin commit: `7f7b995c35978c4a3ef3df31ec8faf206ce179f9`, clean working 
tree
+* Environment: macOS (Darwin 23.6.0), Apple M3 Pro, 36 GiB memory, Playwright 
Chromium 140.0.7339.186, Node v22.21.1, on AC power
+* Server: Zeppelin built from the same commit (`zeppelin-server` with its 
dependencies, and `shell`), anonymous access, an empty isolated notebook 
directory
+
+| Metric (ms) | Cold median | Cold p95 | Warm median | Warm p95 |
+| --- | --- | --- | --- | --- |
+| `notebookReadyMs` | 1102.9 | 1181.9 | 806.2 | 871.6 |
+| `fcpMs` | 28 | 44 | 36 | 40 |
+
+The table rounds the summary file to 0.1 ms; the JSON files are authoritative. 
Compare a later run with this baseline only when it was recorded in the same 
environment.
diff --git 
a/zeppelin-web-angular/e2e/performance/baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.raw.json
 
b/zeppelin-web-angular/e2e/performance/baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.raw.json
new file mode 100644
index 0000000000..ec8db260e4
--- /dev/null
+++ 
b/zeppelin-web-angular/e2e/performance/baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.raw.json
@@ -0,0 +1,185 @@
+{
+  "schemaVersion": 1,
+  "runId": "70eef3f8-b75c-427a-b8b4-bfcd65b71264",
+  "generatedAt": "2026-09-29T07:30:00.547Z",
+  "dryRun": false,
+  "zeppelinCommit": "7f7b995c35978c4a3ef3df31ec8faf206ce179f9",
+  "workingTreeDirty": false,
+  "os": {
+    "platform": "darwin",
+    "release": "23.6.0"
+  },
+  "cpuModel": "Apple M3 Pro",
+  "memoryBytes": 38654705664,
+  "browserVersion": "140.0.7339.186",
+  "nodeVersion": "v22.21.1",
+  "buildCommand": "npm run build",
+  "fixture": {
+    "path": "e2e/fixtures/performance/notebook-route-100-paragraphs.json",
+    "sha256": 
"7f94de1f9a7e529c7baf473a8bba9ab017f410c896f21bd8357922b63bd81fde"
+  },
+  "baseURL": "http://localhost:8080/";,
+  "viewport": {
+    "width": 1280,
+    "height": 720
+  },
+  "runsPerCache": 10,
+  "warmPrimingNavigations": 1,
+  "percentileMethod": "nearest-rank",
+  "bundles": {
+    "angularEntryChunks": [
+      {
+        "path": "dist/zeppelin/polyfills.ff67e561b2f2bf75.js",
+        "rawBytes": 56102,
+        "gzipBytes": 20644,
+        "sha256": 
"194d61d77df3cf43cc38b9fc29df74e3812e6548ce6300b5307477cdffe51802"
+      },
+      {
+        "path": "dist/zeppelin/styles.c4ee7052b61641a3.js",
+        "rawBytes": 136950,
+        "gzipBytes": 23253,
+        "sha256": 
"3a66a5f592c854b3352b75842ee21111d947a0a1e69fe7d26e88e60750c377ad"
+      },
+      {
+        "path": "dist/zeppelin/scripts.3e02b0ea73800c10.js",
+        "rawBytes": 825757,
+        "gzipBytes": 238428,
+        "sha256": 
"ca3bbd0856ca2debfdd5a58c49d95c57793dbfec3ed661920e87aa5506fa176f"
+      },
+      {
+        "path": "dist/zeppelin/main.3a26bcb125282632.js",
+        "rawBytes": 6691449,
+        "gzipBytes": 1786481,
+        "sha256": 
"072ad8207750b596ffea6242ac6d4d800886a9124caa541bb0b92685f6c906ed"
+      }
+    ],
+    "reactRemoteEntry": {
+      "path": "dist/zeppelin/assets/react/remoteEntry.js",
+      "rawBytes": 4109,
+      "gzipBytes": 1785,
+      "sha256": 
"42cdb5cdac9a5d9c8ad8675b6847bbced19b73f505787e0285c5e46aca342f82"
+    }
+  },
+  "samples": [
+    {
+      "cache": "cold",
+      "run": 1,
+      "notebookReadyMs": 1181.9000000003725,
+      "fcpMs": 24
+    },
+    {
+      "cache": "cold",
+      "run": 2,
+      "notebookReadyMs": 1167.3999999994412,
+      "fcpMs": 40
+    },
+    {
+      "cache": "cold",
+      "run": 3,
+      "notebookReadyMs": 1106.7999999998137,
+      "fcpMs": 20
+    },
+    {
+      "cache": "cold",
+      "run": 4,
+      "notebookReadyMs": 1093.199999999255,
+      "fcpMs": 20
+    },
+    {
+      "cache": "cold",
+      "run": 5,
+      "notebookReadyMs": 1095.4000000003725,
+      "fcpMs": 44
+    },
+    {
+      "cache": "cold",
+      "run": 6,
+      "notebookReadyMs": 1096.7000000001863,
+      "fcpMs": 20
+    },
+    {
+      "cache": "cold",
+      "run": 7,
+      "notebookReadyMs": 1092.3999999994412,
+      "fcpMs": 40
+    },
+    {
+      "cache": "cold",
+      "run": 8,
+      "notebookReadyMs": 1098.9000000003725,
+      "fcpMs": 36
+    },
+    {
+      "cache": "cold",
+      "run": 9,
+      "notebookReadyMs": 1112.7000000001863,
+      "fcpMs": 32
+    },
+    {
+      "cache": "cold",
+      "run": 10,
+      "notebookReadyMs": 1162.199999999255,
+      "fcpMs": 20
+    },
+    {
+      "cache": "warm",
+      "run": 1,
+      "notebookReadyMs": 825.2000000001863,
+      "fcpMs": 40
+    },
+    {
+      "cache": "warm",
+      "run": 2,
+      "notebookReadyMs": 817.0999999996275,
+      "fcpMs": 36
+    },
+    {
+      "cache": "warm",
+      "run": 3,
+      "notebookReadyMs": 871.6000000005588,
+      "fcpMs": 36
+    },
+    {
+      "cache": "warm",
+      "run": 4,
+      "notebookReadyMs": 844.3999999994412,
+      "fcpMs": 24
+    },
+    {
+      "cache": "warm",
+      "run": 5,
+      "notebookReadyMs": 776.5,
+      "fcpMs": 40
+    },
+    {
+      "cache": "warm",
+      "run": 6,
+      "notebookReadyMs": 795.3999999994412,
+      "fcpMs": 36
+    },
+    {
+      "cache": "warm",
+      "run": 7,
+      "notebookReadyMs": 771.4000000003725,
+      "fcpMs": 36
+    },
+    {
+      "cache": "warm",
+      "run": 8,
+      "notebookReadyMs": 782.6000000005588,
+      "fcpMs": 24
+    },
+    {
+      "cache": "warm",
+      "run": 9,
+      "notebookReadyMs": 824.4000000003725,
+      "fcpMs": 32
+    },
+    {
+      "cache": "warm",
+      "run": 10,
+      "notebookReadyMs": 768.9000000003725,
+      "fcpMs": 36
+    }
+  ]
+}
diff --git 
a/zeppelin-web-angular/e2e/performance/baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.summary.json
 
b/zeppelin-web-angular/e2e/performance/baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.summary.json
new file mode 100644
index 0000000000..25b4c82c8e
--- /dev/null
+++ 
b/zeppelin-web-angular/e2e/performance/baselines/70eef3f8-b75c-427a-b8b4-bfcd65b71264.summary.json
@@ -0,0 +1,87 @@
+{
+  "schemaVersion": 1,
+  "runId": "70eef3f8-b75c-427a-b8b4-bfcd65b71264",
+  "generatedAt": "2026-09-29T07:30:00.547Z",
+  "dryRun": false,
+  "zeppelinCommit": "7f7b995c35978c4a3ef3df31ec8faf206ce179f9",
+  "workingTreeDirty": false,
+  "os": {
+    "platform": "darwin",
+    "release": "23.6.0"
+  },
+  "cpuModel": "Apple M3 Pro",
+  "memoryBytes": 38654705664,
+  "browserVersion": "140.0.7339.186",
+  "nodeVersion": "v22.21.1",
+  "buildCommand": "npm run build",
+  "fixture": {
+    "path": "e2e/fixtures/performance/notebook-route-100-paragraphs.json",
+    "sha256": 
"7f94de1f9a7e529c7baf473a8bba9ab017f410c896f21bd8357922b63bd81fde"
+  },
+  "baseURL": "http://localhost:8080/";,
+  "viewport": {
+    "width": 1280,
+    "height": 720
+  },
+  "runsPerCache": 10,
+  "warmPrimingNavigations": 1,
+  "percentileMethod": "nearest-rank",
+  "bundles": {
+    "angularEntryChunks": [
+      {
+        "path": "dist/zeppelin/polyfills.ff67e561b2f2bf75.js",
+        "rawBytes": 56102,
+        "gzipBytes": 20644,
+        "sha256": 
"194d61d77df3cf43cc38b9fc29df74e3812e6548ce6300b5307477cdffe51802"
+      },
+      {
+        "path": "dist/zeppelin/styles.c4ee7052b61641a3.js",
+        "rawBytes": 136950,
+        "gzipBytes": 23253,
+        "sha256": 
"3a66a5f592c854b3352b75842ee21111d947a0a1e69fe7d26e88e60750c377ad"
+      },
+      {
+        "path": "dist/zeppelin/scripts.3e02b0ea73800c10.js",
+        "rawBytes": 825757,
+        "gzipBytes": 238428,
+        "sha256": 
"ca3bbd0856ca2debfdd5a58c49d95c57793dbfec3ed661920e87aa5506fa176f"
+      },
+      {
+        "path": "dist/zeppelin/main.3a26bcb125282632.js",
+        "rawBytes": 6691449,
+        "gzipBytes": 1786481,
+        "sha256": 
"072ad8207750b596ffea6242ac6d4d800886a9124caa541bb0b92685f6c906ed"
+      }
+    ],
+    "reactRemoteEntry": {
+      "path": "dist/zeppelin/assets/react/remoteEntry.js",
+      "rawBytes": 4109,
+      "gzipBytes": 1785,
+      "sha256": 
"42cdb5cdac9a5d9c8ad8675b6847bbced19b73f505787e0285c5e46aca342f82"
+    }
+  },
+  "summary": {
+    "cold": {
+      "count": 10,
+      "notebookReadyMs": {
+        "median": 1102.8500000000931,
+        "p95": 1181.9000000003725
+      },
+      "fcpMs": {
+        "median": 28,
+        "p95": 44
+      }
+    },
+    "warm": {
+      "count": 10,
+      "notebookReadyMs": {
+        "median": 806.2499999995343,
+        "p95": 871.6000000005588
+      },
+      "fcpMs": {
+        "median": 36,
+        "p95": 40
+      }
+    }
+  }
+}

Reply via email to