Repository navigation
Conversation
- A Timeline tab lists each user action, such as a click or a key press, with the writes it made, the memos and effects that re-ran, and how long the update took. Updates from timers or promises are rows of their own. - A re-run shows the changes that caused it, down to the write that started them. A re-run that produced the same value is marked as no change. - The detail shows the input delay, handler time and settle time from the interaction record, and links each re-run to the reactivity graph. - The copy button puts a report of the action on the clipboard for an agent. - The toolbar turns on the attribution engine of solid-js when it mounts, with its console log off. - Clicks in the toolbar change nothing in the app, so they are left out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lxsmnsyc
force-pushed
the
feat/timeline-panel
branch
from
October 24, 2026 13:45
e70000d to
22a3705
Compare
- The timeline reads the `call` record, whose origin is the interaction's own object, or a frame that names it. A call joins the action it ran for. - A click that only calls the server writes nothing, so its interaction record looks idle. Idle interactions are kept aside, and a later call attaches to its own. - The detail lists the calls with method, status and time, and the report has a Server calls section. - A call opens in the server-function panel. The timeline keeps that panel's key for the call, since the runtime's live object for it is not held by anything once it settled. - The test fixture has a "call server" button that sends a call record from its handler. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Updates no action caused, whose writes all went to unnamed signals or that wrote nothing, come mostly from Solid's own state, such as a Show condition or a Loading boundary settling. They pushed real actions down the list. - They are hidden by default. A button above the list shows how many there are and brings them back, since an app's own unnamed signal looks the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a Timeline tab that lists what each user action made the app do: the signals it wrote, every memo and effect that re-ran, why each one ran, and how long the update took. This PR is based on #28.
Changes
solid-js/attributionwhen it mounts, withlog: falseandvalues: 'full', so the first action is recorded even while the dock is closed.rerun,effect,flush,interaction,holdandnavigationrecords fromOBSERVE.records. Records of one interaction share its origin object, which is the key they are grouped by.report-doubled ← doubled changed ← write count 1 → 2. A run that produced the same value is marked as no change.Showcondition or aLoadingboundary settling. A button above the list shows how many there are and brings them back, since an app's own unnamed signal looks the same.<0.1ms, since browsers round the clock.callrecord. A call joins the action whose origin it carries, and lists with its method, status and time. Clicking it opens the call in the server-function panel.Example report
Testing
src/dev-toolbar/timeline/tracker.test.tsfeed records by hand and cover grouping, outside updates, idle interactions, the entry limit, the snapshot copies and the report.pnpm test,pnpm typecheck,pnpm format:check,pnpm build,pnpm checkand the full e2e suite pass locally.🤖 Generated with Claude Code