About dialog in the ☰ menu; an X closes dialogs that only show something #21

Merged
claude-bot merged 5 commits from about-dialog into main 2026-10-13 21:45:19 +00:00
Collaborator

What

  • About is the last item in the entry list's ☰ menu. It shows the logo, "Version 0.1.0 ()", the author with email, the GPL v3 line, and a "Source code" button that opens the repo.
  • The commit comes from git at build time (src/build.rs). cargo make click reads it on the host, because clickable's container can't see a worktree's git dir. A build that finds no commit says "unknown" and prints a cargo warning.
  • The X: the entry dialog's X is now qml/DialogHeader.qml. The About and Sync dialogs use it and close with the X or a press outside, instead of a Close button. Dialogs that ask a question (Delete, Start over, Trust host key, generator Use) keep Cancel.
  • Version check: the build fails if manifest.json's version differs from Cargo.toml's, since the dialog shows the latter.

Blast radius

Tier: trunk
Trunk paths touched: src/main.rs (passes the build info to QML), src/build.rs (commit, manifest version check), qml/Main.qml (one property passed to the entry list)
Gate / rollback: no flag; the change is display-only, with no store, sync or crypto paths. To undo it, revert this merge or reinstall the previous .click built from 54a7de0. The version stays 0.1.0 (the user confirmed it).

Proof

  • Rust CI: QMAKE=qmake-qt5 cargo make exit 0 (fmt, clippy -D warnings, 75 tests, coverage, release check, audit), after the last commit.
  • QML: cargo make qml-test gives Totals: 108 passed, 0 failed. New tests:
    • tst_AboutDialog: version and commit, "unknown" without git, every author with the email kept as plain text, Source code only with a repository, the X closes it.
    • tst_SyncDetailsDialog: titled "Sync", the X closes it, a press outside closes it.
  • Mutations caught:
    • Forcing Source code visible fails the Source code test.
    • Turning off the Sync dialog's press-outside close fails its test.
    • Earlier: a wrong commit fallback and a wrong author join each failed a test.
    • manifest.json set to 0.1.1 fails the build, with both versions shown. "version":"0.1.0" with no space still builds.
  • Where the commit comes from (target/debug/build/touchpass-*/output):
    • git: 04f06c5a7b, fresh after a new commit.
    • TOUCHPASS_COMMIT=abc123: abc123.
    • empty TOUCHPASS_COMMIT: falls back to git.
    • GIT_DIR=/nonexistent: unknown, plus the cargo warning.
  • On the phone (build de98e1e, installed with cargo make click-install):
    • The About screenshot shows "Version 0.1.0 (de98e1e428)", "© 2026 Austin Schaefer austin.schaefer@mailo.eu", the GPL line, Source code and the X.
    • The user checked that the X closes the dialog and Source code opens the browser on this repo.
    • The screenshot isn't attached (no upload from here). It's at build/pr-about-dialog.png in the about-dialog worktree, cropped to the dialog.

Review

Reviewer: fresh-context Sonnet reviews: code-review at high, at medium after the fixes, and again at medium after the last build.rs change.

  • Fixed:
    • "Name " could be taken for HTML and the email dropped; both labels are now plain text.
    • The dialog showed the Cargo version and could drift from manifest.json; the build now checks they match.
    • That check depended on exact spacing; it now reads the value.
    • The "unknown" fallback was silent; it now prints a cargo warning.
    • An empty authors line left a lone "©"; it's now hidden.
    • The About info is passed in as a property (testable) instead of read from a global in Settings.
    • Added the missing tests (Source code hidden, the X, the Sync dialog).
  • Refuted:
    • That the link is blocked by AppArmor: it opens on the phone.
    • That the commit goes stale: the build script reruns every build, shown above.
    • That CLICKABLE_ENV_ isn't passed through: the phone build shows the real commit.
  • Declined:
    • A -dirty marker: the build rewrites po/touchpass.aps.pot on every run, so most dev builds would be marked.
    • Changing the hard-coded "© 2026": it's the year of first publication.
    • Changing the ":" author split: it's Cargo's own separator.

Review-Confidence: 75/100. The review was deep and covered every trunk file, with device evidence. Points were taken off for early findings without file:line, and for not demonstrating the reason for declining -dirty.

Confidence by part

  • src/build.rs commit and version check: high (each path run, mutations caught).
  • AboutDialog.qml, DialogHeader.qml, SyncDetailsDialog.qml: high (tests, device check).
  • The ☰ About action in EntryListPage.qml: medium. It has no automated test and rests on the device check.

🤖 Generated with Claude Code

