Skip to content

Consolidate frontend tooling with Vite+ and fix dashboard request lifecycles - #80

Merged
binaryfire merged 16 commits into
0.4from
chore/vite-plus
Oct 28, 2026
Merged

binaryfire merged 16 commits into
0.4from
chore/vite-plus

Conversation

@binaryfire

@binaryfire binaryfire commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

The framework frontends currently use separate installations, lockfiles and build commands. This makes shared dependency updates harder to maintain and allows the dashboards and other shipped assets to drift. This change puts their development tooling in one Vite+/pnpm workspace and fixes dashboard request and cleanup bugs found while validating the migration.

Shared tooling

  • Include Horizon, Telescope, the exception renderer, Workbench, Wayfinder and the AI workbench in the root workspace. Shared dependencies use a catalog and one lockfile; each package still declares its own dependencies and build configuration.
  • Pin Vite+ and its matching toolchain, preserve the release-age policy, and remove superseded npm locks and configuration. Workbench retains its supported Tailwind major.
  • Provide root formatting, linting, type checking, test and build commands through native Vite+ tools. Quality checks generate Wayfinder fixtures first, so they work after a fresh installation.
  • Keep application skeletons independent. Composer consumers still receive committed, ready-to-use assets and do not need Node or the root catalog. Frontend customization happens in the components repository or with an explicitly configured split fork.
  • Keep mechanical formatting in its own commit and record it in .git-blame-ignore-revs. Existing component names, Options API organization and upstream structure remain recognizable.

Dashboard fixes

Horizon polling now waits for its requests and skips overlapping ticks. Dashboard refreshes wait for every request to settle, including when one fails. List screens cancel superseded reads and reads belonging to a screen that has been left, skip refreshes during user loads, and clear search timers on unmount.

Failed-job searches reset pagination and encode their parameters correctly. Tagged pagination uses the same starting index for selection and returned rows. Navigation remounts resource screens when the path changes while preserving query-only updates. Failed retries release their pending state and explain that the result could not be confirmed.

Modal instances, listeners and timers are cleaned up on unmount. Chart.js instances remain non-reactive so their animation cleanup uses the correct object identity. Horizon uses the supported Bootstrap line while keeping its own light and dark themes.

Telescope updates recording state only after a successful response, prevents overlapping toggles, and reloads cleared entries only after success. Both dashboards update monitoring tags after successful requests and preserve newer input drafts. Telescope stores monitored tags with a native upsert to avoid concurrent duplicate-key failures. All shipped database grammars support this; custom connection grammars need upsert support.

CI and maintenance

Prompts now matches Symfony Console's case-insensitive built-in style names when measuring text and preserving closing tags. It requires Console 8.1.10, where that behavior was fixed. Cookie enum-name coverage follows native Symfony validation across supported versions, including versions that accept 0 as a cookie name; cookie runtime behavior is unchanged.

One JavaScript job installs the frozen workspace, checks source, builds assets, verifies committed outputs, and runs the registered tests and Wayfinder type checks. Asset verification catches both modified files and new untracked chunks, with instructions for rebuilding them. CI does not publish or commit generated files.

Dependabot updates the workspace catalog and independent skeleton separately, with coupled toolchain updates grouped. Contributor documentation covers installation, commands, dependency updates and asset regeneration. Contributors can submit source changes; maintainers regenerate assets before merging.

Verification

  • PHP formatting and static analysis passed, along with affected Horizon, Telescope, Foundation, Workbench, Wayfinder and MCP tests.
  • Shared JavaScript checks and tests passed, including cached Wayfinder routes and generated TypeScript output.
  • Frozen installation and every workspace build passed. Repeated builds produced identical distributed output, and the stale-asset check detected both modifications and added chunks.
  • Browser checks exercised the built dashboards, exception page, Workbench and AI demo, including navigation, modal cleanup, themes and chart cleanup. The demo used intercepted responses without contacting providers.
  • An exported application installed and built independently of the workspace. Bundle sizes were compared, workflow configuration was checked, and the workspace dependency audit reported no advisories.

Note

Adopt Vite+ for frontend tooling and fix Horizon/Telescope dashboard request lifecycles

  • Replaces Vite/Vitest with vite-plus across the root and package configs. Adds a shared root Vite+ config with test projects and a pnpm catalog, and switches test/build scripts to vp commands in package.json and vite.config.ts.
  • Fixes dashboard polling: Poll.vue now awaits a required callback prop instead of emitting a poll event, and Horizon screens pass their refresh methods through it. Dashboard refresh uses Promise.allSettled and only marks ready when all three requests succeed.
  • Hardens list screens: failedJobs, batches, recentJobs, and tagJobs now abort superseded and unmounted requests via AbortController, skip overlapping refreshes, and ignore aborted responses.
  • Fixes retry and monitoring flows: failed retry/monitor requests display error alerts and no longer mutate local state before the server confirms.
  • Raises symfony/console to ^8.1.10 across all composer manifests and updates CI to the setup-vp action with frontend checks, builds, and vp test.
  • Risk: the failure-status v-if in batches/index.vue and the batch-preview :to binding in recentJobs/job.vue contain invalid expressions that break Vue template compilation; monitoring screen also uses a required callback prop on Poll, so any remaining poll event listeners will no longer fire.

Macroscope summarized 2e6d3f2.

