Files
ui/_docs/06_metrics/perf_2026-05-12_cycle2.md
Oleksandr Bezdieniezhnykh 15838c5cc1
ci/woodpecker/push/build-arm Pipeline failed
Update autodev state and lessons documentation
- Changed current step from 15 (Performance Test) to 9 (New Task) in _docs/_autodev_state.md, reflecting the transition to Cycle 3.
- Updated cycle count from 2 to 3 and modified sub-step details to indicate progress in gathering feature descriptions.
- Added new lessons to _docs/LESSONS.md, emphasizing best practices for API key management, dependency handling, and reporting inline fixes during security audits.
- Enhanced CI/CD pipeline documentation in _docs/02_document/deployment/ci_cd_pipeline.md to include new gates for vulnerability scans and SBOM emissions, along with dependency overrides for transitive dependencies.
- Expanded environment strategy documentation in _docs/02_document/deployment/environment_strategy.md to include the new Google Geocode API key management.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 22:49:38 +03:00

3.9 KiB

Performance Test Report — Cycle 2

Date: 2026-05-12 Cycle: 2 (Phase B, autodev Step 15) Runner: scripts/run-performance-tests.sh --static-only Toolchain: bun 1.3.11, vite 6.4.2 (post-AZ-502 override), node 24.10 Trigger: pre-deploy gate after Cycle 2 Step 14 (security audit + AZ-501/AZ-502 inline fixes)

Summary

Scenarios: pass 1 · warn 0 · fail 0 · unverified 9 (deferred) · quarantined 3
Verdict:   PASS — bundle size budget honored after Vite 6.4.2 upgrade

The only enforced metric this cycle (NFT-PERF-01, gzipped initial JS bundle ≤ 2 MB) passes with a wide margin. All other NFT-PERF-* scenarios are runtime-observable in Playwright; the perf-mode Playwright project (e2e/playwright.perf.config.ts) is not yet wired (deferred to per-AC test tasks AZ-457..AZ-482), so they are recorded as Unverified rather than failed. Three scenarios remain quarantined pending upstream code fixes (NFT-PERF-03, NFT-PERF-08, NFT-PERF-09).

Per-Scenario Results

Scenario Verdict Measured Threshold Source row
NFT-PERF-01 (initial JS bundle, gzipped) Pass 290 465 B (~283.7 KB) ≤ 2 097 152 B (2 MB) results_report row 40 / AC-11
NFT-PERF-02 (auth refresh round-trips) Unverified exactly 1 refresh per cycle results_report row 12
NFT-PERF-03 (SSE bearer-rotation reconnect) Quarantine ≤ 5 000 ms Step 8 hardening (SSE refresh rotation)
NFT-PERF-04 (live-GPS SSE open after select) Unverified ≤ 5 000 ms results_report row 34
NFT-PERF-05 (live-GPS SSE close after deselect) Unverified ≤ 1 000 ms results_report row 35
NFT-PERF-06 (annotation-status SSE unmount close) Unverified ≤ 1 000 ms results_report row 25
NFT-PERF-07 (bulk-validate UI reflect) Unverified ≤ 2 000 ms results_report row 37
NFT-PERF-08 (panel-width persistence debounce) Quarantine exactly 1 PUT ≤ 1 000 ms Step 4 fix (panel-width persistence)
NFT-PERF-09 (settings save error surfacing) Quarantine ≤ 2 000 ms Step 4 fix (settings save error surfacing)
NFT-PERF-10 (FCP on /flights, edge profile) Unverified ≤ 3 000 ms results_report row 98

Bundle Size Detail (NFT-PERF-01)

Vite 6.4.2 fresh build (bun run build after rm -rf dist):

Chunk Raw Gzipped
dist/index.html 0.43 KB 0.30 KB
dist/assets/index-*.css 53.76 KB 13.50 KB
dist/assets/index-*.js (initial entry) 923.12 KB 290.45 KB

Headroom against the 2 MB gate: ~1.78 MB unused (~85.86% of budget).

No bundle regression introduced by AZ-502 Vite/PostCSS upgrade — pre- and post-upgrade bundles measured identically at 290 465 B (cached dist/ and freshly rebuilt dist/ produced the same byte total).

Pre-existing build warnings (not introduced this cycle)

  • Some chunks are larger than 500 kB after minification — single 923.12 KB unsplit index-*.js chunk. Mitigation candidates listed in build output (dynamic import(), manualChunks). Track separately if/when CI enforces a stricter chunk-size budget.
  • One CSS lint note about flex value (compiler suggestion). Pre-existing; unrelated to AZ-502.

Coverage Gaps

The 6 Unverified scenarios (NFT-PERF-02, -04, -05, -06, -07, -10) measure runtime UI timings that require the Playwright perf project. Per the runner script:

Awaiting NFT-PERF-* task implementations (AZ-457..AZ-482); until then the e2e perf scenarios are SKIPPED.

Recommended next step (cycle 3+): enable the perf Playwright project alongside the existing e2e harness so these thresholds can be enforced pre-deploy.

Outcome

PASS — auto-chain to autodev Step 16 (Deploy).

No regression detected. All enforced thresholds met. Unverified scenarios are deferred gaps tracked in the performance-tests spec, not blocking failures.