8000 ci(clicks): survey every module, and on a phone with taps and swipes by adeelahmad · Pull Request #325 · adeelahmad/lense · GitHub
[go: up one dir, main page]

Skip to content

ci(clicks): survey every module, and on a phone with taps and swipes - #325

Merged
adeelahmad merged 18 commits into
mainfrom
claude/project-thread-kcokci
Oct 11, 2026
Merged

adeelahmad merged 18 commits into
mainfrom
claude/project-thread-kcokci

Conversation

@adeelahmad
@adeelahmad adeelahmad commented Oct 10, 2026 •
Copy link
Copy Markdown
Owner

Requested by Adeel · project thread

Builds on #298 (the clicks survey, merged).

Description

Before: the clicks survey counted 19 features on a computer only. Twelve modules (agents over MCP, the graph, entities, podcasts, reports, workflows, templates, namespaces, speakers, watched folders, file upload, cloud model setup) had no journey, and nothing measured a phone.

After: make clicks and the Clicks workflow run 31 journeys twice, on a computer (1400x900) and on a phone (Pixel 7, touch). On the phone, clicks are taps, a swipe counts whenever the control is off the screen, and journeys use buttons instead of shortcuts (the menu button for the navigation, Save for Ctrl+S, the Jump to box for Ctrl+K). baseline-phone.json holds the phone run; a journey that can't be done on a phone yet stays in it as failed, so CI stays green until it becomes possible (then it shows as an improvement).

Totals on a fresh install, on main as of #339: computer 90 clicks, 313 keys, 1 passkey; phone 119 taps, 322 keys, 11 swipes, 1 passkey, with 1 journey impossible on a phone (switching namespace: the namespace switcher is hidden below 640px). The first survey, before #315, #331, #336 and #339 landed, was computer 107 clicks and 338 keys, phone 126 taps, 340 keys and 15 swipes with 2 journeys impossible.

Motivation and Context

Adeel asked for a survey of the clicks, keys and touch needed for setup and use, per page and module, repeated every 12 hours, with threads that cut them. This makes the survey cover every module and the phone, so each cut can show before and after.

How

  • meter.mjs: a touch mode (taps, and swipesTo() for controls off the screen, measured where the control settles).
  • survey.mjs: --device desktop|phone, phone page reach adds the menu tap, journeys may start with a namespace picked (ns, not counted), a journey that failed in the baseline too isn't a new failure, and the API's log is saved beside the results (in the CI artifact).
  • journeys.mjs: go(), save(), jumpTo(), openImport(), needs() and madeInBackground() helpers, and 12 journeys appended (existing ids and counts unchanged). On a phone Chat opens on the conversation list, so the Chat journey taps New conversation there.
  • report.mjs: Taps and Swipes columns for the phone; "still can't be done" and "can be done now" in comparisons.
  • clicks.yml: a phone step, and rclone copied from the image Lens ships (rclone/rclone:1.75.1) for the watched-folder journey.
  • Baselines regenerated from runs on main after merging it, never hand-merged.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change; ! in the title)

Checklist:

  • The title is a Conventional Commit.
  • My code follows the code style of this project (make hooks checks it on commit). actionlint passes on clicks.yml.
  • I added or updated tests. The journeys are the tests; both runs pass on a fresh install locally and in CI.
  • My change requires documentation updates, and I have updated docs/ accordingly. n/a: CI tooling only; ci/clicks/README.md is updated.
  • Users need more than the title to understand it, so I wrote it under ## Unreleased in CHANGELOG.md. n/a: CI only.