Apply the shared formatter conventions to frontend files whose changes are entirely formatting. Preserve their runtime behavior, upstream names, comments and structure.

Keep this mechanical pass separate so Git blame can ignore it without hiding the dashboard fixes or tooling changes that follow. Files that also require functional changes stay with their corresponding changes.
Bring Horizon, Telescope, the exception renderer, Workbench, Wayfinder and the AI workbench into one pnpm workspace with a shared dependency catalog and lockfile. Keep application skeletons independent and preserve package-local build outputs for Composer distribution.

Pin Vite+ and its matching core and Vitest versions, declare direct dependencies, retain distinct supported Tailwind majors, and remove superseded npm locks and policy files. Preserve the release-age policy and explicitly allow only the required dependency build script.

Use native Vite+ formatting, linting, type checking, test projects and task selection. Generate Wayfinder fixtures before quality checks so the commands work on a fresh installation, and keep cached-route testing in its owning package. Validate frozen installs, all member builds, test discovery and generated TypeScript output.
Move existing Telescope and Wayfinder tests to the bundled Vite+ test APIs while preserving their behavioral assertions. Express negative generated-route argument checks through expectTypeOf and retain the separate generated-output compiler check.

Give Wayfinder test builds isolated temporary directories with cleanup instead of a shared fixed path. Apply the shared formatter to these test files as part of their runner migration. Normal and cached route tests, generated TypeScript checks and the complete JavaScript suite pass.
Use the shared test runner and formatter while retaining the classic-script SDK and its public browser API. Mark asynchronous dispatches whose handlers already own response and error reporting with void, and remove an unused catch binding.

Regenerate the Terser output and verify the browser SDK tests against both source and minified distributions. Keep minification explicit rather than introducing a bundler wrapper or changing how applications load the SDK.
Calculate the inclusive starting index once for tagged failed jobs and use it for both tag selection and returned row indices. Preserve the upstream zero cursor alias so initial requests and later pages agree about their position.

Declare getJobs indexFrom as an integer in the repository contract and implementation, matching the existing strictly typed indexJobs call and its callers. Cover absent, zero, initial and next-page cursors in the controller regression test. Targeted formatting, static analysis and Horizon PHP tests pass.
Make Poll await an explicit callback, prevent overlapping ticks, report failures and release its busy state after settlement. Retain the existing polling intervals and visibility behavior, with focused overlap and recovery coverage.

Release Alert modal listeners, timers and instances on unmount, and fix its accessible label. Keep Chart.js instances non-reactive so animation cleanup sees the original instance and destroy charts when their component is removed.

Key the root view by route path to refresh resource screens while retaining query-only updates. Use package-based Bootstrap Sass with the existing light and dark themes, disable unused Bootstrap color-mode generation, and remove obsolete transition styles and script attributes. Verify modal and chart lifecycles against real browser assets.
Return every polling request to Poll and wait for all dashboard requests to settle before reporting failures. List screens cancel superseded reads and reads owned by an unmounted screen, skip refreshes during user loads, and ignore late canceled responses. Remove duplicate initial loads and redundant route watchers.

Reset failed-job pagination when searching, encode search through Axios parameters, and use after-index cursors consistently. Clear search timers on unmount. Release retry state after failures and explain unconfirmed retries; retain the success cooldown while leaving refreshes to existing polling.

Update monitoring tags only after successful requests, preserve newer drafts and avoid duplicate displayed tags. Handle both numeric and DateInterval delayed-job values. Add focused regression coverage for request settlement, list navigation, cursor boundaries, retries and monitoring behavior; verify the screens using real compiled assets.
Update recording state only after the toggle succeeds, prevent overlapping toggle requests and release the pending state on failure. Report changes that could not be confirmed and reload cleared entries only after success. Exercise these paths through the real mounted application entry.

Wait for the initial monitoring list before enabling additions. Capture submitted tags, preserve newer drafts, deduplicate successful additions and change displayed tags only after successful mutations. Report failed additions and deletions through the existing alert.

Replace monitoring select-and-insert with one native upsert of unique tags so concurrent requests cannot collide on the tag primary key. All shipped database grammars support upsert; a custom DB::extend connection now needs upsert support in its grammar. Retain strict database errors without an insert fallback. Existing storage coverage and focused dashboard tests pass.
Drop the unused bootstrap import and empty module from the authentication frontend. Keep Alpine initialization in its existing entry and preserve the Workbench asset publication contract. The workspace build and independent application browser check pass.
Commit the dashboard, exception renderer and Workbench outputs generated from the shared workspace and reviewed source changes. Replace the obsolete Workbench chunk and update its manifest while preserving all PHP-consumed filenames and inline classic-script behavior.

Verify repeat builds produce identical output, exercise the distributed assets in browser and exported-application checks, and compare compressed bundle sizes. Composer installations continue to receive ready-to-use assets without requiring Node or access to the monorepo catalog. AI workbench build output remains untracked.
Replace the separate frontend installations with a pinned setup-vp action and one frozen workspace install. Run shared source checks, builds, JavaScript tests, cached Wayfinder tests and generated-output type checking sequentially. Trust the mounted checkout before container Git commands.

Fail with affected filenames and contributor instructions when distributed outputs differ or new chunks are untracked. CI verifies committed assets without publishing them or making commits.

