Skip to content

feat(about): portal links + copy-diagnostics on every host (#58 slice: Raycast learnings) - #63

Merged
turinglambdaai merged 4 commits into
mainfrom
feat/about-portal-diagnostics
Oct 23, 2026
Merged

turinglambdaai merged 4 commits into
mainfrom
feat/about-portal-diagnostics

Conversation

@turinglambdaai

Copy link
Copy Markdown
Owner

Refs #58. Implements the confirmed Raycast-study slice (About 门户 + 诊断复制), absorbing the original slice 3 (诊断可预览).

What

About becomes the update/link/feedback hub Raycast's teardown showed (docs/UX-BENCHMARKS.md has the full record):

  • User Manual (taskly.jrtx.site/manual.html) and Changelog (GitHub CHANGELOG) links join Website and Report an Issue — four links, two per row, all three hosts.
  • Diagnostics block + Copy Diagnostics: release identity, platform/arch, OS version, DB + config paths (the ~/.taskly contract), selectable text plus a copy button for verbatim bug-report context. English fixed labels by contract (machine-oriented, like CLI --json). Copy confirmation: transient status (macOS/Linux) / temporary button-label swap (Windows).

Contract

  • PRODUCT-SPEC §8 About clause updated first (links + diagnostics + copy semantics).
  • i18n single source: aboutManual, aboutChangelog, aboutCopyDiagnostics, statusDiagnosticsCopied (137 keys, zh/en parity green via sync-i18n --check).

Verification

  • macOS leg: raco rivet build clean; AX-driven check — About renders 4 links + diagnostics block; Copy Diagnostics puts the exact block on the clipboard; raco rivet acceptance 6/6 suites pass (includes release-update from feat(release): release-kind acceptance bound to the publish gate (#58 slice 1) #61).
  • Windows/Linux host compile + packaged acceptance: CI (macOS-leg machine; the GTK dialog uses uname + GdkClipboard, the WinUI dialog uses DataPackage/Clipboard + DispatcherTimer label swap).

The Raycast teardown (2.9.0.0, docs/UX-BENCHMARKS.md) showed a pattern
worth adopting: the About surface as a one-stop hub for updates, links,
feedback, and diagnostics. PRODUCT-SPEC §8 now specifies it; this lands
it on all three hosts.

- About gains User Manual and Changelog links beside Website and
  Report an Issue (i18n: aboutManual, aboutChangelog).
- A diagnostics block — release identity, platform + arch, OS version,
  and the ~/.taskly contract paths — rendered selectable, with a Copy
  Diagnostics button that puts the block on the clipboard for pasting
  into an issue (aboutCopyDiagnostics). Confirmation is a transient
  status message on macOS/Linux and a temporary button-label swap on
  Windows. Labels are English fixed strings, machine-oriented like the
  CLI's --json output.
- GTK notes: the diagnostics string is a function-local static so the
  clicked-callback's user_data outlives the dialog; the loopback HTTP
  server lesson from the release suite does not apply here.
- docs/UX-BENCHMARKS.md records the full Raycast teardown: adopted,
  adapted (silent auto-install declined — a data tool keeps the user's
  install confirmation), and rejected (accounts, store, web-shell
  settings, English-only, macOS 26 floor).

Verified on the macOS leg: raco rivet build clean, About sheet renders
all four links plus the diagnostics block via the AX tree, Copy
Diagnostics puts the exact block on the clipboard, and
raco rivet acceptance passes 6/6 suites including the release-update
suite merged in #61.
MSVC (with the project's warning-as-error settings) rejects getenv as
C4996; the Win32 call is the project-idiomatic replacement.
The lambda rewrite left three stale lines from the non-static version
behind (undeclared names/home, cascade type error), and the clicked
callback still owned a heap-allocated copy — the diagnostics string is
a function-local static now, so &diagnostics is the right pointer.
gtk_label_set_attributes needs the GTK_LABEL cast like every other
label call in this file, and the clicked callback's gpointer user_data
cannot take a pointer-to-const.
@turinglambdaai
turinglambdaai merged commit 1f671ea into main Oct 23, 2026
21 of 22 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