refactor: remove ExtJS completely — SolidJS SPA only#470
Conversation
The root route (_start) now 302-redirects into the SolidJS SPA at /ui/tracking instead of rendering the ExtJS shell — so every go-home flow (login success, OAuth callback, the 403 page, the Jira macro) funnels to the new UI. Remove the legacy 'Time tracking' nav link (desktop + drawer); 'Worklog' is now the time-tracking entry. Drop the ExtJS-only /getProjectStructure endpoint (it only fed the old shell's globalThis.projectsData). Update the index controller tests to assert the redirect. Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
With / now redirecting straight to the SPA worklog, the ExtJS<->SPA last-view memory (restore-on-login) is obsolete: delete the last-view.html.twig partial, its login 'mark' + SPA 'consume' includes, the header's tt:lastView write, and the SPA's mirror write in App.tsx. Remove the legacyUrl AppConfig field (it only fed Help's API-spec link) — Help now links /api.yml directly; drop it from the SPA shell config and the test fixtures. Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
Removes the entire legacy ExtJS UI now that / serves the SolidJS SPA: - assets/ (ExtJS SDK + netresearch widgets/stores/models, encore app entry, Stimulus bootstrap, ExtJS icon/style sources) - templates/index.html.twig (ExtJS shell) and templates/base.html.twig (orphaned encore layout — nothing extended it) - public/build ExtJS artifacts: js/ (ext-js + netresearch), the encore app/ runtime/chunk bundles, entrypoints.json + manifest.json, css/app.* and the ExtJS-only timetracker.css, and the ExtJS grid icons. Kept: build/css/header.css (SPA shell) and the logos. - ProjectRepository::getProjectStructure (+ its private helpers) — only the removed ExtJS endpoint/shell consumed the project-tree structure. - error403.html.twig no longer pulls ext-all-gray.css / timetracker.css; its own inline styles render the page. Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
ExtJS was the only consumer of the encore build (retired in #431, now deleted). Remove the toolchain entirely: - composer: drop symfony/webpack-encore-bundle (require-dev) + Flex unconfigure - npm: package.json down to Playwright + axe (e2e only); drop webpack, encore, babel, stimulus, sass, core-js, regenerator; regenerate package-lock - delete webpack.config.js and config/packages/{dev,test}/webpack_encore.yaml - remove WebpackEncoreBundle from bundles.php - Dockerfile: drop 'npm ci --legacy-peer-deps' (no encore peer conflicts left) - restore the /node_modules + /public/build-ui gitignores as standalone entries Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
The ExtJS shell is gone, so the e2e suite is rebased onto the SPA: - login() lands on /ui/tracking (was /); waitForGrid() targets the SolidJS worklog grid (table.tracking-table) instead of .x-grid - delete the pure-ExtJS grid specs entries.spec + entry-operations.spec (the SPA grid is covered by worklog-crud + worklog-grid-editing) - rewrite navigation.spec for SPA header nav / modals (drop ExtJS tab-bar, grid-column, sorting and last-view tests) - drop the legacy 'Time tracking' link test; point settings/export login helpers + effectiveness tests at the SPA worklog grid; remove the show_empty_line effectiveness test (no SPA grid effect) - prune the now-dead ExtJS helpers from helpers/grid.ts + helpers/navigation.ts Validated against the e2e stack: 85 passed, 0 failed. Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
|
There was a problem hiding this comment.
Code Review
This pull request removes the legacy Webpack Encore toolchain along with a large volume of unused Ext JS 4.1 SDK files, assets, and configurations. The root Node dependencies are simplified to only include Playwright and Axe for end-to-end testing, which allows for the removal of the --legacy-peer-deps workaround in the Dockerfile. As there are no review comments provided, I have no feedback to evaluate.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #470 +/- ##
============================================
- Coverage 84.17% 84.00% -0.18%
+ Complexity 2848 2829 -19
============================================
Files 190 189 -1
Lines 7710 7615 -95
============================================
- Hits 6490 6397 -93
+ Misses 1220 1218 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…ide with screenshots, ADR record, agent rules (#494) ## Summary Full documentation overhaul: a verified-facts rewrite of the guides, a new illustrated user guide, a corrected ADR record, refreshed agent rules, an extended in-app Help page, and a full-structure README. A 5-domain audit against the actual code found that, beyond routine drift, several large docs (DEPLOYMENT_GUIDE, CODE_EXAMPLES, TROUBLESHOOTING, configuration, development, testing, and ADRs 003–013) described **infrastructure this application never had** — Redis layers, JWT auth, `/api/v1`, ParaTest/Panther suites, ~50 invented env vars and `app:*` console commands. Everything replaced here was re-derived from `Makefile`, `composer.json`, `compose.yml`, `.env*`, `config/`, `src/` and the real CI workflows; every command, route, env var and version in the new docs was verified to exist. ## What's in here - **New [user guide](docs/user-guide.md)** covering every feature, with 20 English 1440px screenshots — including the QoL features (dark mode, compact density, left/right sidebar navigation, Alt shortcut badges); [features.md](docs/features.md) and [FAQ.md](docs/FAQ.md) rewritten for the current SolidJS UI - **README expanded to a full project page**: TOC, About, grouped features, screenshot gallery, first-login credentials for the dev stack, key-config table, mermaid architecture diagram, Usage/Testing/Deployment/Contributing/Security sections - **Developer guides rewritten** ([development](docs/development.md), [configuration](docs/configuration.md), [testing](docs/testing.md)) — ~5,300 lines of fiction replaced by ~1,300 verified lines; configuration now documents the real ticket-system admin fields (SERVER OAuth 1.0a vs CLOUD OAuth 2.0) and internal-Jira ticket mirroring - **Ops docs rewritten** ([deployment](docs/DEPLOYMENT_GUIDE.md), [troubleshooting](docs/TROUBLESHOOTING.md)) from `compose.yml` / `docker-bake.hcl` / the publish workflow - **ADR record corrected**: index now lists all 17 ADRs; dated *reality notes* on ADRs whose bodies describe never-built infrastructure (bodies kept as history); new [ADR-015](docs/adr/ADR-015-php-8-5-symfony-8-upgrade.md) (PHP 8.5/Symfony 8), [ADR-016](docs/adr/ADR-016-solidjs-frontend-rewrite.md) (ExtJS→SolidJS, #470/#490), [ADR-017](docs/adr/ADR-017-jira-cloud-oauth2.md) (dual-mode Jira auth, #416) - **API/internals references** (api.md, DTO/EVENT/REPOSITORY docs) aligned with the code — all 65 endpoint headings now map to real routes - **AGENTS.md**: drift fixed (PHPStan 10, PER-CS), new scoped files for `frontend/` and `e2e/`, `CLAUDE.md` symlinks restored at all five levels - **In-app Help** (`/ui/help`): new "The pages" section (EN+DE) and a link to the user guide — lint/typecheck/346 Vitest tests green - **CONTRIBUTING**: the enforced-but-undocumented DCO sign-off requirement is now documented - **Removed**: `README.rst` (stale duplicate), `TASKS.md` (abandoned 2025 notes), `docs/CODE_EXAMPLES.md` (68 KB of examples for services that never existed); all references updated ## Review Copilot raised 2 inline comments (PER-CS leftover in src/AGENTS.md, 404ing v4_EOL release link) — both fixed in 41fee70, threads replied to and resolved. Gemini reviewed with no findings. ## Verification - Every documented `make`/`composer`/`bin/console` command checked against `Makefile`, `composer.json` scripts and `src/Command/` - All relative links and image references across 58 markdown files resolve - ADR PR/commit references verified via GitHub (#416, #470, #490) - Frontend change: `bun run lint`, `bun run typecheck`, `bun run test` (346 passing), page visually verified in the running e2e stack - Host unit suite green (1557 tests) via the CaptainHook pre-commit gate on every commit ## Follow-ups (out of scope, found during verification) - `docker/nginx/default.conf` forwards to `phpfpm:9000` but the prod compose service is named `app` — the deployment guide documents the alias workaround; compose.yml should probably gain a `phpfpm` network alias - The admin Users form still offers a `CTL` user type (`frontend/src/admin/entities.ts`) that `UserType::from()` rejects - Jira Cloud OAuth 2.0: data model + admin form exist (#416), but the runtime 3LO flow is not implemented yet (`JiraAuthenticationService` is OAuth1-only) — ADR-017 records this honestly



What
Removes the legacy ExtJS UI completely — the app is now the SolidJS SPA under
/uionly. Split into reviewable commits (single PR):refactor(ui): redirect / to the SPA worklog, drop the ExtJS nav link—/(route_start) now 302-redirects to/ui/tracking, so every go-home flow (login success, OAuth callback, 403 page, Jira macro) funnels to the SPA. Drops the "Time tracking" nav link (Worklog is now the time-tracking entry) and the ExtJS-only/getProjectStructureendpoint.refactor(ui): drop legacyUrl and the last-view strangler crutch— removes the ExtJS↔SPA last-view restore machinery and thelegacyUrlconfig (Help links/api.ymldirectly).chore: delete ExtJS source, built assets, and the dead base layout— deletesassets/(ExtJS SDK + widgets + Stimulus + encore entry),templates/index.html.twig, the orphanedtemplates/base.html.twig, the ExtJS bits underpublic/build/(selective — keepsbuild/css/header.css+ the logos), andProjectRepository::getProjectStructure. The 403 page no longer pulls ExtJS CSS. (~4,200 files / ~84 MB.)build: remove the webpack-encore toolchain— dropssymfony/webpack-encore-bundle, the entire webpack/babel/stimulus/sass npm toolchain,webpack.config.js,config/packages/{dev,test}/webpack_encore.yaml,WebpackEncoreBundle, andnpm ci --legacy-peer-deps(no peer conflicts left). Root npm deps are now just Playwright + axe (e2e).test(e2e): rewrite the suite for the SolidJS-only app— rebases e2e onto the SPA:login()→/ui/tracking,waitForGrid()→the SolidJS grid; deletes the pure-ExtJS grid specs (covered byworklog-crud/worklog-grid-editing); rewritesnavigation.specfor SPA nav/modals; prunes the dead ExtJS test helpers.Verification (local)
Notes
prod/:productionbehaviour is unchanged except/now redirects to/ui/tracking. The default landing for an authenticated user is the Worklog.--legacy-peer-deps(done). No composer upgrades were specifically blocked by ExtJS/encore — the available updates are routine Symfony8.1.0→8.1.1patches, left to the normal Dependabot flow (no version bumps in a feature PR).config/reference.php(auto-generated) is intentionally left untouched; it regenerates on a future full run.