Add weekly Dependabot updates for the root catalog and independent skeleton, preserve the seven-day version-update cooldown, and group coupled Vite+ toolchain updates. Retain the existing GitHub Actions updates and independent skeleton installation workflow.
Document native Vite+ installation, quality checks, tests, builds and dependency updates from the components workspace. Explain the independent skeleton boundary and how contributors work on frontend source while maintainers regenerate distributed assets before merge.

Record the approved formatter adaptation for maintained ports and the formatting-only commit in the Git blame ignore file. Describe local blame configuration and preserve upstream structure and naming as the maintenance reference.

Update the AI workbench instructions and active plan to match the implemented commands and verified behavior. Keep post-merge dependency graph verification and upstream-sync guidance updates explicit until publishing is authorized.
@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Important

Review skipped

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

Run configuration

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

❤️ Share

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

@binaryfire

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review skipped: 174 files exceed the limit of 100.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Unify frontend tooling and fix dashboard request lifecycles

✨ Enhancement 🐞 Bug fix 🧪 Tests ⚙️ Configuration changes 📝 Documentation 🕐 40+ Minutes

Grey Divider

AI Description

• Consolidate framework frontends into one Vite+/pnpm workspace while preserving package-local
 builds and independent skeletons.
• Fix dashboard polling, cancellation, pagination, mutation feedback, and component cleanup.
• Add shared checks and CI asset verification, with tests and contributor guidance.
Diagram

graph TD
  W["Workspace catalog"] --> V["Vite+ tasks"] --> P["Package builds"] --> A["Committed assets"]
  V --> Q["Checks and tests"]
  H["Horizon dashboard"] --> R["Request lifecycle"]
  T["Telescope dashboard"] --> R
  C["CI verification"] --> Q
  C --> A
  P --> H
  P --> T
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep separate frontend installations
  • ➕ Isolates dependency changes and build failures by package.
  • ➖ Retains multiple lockfiles and commands.
  • ➖ Makes shared updates and asset-drift checks harder to coordinate.
2. Move dashboards to shared request composables
  • ➕ Could centralize cancellation and polling rules across screens.
  • ➖ Requires a broader dashboard refactor.
  • ➖ Risks obscuring package-specific behavior during the tooling migration.

Recommendation: Keep the shared workspace with package-local build configurations and committed outputs: it addresses tooling drift without changing Composer consumers. The targeted dashboard fixes are proportionate here; consider shared request abstractions separately only if further screens need the same lifecycle rules.

Files changed (171) +10013 / -3520

Bug fix (22) +1278 / -852
base.jsAdd reusable Horizon error alerts +10/-1

Add reusable Horizon error alerts

• Introduces an error-alert helper used when retry and monitoring requests cannot be confirmed.

src/horizon/resources/js/base.js

Alert.vueDispose Horizon alert resources on unmount +38/-52

Dispose Horizon alert resources on unmount

• Binds the modal listener to its own element and clears timers, listeners, and Bootstrap state when removed.

src/horizon/resources/js/components/Alert.vue

LineChart.vueKeep Chart.js instances non-reactive +60/-52

Keep Chart.js instances non-reactive

• Uses the original chart instance identity and destroys it on unmount so animation cleanup works correctly.

src/horizon/resources/js/components/LineChart.vue

Poll.vueWait for polling callbacks to settle +23/-22

Wait for polling callbacks to settle

• Accepts an asynchronous callback, skips ticks while it is pending, and releases the guard after success or failure.

src/horizon/resources/js/components/Poll.vue

index.vueCancel stale Horizon batch-list requests +131/-69

Cancel stale Horizon batch-list requests

• Aborts superseded or unmounted reads, prevents refreshes during user loads, and clears search timers.

src/horizon/resources/js/screens/batches/index.vue

preview.vueProtect Horizon batch preview requests +85/-54

Protect Horizon batch preview requests

• Aligns preview loading and cleanup with the dashboard's request-lifecycle handling.

src/horizon/resources/js/screens/batches/preview.vue

dashboard.vueWait for all Horizon dashboard requests +191/-107

Wait for all Horizon dashboard requests

• Settles stats, workers, and workload requests before completing a polling cycle, and propagates failures to the poll guard.

src/horizon/resources/js/screens/dashboard.vue

index.vueFix failed-job search and read lifecycles +159/-111

Fix failed-job search and read lifecycles

• Resets pagination on search, passes encoded query parameters, aborts stale requests, and reports failed retry confirmations.

src/horizon/resources/js/screens/failedJobs/index.vue

job.vueRelease failed-job retry state on errors +128/-76

Release failed-job retry state on errors

• Clears the pending retry state and shows an uncertainty-aware error when the retry request fails.

src/horizon/resources/js/screens/failedJobs/job.vue

preview.vueAlign metrics preview lifecycle +52/-37

Align metrics preview lifecycle

• Adjusts metric-preview loading and cleanup alongside shared Vue formatting.

src/horizon/resources/js/screens/metrics/preview.vue

index.vueConfirm Horizon monitoring changes before updating UI +98/-66

Confirm Horizon monitoring changes before updating UI

• Updates tags after successful requests, preserves newer drafts, shows errors on failure, and disposes the add-tag modal.

src/horizon/resources/js/screens/monitoring/index.vue

tag-jobs.vueCancel stale monitored-job reads +81/-54

Cancel stale monitored-job reads