## What - **About** is the last item in the entry list's ☰ menu. It shows the logo, "Version 0.1.0 (<commit>)", the author with email, the GPL v3 line, and a "Source code" button that opens the repo. - **The commit** comes from git at build time (`src/build.rs`). `cargo make click` reads it on the host, because clickable's container can't see a worktree's git dir. A build that finds no commit says "unknown" and prints a cargo warning. - **The X:** the entry dialog's X is now `qml/DialogHeader.qml`. The About and Sync dialogs use it and close with the X or a press outside, instead of a Close button. Dialogs that ask a question (Delete, Start over, Trust host key, generator Use) keep Cancel. - **Version check:** the build fails if `manifest.json`'s version differs from `Cargo.toml`'s, since the dialog shows the latter. ## Blast radius **Tier:** trunk **Trunk paths touched:** `src/main.rs` (passes the build info to QML), `src/build.rs` (commit, manifest version check), `qml/Main.qml` (one property passed to the entry list) **Gate / rollback:** no flag; the change is display-only, with no store, sync or crypto paths. To undo it, revert this merge or reinstall the previous `.click` built from 54a7de0. The version stays 0.1.0 (the user confirmed it). ## Proof - **Rust CI:** `QMAKE=qmake-qt5 cargo make` exit 0 (fmt, clippy `-D warnings`, 75 tests, coverage, release check, audit), after the last commit. - **QML:** `cargo make qml-test` gives `Totals: 108 passed, 0 failed`. New tests: - `tst_AboutDialog`: version and commit, "unknown" without git, every author with the email kept as plain text, Source code only with a repository, the X closes it. - `tst_SyncDetailsDialog`: titled "Sync", the X closes it, a press outside closes it. - **Mutations caught:** - Forcing Source code visible fails the Source code test. - Turning off the Sync dialog's press-outside close fails its test. - Earlier: a wrong commit fallback and a wrong author join each failed a test. - `manifest.json` set to 0.1.1 fails the build, with both versions shown. `"version":"0.1.0"` with no space still builds. - **Where the commit comes from** (`target/debug/build/touchpass-*/output`): - git: `04f06c5a7b`, fresh after a new commit. - `TOUCHPASS_COMMIT=abc123`: `abc123`. - empty `TOUCHPASS_COMMIT`: falls back to git. - `GIT_DIR=/nonexistent`: `unknown`, plus the cargo warning. - **On the phone** (build de98e1e, installed with `cargo make click-install`): - The About screenshot shows "Version 0.1.0 (de98e1e428)", "© 2026 Austin Schaefer <austin.schaefer@mailo.eu>", the GPL line, Source code and the X. - The user checked that the X closes the dialog and Source code opens the browser on this repo. - The screenshot isn't attached (no upload from here). It's at `build/pr-about-dialog.png` in the `about-dialog` worktree, cropped to the dialog. ## Review **Reviewer:** fresh-context Sonnet reviews: `code-review` at high, at medium after the fixes, and again at medium after the last `build.rs` change. - **Fixed:** - "Name <email>" could be taken for HTML and the email dropped; both labels are now plain text. - The dialog showed the Cargo version and could drift from `manifest.json`; the build now checks they match. - That check depended on exact spacing; it now reads the value. - The "unknown" fallback was silent; it now prints a cargo warning. - An empty authors line left a lone "©"; it's now hidden. - The About info is passed in as a property (testable) instead of read from a global in Settings. - Added the missing tests (Source code hidden, the X, the Sync dialog). - **Refuted:** - That the link is blocked by AppArmor: it opens on the phone. - That the commit goes stale: the build script reruns every build, shown above. - That `CLICKABLE_ENV_` isn't passed through: the phone build shows the real commit. - **Declined:** - A `-dirty` marker: the build rewrites `po/touchpass.aps.pot` on every run, so most dev builds would be marked. - Changing the hard-coded "© 2026": it's the year of first publication. - Changing the ":" author split: it's Cargo's own separator. **Review-Confidence:** 75/100. The review was deep and covered every trunk file, with device evidence. Points were taken off for early findings without file:line, and for not demonstrating the reason for declining `-dirty`. ## Confidence by part - `src/build.rs` commit and version check: high (each path run, mutations caught). - `AboutDialog.qml`, `DialogHeader.qml`, `SyncDetailsDialog.qml`: high (tests, device check). - The ☰ About action in `EntryListPage.qml`: medium. It has no automated test and rests on the device check. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Settings gets an ⓘ action that opens it. The commit comes from git at
build time (build.rs); `cargo make click` passes it in from the host,
since a worktree's git directory isn't mounted in clickable's container.
Version, authors and repository come from Cargo.toml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dialog is never shown in the test, so its buttons are never visible.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The About and Sync dialogs close with the entry dialog's X (now
DialogHeader.qml) or a press outside, instead of a Close button. Dialogs
that ask a question keep Cancel.

Review fixes: author and version labels are plain text, so
"Name <email>" isn't taken for an HTML tag; the build fails if
manifest.json's version differs from Cargo.toml's, since the dialog shows
the latter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A reformatted manifest ("version":"0.1.0") no longer fails the build;
a different version still does, now showing both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Warn when a build has no commit; test the Sync dialog's X
All checks were successful
CI / ci (pull_request) Successful in 6m34s
CI / audit (pull_request) Successful in 21s
CI / qml (pull_request) Successful in 1m5s
c4e6aca433
A build that finds no git commit now says so (cargo:warning) instead of
quietly shipping "unknown". The Sync dialog's title, X and press-outside
close get tests like the About dialog's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review-Confidence: 75
Review-Tier: trunk
schaefera approved these changes 2026-10-13 21:41:20 +00:00
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-10-13 21:41:28 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
schaefera/TouchPass!21
No description provided.