Done questions (AGENTS.md)

  • Goal: merges on green CI; the 12-hourly survey reads the Clicks workflow from here on.
  • Agents: n/a for the product, but the survey now measures connecting an agent over MCP (28 clicks and keys; the MCP address isn't shown after setup).
  • Zero setup: n/a, CI only (local make clicks needs rclone on the PATH, as the image has).
  • Fewest clicks and keystrokes: this is the measurement that drives it.
  • Configurable: n/a, no settings.
  • Light: n/a, CI only. The survey found a pasted transcript waiting for the speech model to download; fixed in fix(jobs): skip transcribe and diarize for imported transcripts #345.
  • Private and secure: n/a. The cloud-model journey saves a stand-in key against the real OpenAI address, so background jobs after it get a 401; no real key.
  • Cost: n/a, the stand-in model answers.
  • User decides: n/a, no product change.
  • Upgrades: n/a, no stored data.
  • Honest: counts come from the run; the steps list says what was outside the browser (the assistant, the print dialog).
  • Tests, docs and generated files updated.
  • Open standards; dependencies keep Lens MIT (rclone is MIT, CI only).
  • Result reported with evidence. Refine later: chat rooms (Matterbridge, Telegram, Slack), voice, the extensions marketplace and the Costs page aren't journeys yet; the cloud-model journey moves to the new presets (feat(settings): cloud model presets in Settings and the setup wizard #334) in a follow-up.

🤖 Generated with Claude Code

https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r

A Playwright survey (ci/clicks) drives a fresh Lens from the web installer
through setup and 19 features, counting clicks, keys and passkey prompts per
feature, module and page. The Clicks workflow fails when a journey takes more
than baseline.json.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018XZkebEbpvyi9y3qmDVD8V
…vering button

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018XZkebEbpvyi9y3qmDVD8V
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018XZkebEbpvyi9y3qmDVD8V
The survey now runs twice, on a computer and on a phone (Pixel 7, touch),
where clicks are taps, swipes to reach an off-screen control count, and
journeys use buttons instead of keyboard shortcuts. Twelve journeys cover
the modules the first survey left out: connecting an AI assistant over
MCP, uploading a file, watching a folder, entities, the graph, podcasts,
reports, workflows, templates, namespaces, speakers and switching to a
cloud model. baseline-phone.json records the phone run; journeys that
can't be done on a phone yet are kept as failed and don't turn CI red.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
@adeelahmad adeelahmad self-assigned this Oct 10, 2026
…-kcokci

# Conflicts:
#	.github/workflows/clicks.yml
#	Makefile
#	ci/clicks/README.md
#	ci/clicks/baseline.json
#	ci/clicks/journeys.mjs
#	ci/clicks/meter.mjs
#	ci/clicks/report.mjs
#	ci/clicks/survey.mjs
Measure where a control settles before counting a swipe, scope the webhook
token check to its dialog, and wait for the entity list to filter. The phone
baseline is the run with these fixes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
…-kcokci

# Conflicts:
#	ci/clicks/baseline.json
#	ci/clicks/journeys.mjs
On a phone Chat opens on the conversation list, so the journey taps New
conversation when the question box isn't there. The computer baseline is a
run on main with the setup, Chat, Search and Notes cuts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
In CI the entity search opened before the imported transcripts were
analysed, so the entity wasn't there yet. The journey now waits (not
counted) until the API has it. The API's log is saved with the results, so
a failure in CI can be read from the artifact.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
The API wants the session's bearer token, which the browser's requests
don't carry, so the wait reloads the Entities page until the entity shows
(not counted) and then starts the journey from Home.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
…-kcokci

# Conflicts:
#	ci/clicks/baseline.json
#	ci/clicks/meter.mjs
@adeelahmad adeelahmad mentioned this pull request Oct 10, 2026
20 of 22 tasks
Computer 93 clicks, 313 keys; phone 115 taps, 315 keys, 10 swipes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
Both imports match "Welcome back", and the Library's order between them
varies. The dialog shows the recording's title, so on a phone the Create
button was below the screen for one and not the other (a swipe counted in
some runs only).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
Computer 90 clicks, 313 keys; phone 119 taps, 322 keys, 11 swipes, and
the graph can be found on a phone now.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145yfQfD4eNkWHgPkk3Q82r
@adeelahmad
adeelahmad merged commit b77d4a3 into main Oct 11, 2026
11 checks passed
@adeelahmad
adeelahmad deleted the claude/project-thread-kcokci branch October 11, 2026 01:44
adeelahmad pushed a commit that referenced this pull request Oct 11, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0173hj1h6qEeBT7zMzCgedwo
adeelahmad pushed a commit that referenced this pull request Oct 14, 2026
Bring in #325's phone survey and drop the name typing from the workflow and
template journeys, now that Lens names them. Both baselines are regenerated
from ci/clicks/run.sh (computer and phone): -29 keys each.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014pKRz6HkdQ7hTqEbpnyhYo
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.

2 participants

0