• Aborts superseded and unmounted requests while keeping background refreshes from replacing active user loads.

src/horizon/resources/js/screens/monitoring/tag-jobs.vue

index.vueCancel stale recent-job reads +83/-55

Cancel stale recent-job reads

• Adds request cancellation and cleanup so navigation and user loads are not overwritten by older refreshes.

src/horizon/resources/js/screens/recentJobs/index.vue

job.vueAlign recent-job preview behavior +41/-34

Align recent-job preview behavior

• Adjusts preview request handling and formats the job-detail component.

src/horizon/resources/js/screens/recentJobs/job.vue

layout.blade.phpKey Horizon screens by route path +1/-1

Key Horizon screens by route path

• Remounts resource screens when the path changes while preserving instances for query-only navigation.

src/horizon/resources/views/layout.blade.php

JobRepository.phpClarify failed-job pagination contract +1/-1

Clarify failed-job pagination contract

• Aligns the repository contract with the corrected starting-index behavior.

src/horizon/src/Contracts/JobRepository.php

FailedJobsController.phpUse one starting index for tagged failed jobs +3/-3

Use one starting index for tagged failed jobs

• Passes the same computed pagination offset to tag selection and job retrieval.

src/horizon/src/Http/Controllers/FailedJobsController.php

RedisJobRepository.phpAlign Redis failed-job pagination +1/-1

Align Redis failed-job pagination

• Adjusts repository handling to match the corrected starting-index contract.

src/horizon/src/Repositories/RedisJobRepository.php

app.jsConfirm Telescope recording and clearing requests +26/-5

Confirm Telescope recording and clearing requests

• Prevents overlapping recording toggles and updates state or reloads entries only after successful responses.

src/telescope/resources/js/app.js

Alert.vueAlign Telescope alert cleanup +9/-15

Align Telescope alert cleanup

• Adjusts modal lifecycle handling and formats the alert component.

src/telescope/resources/js/components/Alert.vue

index.vueUpdate monitored tags only after success +52/-34

Update monitored tags only after success

• Defers tag changes until requests succeed, preserves newer drafts, and reports unconfirmed mutations.

src/telescope/resources/js/screens/monitoring/index.vue

DatabaseEntriesRepository.phpUpsert monitored Telescope tags +5/-2

Upsert monitored Telescope tags

• Replaces read-then-insert with a native upsert to prevent duplicate-key failures under concurrent requests.

src/telescope/src/Storage/DatabaseEntriesRepository.php

Refactor (57) +1257 / -1260
submission-cleanup.cjsFormat submission cleanup automation +113/-50

Format submission cleanup automation

• Applies shared JavaScript formatting to the existing issue and draft-PR cleanup logic.

.github/scripts/submission-cleanup.cjs

attachment.jsxFormat AI attachment component +138/-165

Format AI attachment component

• Applies shared formatting without changing the attachment component's intended behavior.

dogfood/ai/workbench/resources/js/components/ui/attachment.jsx

bubble.jsxFormat AI bubble component +77/-99

Format AI bubble component

• Applies shared JSX formatting to the chat bubble.

dogfood/ai/workbench/resources/js/components/ui/bubble.jsx

button.jsxFormat AI button component +45/-52

Format AI button component

• Applies shared JSX formatting to button variants.

dogfood/ai/workbench/resources/js/components/ui/button.jsx

input.jsxFormat AI input component +17/-20

Format AI input component

• Applies shared JSX formatting to the input component.

dogfood/ai/workbench/resources/js/components/ui/input.jsx

marker.jsxFormat AI marker component +46/-54

Format AI marker component

• Applies shared JSX formatting to message markers.

dogfood/ai/workbench/resources/js/components/ui/marker.jsx

message-scroller.jsxFormat AI message scroller +86/-104

Format AI message scroller

• Applies shared JSX formatting to the scrolling component.

dogfood/ai/workbench/resources/js/components/ui/message-scroller.jsx

message.jsxFormat AI message component +61/-87

Format AI message component

• Applies shared JSX formatting to message rendering.

dogfood/ai/workbench/resources/js/components/ui/message.jsx

Chat.jsxAlign AI chat page with shared checks +2/-8

Align AI chat page with shared checks

• Tidies the chat page for the consolidated formatter and lint checks.

dogfood/ai/workbench/resources/js/pages/Chat.jsx

scripts.jsAlign renderer scripts with shared checks +1/-1

Align renderer scripts with shared checks

• Makes a small JavaScript adjustment for the consolidated tooling.

src/foundation/resources/exceptions/renderer/scripts.js

SchemeToggler.vueFormat Horizon theme toggle +54/-28

Format Horizon theme toggle

• Applies shared formatting to the existing system, dark, and light theme controls.

src/horizon/resources/js/components/SchemeToggler.vue

Stacktrace.vueFormat Horizon stack traces +15/-13

Format Horizon stack traces

• Aligns stack-trace markup and script formatting with shared conventions.

src/horizon/resources/js/components/Stacktrace.vue

index.vueFormat Horizon metrics navigation +17/-8

Format Horizon metrics navigation

• Applies shared Vue formatting to metrics navigation and its nested outlet.

src/horizon/resources/js/screens/metrics/index.vue

jobs.vueFormat job metrics screen +29/-29

Format job metrics screen

• Applies shared formatting to job-metrics source and markup.

src/horizon/resources/js/screens/metrics/jobs.vue

queues.vueFormat queue metrics screen +29/-29

Format queue metrics screen

• Applies shared formatting to queue-metrics source and markup.

src/horizon/resources/js/screens/metrics/queues.vue

job-row.vueAlign monitored-job row behavior and formatting +37/-16

Align monitored-job row behavior and formatting

• Updates the job-row component for the shared checks and dashboard changes.

src/horizon/resources/js/screens/monitoring/job-row.vue

tag.vueAlign monitored-tag screen +15/-6

Align monitored-tag screen

• Adjusts the tag screen to the updated polling and Vue formatting conventions.

src/horizon/resources/js/screens/monitoring/tag.vue

job-row.vueFormat recent-job rows +30/-18

Format recent-job rows

• Applies shared formatting to recent-job links, details, and script.

src/horizon/resources/js/screens/recentJobs/job-row.vue

default.cssFormat the default mail theme +6/-3

Format the default mail theme

• Wraps CSS declarations according to the shared formatter without changing intended styling.

src/mail/resources/views/html/themes/default.css

mcp-sdk.jsAlign MCP browser SDK with shared checks +16/-48

Align MCP browser SDK with shared checks

• Formats the SDK and annotates intentionally detached asynchronous handlers for the new lint checks.

src/mcp/resources/js/mcp-sdk.js

base.jsAlign Telescope base helpers with shared checks +1/-1

Align Telescope base helpers with shared checks

• Makes a small adjustment to shared dashboard helper source.

src/telescope/resources/js/base.js

CopyClipboard.vueFormat clipboard component +7/-7

Format clipboard component

• Applies shared Vue formatting to clipboard behavior.

src/telescope/resources/js/components/CopyClipboard.vue

ExceptionCodePreview.vueFormat exception-code preview +4/-4

Format exception-code preview

• Applies shared Vue formatting to exception-code display.

src/telescope/resources/js/components/ExceptionCodePreview.vue

IndexScreen.vueFormat shared Telescope index behavior +109/-98

Format shared Telescope index behavior

• Aligns the reusable entry-list component and its existing abort and polling handling with shared formatting.

src/telescope/resources/js/components/IndexScreen.vue

PreviewScreen.vueAlign Telescope preview request handling +33/-39

Align Telescope preview request handling

• Preserves cancellation and readiness handling across reused previews while applying shared formatting.

src/telescope/resources/js/components/PreviewScreen.vue

RelatedEntries.vueFormat related-entry component +76/-68

Format related-entry component

• Applies shared Vue formatting to related-entry loading and presentation.

src/telescope/resources/js/components/RelatedEntries.vue

Stacktrace.vueFormat Telescope stack traces +5/-5

Format Telescope stack traces

• Applies shared Vue formatting to stack-trace rendering.

src/telescope/resources/js/components/Stacktrace.vue

preview.vueFormat Telescope batch preview +2/-2

Format Telescope batch preview

• Applies shared Vue formatting to the batch preview.

src/telescope/resources/js/screens/batches/preview.vue

index.vueFormat cache-entry index +2/-4

Format cache-entry index

• Applies shared formatting to cache-entry list configuration.

src/telescope/resources/js/screens/cache/index.vue

preview.vueFormat cache-entry preview +7/-8

Format cache-entry preview

• Applies shared Vue formatting to cache preview.

src/telescope/resources/js/screens/cache/preview.vue

index.vueFormat client-request index +3/-5

Format client-request index

• Applies shared formatting to client-request list configuration.

src/telescope/resources/js/screens/client-requests/index.vue

preview.vueFormat client-request preview +4/-6

Format client-request preview

• Applies shared Vue formatting to client-request details.

src/telescope/resources/js/screens/client-requests/preview.vue

preview.vueFormat command preview +4/-4

Format command preview

• Applies shared Vue formatting to command details.

src/telescope/resources/js/screens/commands/preview.vue

index.vueFormat dump loading and polling +47/-45

Format dump loading and polling

• Applies shared formatting while retaining request cancellation and dump refresh behavior.

src/telescope/resources/js/screens/dumps/index.vue

preview.vueFormat event preview +4/-4

Format event preview

• Applies shared Vue formatting to event details.

src/telescope/resources/js/screens/events/preview.vue

preview.vueFormat exception preview +20/-16

Format exception preview

• Applies shared Vue formatting to exception details.

src/telescope/resources/js/screens/exceptions/preview.vue

index.vueFormat gate-entry index +3/-5

Format gate-entry index

• Applies shared formatting to gate-entry list configuration.

src/telescope/resources/js/screens/gates/index.vue

preview.vueFormat gate-entry preview +4/-7

Format gate-entry preview

• Applies shared Vue formatting to gate details.

src/telescope/resources/js/screens/gates/preview.vue

index.vueFormat Telescope job index +2/-4

Format Telescope job index

• Applies shared formatting to job-entry list configuration.

src/telescope/resources/js/screens/jobs/index.vue

preview.vueFormat Telescope job preview +11/-11

Format Telescope job preview

• Applies shared Vue formatting to job-entry details.

src/telescope/resources/js/screens/jobs/preview.vue

index.vueFormat log-entry index +2/-4

Format log-entry index

• Applies shared formatting to log-entry list configuration.

src/telescope/resources/js/screens/logs/index.vue

preview.vueFormat log-entry preview +9/-8

Format log-entry preview

• Applies shared Vue formatting to log details.

src/telescope/resources/js/screens/logs/preview.vue

index.vueFormat mail-entry index +10/-8

Format mail-entry index

• Applies shared formatting to mail-entry list configuration.

src/telescope/resources/js/screens/mail/index.vue

preview.vueFormat mail-entry preview +10/-7

Format mail-entry preview

• Applies shared Vue formatting to mail details.

src/telescope/resources/js/screens/mail/preview.vue

index.vueFormat model-entry index +2/-4

Format model-entry index

• Applies shared formatting to model-entry list configuration.

src/telescope/resources/js/screens/models/index.vue

preview.vueFormat model-entry preview +3/-6

Format model-entry preview

• Applies shared Vue formatting to model details.

src/telescope/resources/js/screens/models/preview.vue

preview.vueFormat notification preview +2/-2

Format notification preview

• Applies shared Vue formatting to notification details.

src/telescope/resources/js/screens/notifications/preview.vue

preview.vueFormat query preview +5/-3

Format query preview

• Applies shared Vue formatting to query details.

src/telescope/resources/js/screens/queries/preview.vue

preview.vueFormat Redis preview +2/-2

Format Redis preview

• Applies shared Vue formatting to Redis-entry details.

src/telescope/resources/js/screens/redis/preview.vue

index.vueFormat request-entry index +2/-4

Format request-entry index

• Applies shared formatting to request-entry list configuration.

src/telescope/resources/js/screens/requests/index.vue

preview.vueFormat request-entry preview +4/-6

Format request-entry preview

• Applies shared Vue formatting to request details.

src/telescope/resources/js/screens/requests/preview.vue

preview.vueFormat Reverb preview +1/-1

Format Reverb preview

• Applies shared Vue formatting to Reverb-entry details.

src/telescope/resources/js/screens/reverb/preview.vue

preview.vueFormat schedule preview +8/-6

Format schedule preview

• Applies shared Vue formatting to scheduled-task details.

src/telescope/resources/js/screens/schedule/preview.vue

preview.vueFormat view preview +4/-7

Format view preview

• Applies shared Vue formatting to view-entry details.

src/telescope/resources/js/screens/views/preview.vue

wayfinder.tsAlign Wayfinder runtime with shared checks +11/-8

Align Wayfinder runtime with shared checks

• Adjusts TypeScript source for the consolidated formatter and type-aware checks.

src/wayfinder/resources/js/wayfinder.ts

app.jsAlign Workbench entry point with shared checks +0/-2

Align Workbench entry point with shared checks

• Removes superseded source lines while retaining the application entry point.

src/workbench/resources/js/app.js

bootstrap.jsAlign Workbench bootstrap source +0/-1

Align Workbench bootstrap source

• Removes a superseded bootstrap declaration for the shared frontend setup.

src/workbench/resources/js/bootstrap.js

Tests (53) +1024 / -219
submission-cleanup.test.cjsFormat submission cleanup tests +110/-42

Format submission cleanup tests

• Applies shared formatting to the cleanup automation's existing tests.

.github/scripts/submission-cleanup.test.cjs

Alert.test.jsTest Horizon modal cleanup +105/-0

Test Horizon modal cleanup

• Covers alert behavior and disposal of modal listeners, instances, and timers.

src/horizon/resources/js/components/Alert.test.js

Poll.test.jsTest asynchronous Horizon polling +35/-0

Test asynchronous Horizon polling

• Covers waiting for callbacks and preventing overlapping polls.

src/horizon/resources/js/components/Poll.test.js

Lists.test.jsTest Horizon list-request lifecycles +140/-0

Test Horizon list-request lifecycles

• Exercises superseded reads, refresh suppression, and cleanup of pending list requests.

src/horizon/resources/js/screens/Lists.test.js

Retry.test.jsTest failed-job retry feedback +50/-0

Test failed-job retry feedback

• Checks that failed retries clear pending state and report an unconfirmed result.

src/horizon/resources/js/screens/Retry.test.js

dashboard.test.jsTest settled Horizon dashboard refreshes +34/-0

Test settled Horizon dashboard refreshes

• Verifies the dashboard waits for its stats requests, including failure cases.

src/horizon/resources/js/screens/dashboard.test.js

index.test.jsTest Horizon monitoring mutations +108/-0

Test Horizon monitoring mutations

• Covers successful tag updates, failed requests, and preserving a newer input draft.

src/horizon/resources/js/screens/monitoring/index.test.js

job-row.test.jsTest monitored-job row behavior +36/-0

Test monitored-job row behavior

• Adds coverage for job-row behavior under the updated dashboard checks.

src/horizon/resources/js/screens/monitoring/job-row.test.js

app.test.jsTest Telescope recording and clearing failures +87/-0

Test Telescope recording and clearing failures

• Covers pending-toggle protection, successful state changes, and failure feedback.

src/telescope/resources/js/app.test.js

Alert.test.jsAlign Telescope alert tests +9/-3

Align Telescope alert tests

• Adjusts alert assertions for the shared test setup and formatting.

src/telescope/resources/js/components/Alert.test.js

CopyClipboard.test.jsFormat clipboard tests +1/-1

Format clipboard tests

• Applies the shared test-formatting convention.

src/telescope/resources/js/components/CopyClipboard.test.js

ExceptionCodePreview.test.jsFormat exception-preview tests +2/-2

Format exception-preview tests

• Applies shared test formatting.

src/telescope/resources/js/components/ExceptionCodePreview.test.js

IndexScreen.test.jsAdjust Telescope index-screen tests +19/-15

Adjust Telescope index-screen tests

• Updates tests for the shared tooling while retaining index request coverage.

src/telescope/resources/js/components/IndexScreen.test.js

PreviewScreen.test.jsExtend Telescope preview lifecycle tests +44/-21

Extend Telescope preview lifecycle tests

• Exercises preview loading, route changes, and request cleanup under the shared test setup.

src/telescope/resources/js/components/PreviewScreen.test.js

RelatedEntries.test.jsAdjust related-entry tests +12/-4

Adjust related-entry tests

• Aligns related-entry assertions with the shared test setup.

src/telescope/resources/js/components/RelatedEntries.test.js

routes.test.jsAdjust Telescope route tests +21/-8

Adjust Telescope route tests

• Updates route assertions and formatting for workspace test execution.

src/telescope/resources/js/routes.test.js

preview.test.jsFormat cache-preview tests +3/-3

Format cache-preview tests

• Applies shared test formatting.

src/telescope/resources/js/screens/cache/preview.test.js

index.test.jsFormat dumps-screen tests +7/-4

Format dumps-screen tests

• Aligns existing dump-screen tests with shared formatting.

src/telescope/resources/js/screens/dumps/index.test.js

preview.test.jsFormat mail-preview tests +4/-4

Format mail-preview tests

• Applies shared test formatting to mail-preview assertions.

src/telescope/resources/js/screens/mail/preview.test.js

index.test.jsTest Telescope monitoring confirmation +54/-6

Test Telescope monitoring confirmation

• Covers successful and failed tag mutations and preservation of newer input drafts.

src/telescope/resources/js/screens/monitoring/index.test.js

preview.test.jsFormat query-preview tests +3/-3

Format query-preview tests

• Applies shared test formatting to query-preview assertions.

src/telescope/resources/js/screens/queries/preview.test.js

AnonymousMiddleware.test.tsFormat anonymous-middleware test +1/-1

Format anonymous-middleware test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/AnonymousMiddleware.test.ts

AppUrlRootResolution.test.tsAlign application-root URL tests +17/-11

Align application-root URL tests

• Formats and adjusts root-resolution assertions for the shared checks.

src/wayfinder/tests/AppUrlRootResolution.test.ts

CamelCaseRouteParameter.test.tsFormat camel-case parameter test +1/-1

Format camel-case parameter test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/CamelCaseRouteParameter.test.ts

DefaultParameters.test.tsAlign default-parameter tests +2/-5

Align default-parameter tests

• Adjusts test source for the shared formatter and type-aware checks.

src/wayfinder/tests/DefaultParameters.test.ts

DisallowedMethodNames.test.tsFormat disallowed-method test +1/-1

Format disallowed-method test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/DisallowedMethodNames.test.ts

DomainController.test.tsFormat domain-controller test +1/-1

Format domain-controller test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/DomainController.test.ts

EmptyRoute.test.tsFormat empty-route test +1/-1

Format empty-route test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/EmptyRoute.test.ts

Export.test.tsFormat export test +1/-1

Format export test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/Export.test.ts

GeneratedOutput.test.tsFormat generated-output test +1/-1

Format generated-output test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/GeneratedOutput.test.ts

IdentifierCollisions.test.tsAlign identifier-collision tests +2/-4

Align identifier-collision tests

• Adjusts assertions and formatting for shared type-aware checks.

src/wayfinder/tests/IdentifierCollisions.test.ts

IndexNamedRoute.test.tsFormat index-named-route test +1/-1

Format index-named-route test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/IndexNamedRoute.test.ts

InvokableController.test.tsFormat invokable-controller test +1/-1

Format invokable-controller test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/InvokableController.test.ts

InvokablePlusController.test.tsFormat additional invokable-controller test +1/-1

Format additional invokable-controller test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/InvokablePlusController.test.ts

KeyController.test.tsAlign key-controller tests +2/-4

Align key-controller tests

• Adjusts assertions and formatting for shared checks.

src/wayfinder/tests/KeyController.test.ts

MethodNameCollision.test.tsFormat method-name collision test +1/-1

Format method-name collision test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/MethodNameCollision.test.ts

ModelBindingController.test.tsAlign model-binding tests +7/-11

Align model-binding tests

• Adjusts test source and formatting for the shared checks.

src/wayfinder/tests/ModelBindingController.test.ts

NamedRoutes.test.tsAlign named-route tests +11/-3

Align named-route tests

• Updates assertions and formatting for generated route behavior.

src/wayfinder/tests/NamedRoutes.test.ts

NamedspacedRoute.test.tsFormat namespaced-route test +1/-1

Format namespaced-route test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/NamedspacedRoute.test.ts

NestedController.test.tsFormat nested-controller test +1/-1

Format nested-controller test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/NestedController.test.ts

OptionalController.test.tsFormat optional-controller test +1/-1

Format optional-controller test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/OptionalController.test.ts

ParamaterName.test.tsFormat parameter-name test +1/-1

Format parameter-name test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/ParamaterName.test.ts

PathNameNormalization.test.tsFormat path-name normalization test +1/-1

Format path-name normalization test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/PathNameNormalization.test.ts

PostController.test.tsFormat POST-controller test +1/-1

Format POST-controller test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/PostController.test.ts

QueryMethod.test.tsAlign query-method tests +5/-2

Align query-method tests

• Adjusts test source and formatting for shared checks.

src/wayfinder/tests/QueryMethod.test.ts

QueryParams.test.tsFormat query-parameter test +1/-1

Format query-parameter test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/QueryParams.test.ts

RepeatedNamespaceController.test.tsFormat repeated-namespace test +1/-1

Format repeated-namespace test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/RepeatedNamespaceController.test.ts

SharedUriController.test.tsAlign shared-URI controller tests +9/-7

Align shared-URI controller tests

• Adjusts assertions and formatting for shared checks.

src/wayfinder/tests/SharedUriController.test.ts

StorageRoute.test.tsFormat storage-route test +1/-1

Format storage-route test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/StorageRoute.test.ts

TwoRoutesSameAction.test.tsFormat same-action routes test +1/-1

Format same-action routes test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/TwoRoutesSameAction.test.ts

UrlDefaultsController.test.tsFormat URL-defaults test +1/-1

Format URL-defaults test

• Applies shared Wayfinder test formatting.

src/wayfinder/tests/UrlDefaultsController.test.ts

FailedJobsControllerTest.phpTest tagged failed-job pagination +20/-0

Test tagged failed-job pagination

• Adds regression coverage for matching tag selection and returned job offsets.

tests/Horizon/Unit/FailedJobsControllerTest.php

BrowserSdk.test.jsAlign MCP browser SDK tests +43/-34

Align MCP browser SDK tests

• Formats and adjusts SDK tests for the shared JavaScript checks.

tests/Mcp/BrowserSdk.test.js

Documentation (4) +71 / -144
AGENTS.mdAdd frontend workspace guidance +1/-0

Add frontend workspace guidance

• Adds a contributor-facing instruction for the consolidated frontend workflow.

AGENTS.md

2026-10-27-telescope-vue3-and-vite-plus.mdRevise the frontend migration plan +31/-133

Revise the frontend migration plan

• Updates the plan to reflect the implemented Vite+ workspace and dashboard work.

docs/plans/2026-10-27-telescope-vue3-and-vite-plus.md

README.mdDocument AI workbench workspace commands +6/-5

Document AI workbench workspace commands

• Replaces standalone frontend instructions with the shared installation and build workflow.

dogfood/ai/README.md

contributions.mdDocument frontend development and asset regeneration +33/-6

Document frontend development and asset regeneration

• Explains workspace installation, checks, dependency updates, independent skeletons, and the maintainer process for committing rebuilt assets.

src/docs/contributions.md

Other (35) +6383 / -1045
.git-blame-ignore-revsExclude the mechanical formatting commit from blame +2/-0

Exclude the mechanical formatting commit from blame

• Records the formatter-only commit so future blame views can skip its mechanical changes.

.git-blame-ignore-revs

dependabot.ymlConfigure workspace and skeleton dependency updates +21/-0

Configure workspace and skeleton dependency updates

• Adds separate update scopes and groups coupled frontend toolchain dependencies.

.github/dependabot.yml

tests.ymlConsolidate frontend validation into one CI job +31/-33

Consolidate frontend validation into one CI job

• Uses a frozen Vite+ workspace install to check source, build assets, detect changed or untracked outputs, and run JavaScr...

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can turn on the rule miner and Qodo learns your standards from review history

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Symfony HTTP Foundation now accepts the cookie name zero. Keep the enum regression test focused on its actual contract: direct strings and enum-backed names must follow native Cookie validation across the supported Symfony versions.

Use only native construction inside the exception probe, then exercise CookieJar outside that catch so assertions cannot be swallowed. Verify the test with HTTP Foundation 8.1.9 and the Cookie suite with 8.1.10 without changing runtime behavior or raising the dependency minimum.
Symfony Console 8.1.10 recognizes built-in named styles regardless of case. Match that behavior when measuring visible text and preserving trailing style tags during grapheme replacement, so uppercase tags do not affect layout or get partially overwritten.

Require Console 8.1.10 in Prompts and the development root, and change only the named-style regex groups. Preserve escape handling, unknown tags and terminal control parsing without adding formatter allocations or runtime version checks.

Extend the existing formatter-parity and trailing-tag tests with mixed-case and uppercase inputs. Both cases fail before their fixes and pass afterward; targeted formatting, Prompts static analysis and the affected suites pass.
Describe the required case-insensitive Prompts handling and native cookie-validation parity exposed by fresh dependency resolution. Keep the active plan aligned with the final design and the remaining PR, CI and post-merge work.
Raise every existing split-package Console requirement to ^8.1.10, matching the development root and Prompts. The repository checks external dependency constraints for exact consistency, so the earlier root and Prompts update also needs to be reflected in the other declarations.

Preserve the shared manifest invariant and all package-specific metadata assertions. No runtime code or new test machinery is needed. The Composer consistency suite, complete package metadata selection and validation of every changed manifest pass. Update the active plan to describe the shared requirement.
@binaryfire
binaryfire merged commit 87e9a4a into 0.4 Oct 28, 2026
46 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant