Skip to content
This repository was archived by the owner on Nov 12, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1174 commits
Select commit Hold shift + click to select a range
5005795
claude-pantheon-rs: diff viewer with side-by-side/inline, file tree, …
techmore Oct 22, 2026
f9e7a2e
Merge pull request #505 from techmore/claude/cpr-474
techmore Oct 22, 2026
1ada8a3
claude-pantheon-rs: vte4 terminal pane fed from the server's terminal…
techmore Oct 22, 2026
77a4b81
WIP settings module
techmore Oct 22, 2026
eac3bcf
Merge branch 'claude/cpr-475' into claude/cpr-476
techmore Oct 22, 2026
5a99d6d
Merge pull request #506 from techmore/claude/cpr-475
techmore Oct 22, 2026
afe9539
claude-pantheon-rs: settings window in Granite style
techmore Oct 22, 2026
92e632e
Merge remote-tracking branch 'origin/dev' into claude/cpr-476
techmore Oct 22, 2026
2c30c3f
WIP snapshot module
techmore Oct 22, 2026
a7da58a
Merge branch 'claude/cpr-476' into claude/cpr-477
techmore Oct 22, 2026
cc399b9
claude-pantheon-rs: SnapShot through the portal with AT-SPI window id…
techmore Oct 22, 2026
eacab71
Merge pull request #508 from techmore/claude/cpr-477
techmore Oct 22, 2026
ecd6198
claude-pantheon-rs: visual replies in WebKitGTK page cards, created o…
techmore Oct 22, 2026
776cf90
Merge remote-tracking branch 'origin/dev' into claude/cpr-478
techmore Oct 22, 2026
86aac50
Merge pull request #509 from techmore/claude/cpr-478
techmore Oct 22, 2026
33610da
claude-pantheon-rs: protocol version guard and contracts drift check
techmore Oct 22, 2026
e6f30a8
Merge remote-tracking branch 'origin/dev' into claude/cpr-484
techmore Oct 22, 2026
374ce61
Merge pull request #510 from techmore/claude/cpr-484
techmore Oct 22, 2026
59e579b
claude-pantheon-rs: environments switcher (direct, Tailscale, SSH, T3…
techmore Oct 22, 2026
df390f4
Merge remote-tracking branch 'origin/dev' into claude/cpr-479
techmore Oct 22, 2026
caa1752
Merge pull request #511 from techmore/claude/cpr-479
techmore Oct 22, 2026
4431fab
claude-pantheon-rs: empty states, skeleton loading rows and retry toasts
techmore Oct 22, 2026
260ff25
Merge remote-tracking branch 'origin/dev' into claude/cpr-480
techmore Oct 22, 2026
742298d
Merge pull request #512 from techmore/claude/cpr-480
techmore Oct 22, 2026
513885d
claude-pantheon-rs: window state, text zoom, HiDPI check and accessib…
techmore Oct 22, 2026
4e768ef
Merge remote-tracking branch 'origin/dev' into claude/cpr-481
techmore Oct 22, 2026
22fc039
Merge pull request #513 from techmore/claude/cpr-481
techmore Oct 22, 2026
34bdc87
claude-pantheon-rs: webhook runner tasks and per-run provider rotation
techmore Oct 22, 2026
ec209d1
Merge remote-tracking branch 'origin/dev' into claude/cpr-482
techmore Oct 22, 2026
67c9a6f
Merge pull request #514 from techmore/claude/cpr-482
techmore Oct 22, 2026
70f1653
Retire the standalone Claude client checkouts; one GTK-on-Asahi perfo…
techmore Oct 22, 2026
3b60d90
Merge remote-tracking branch 'origin/dev' into claude/cpr-485
techmore Oct 22, 2026
428b1e0
Merge pull request #515 from techmore/claude/cpr-485
techmore Oct 22, 2026
df2b6f1
Weekly dev-clean and scratch hygiene in-repo
techmore Oct 22, 2026
8d431fd
Merge remote-tracking branch 'origin/dev' into claude/cpr-486
techmore Oct 22, 2026
4f8451b
Merge pull request #516 from techmore/claude/cpr-486
techmore Oct 22, 2026
658768c
claude-pantheon-rs: voice input into the composer draft
techmore Oct 22, 2026
bfc01db
Merge remote-tracking branch 'origin/dev' into claude/cpr-483
techmore Oct 22, 2026
48690f0
Merge pull request #517 from techmore/claude/cpr-483
techmore Oct 22, 2026
7fb5120
Document optional app discovery and Pika evaluation (#497)
techmore Oct 22, 2026
321aefc
Factory: package safe speaker service in ARM64 images (#496)
techmore Oct 22, 2026
8c7add3
Compositor: lock screen shows typing again; lock on idle
techmore Oct 22, 2026
4501554
Merge remote-tracking branch 'origin/dev' into claude/compositor-lock…
techmore Oct 22, 2026
5de1ac6
RepoBar: review fixes and slightly smaller taskbar text (#440)
techmore Oct 22, 2026
737390a
Merge pull request #520 from techmore/claude/compositor-lock-on-idle
techmore Oct 22, 2026
4983edc
Add Signal accent refresh and Messages favorites
techmore Oct 22, 2026
6e366c1
Document Signal Pantheon integration boundary
techmore Oct 22, 2026
b0feb61
Set Rust Pantheon target for Signal and Messages
techmore Oct 22, 2026
4b68576
Add shared Rust Pantheon SDK and Messages preview
techmore Oct 22, 2026
256d16d
Record Torrential SDK adoption
techmore Oct 22, 2026
fb0d44f
Add polling and system monitor to Pantheon SDK
techmore Oct 22, 2026
48dc79d
Build System Monitor in Pantheon SDK CI
techmore Oct 22, 2026
96ddd67
Add new message flow to Rust Messages
techmore Oct 22, 2026
183ec88
Polish Messages contact picker keyboard flow
techmore Oct 22, 2026
76c4cd0
Add offline drafts and message actions to Messages
techmore Oct 22, 2026
e72f055
Add safe clickable links to Messages
techmore Oct 22, 2026
cdd4437
Add a favorites strip to Rust Messages
techmore Oct 22, 2026
409b8d2
Move BlueFerry Messages client into Rust SDK
techmore Oct 22, 2026
86f650f
Record current Rust Pantheon SDK and Torrential pins
techmore Oct 22, 2026
03345f5
Document the BlueFerry profile contract for pin import
techmore Oct 22, 2026
e955c8f
Add Tapback parity to Rust Messages SDK
techmore Oct 22, 2026
8743b17
Preserve unread Tapbacks in Messages threads
techmore Oct 22, 2026
851d3e9
Preserve uncertain BlueFerry send outcomes
techmore Oct 22, 2026
52a12c9
Start private Secret Service in pin test
techmore Oct 22, 2026
cbc530b
Move Software Updates backend into Pantheon SDK
techmore Oct 22, 2026
d2a66d6
Record SDK, Messages and corner progress
techmore Oct 22, 2026
133bc6d
Use continuous Pantheon window corners
techmore Oct 22, 2026
cb78b03
Create isolated default keyring in pin test
techmore Oct 22, 2026
dbbfe25
Start private Secret Service in pin test
techmore Oct 22, 2026
75af4b2
Create isolated default keyring in pin test
techmore Oct 22, 2026
82d9d7b
Add bounded link previews to Rust Messages
techmore Oct 22, 2026
f71d07f
Initialize keyring fixture through login flow
techmore Oct 22, 2026
12ab21e
Initialize keyring fixture through login flow
techmore Oct 22, 2026
09d3891
Use keyring unlock mode for private fixture
techmore Oct 22, 2026
2e1dcc0
Use keyring unlock mode for private fixture
techmore Oct 22, 2026
c428d26
Reload private keyring after initial creation
techmore Oct 22, 2026
6b31c0a
Reload private keyring after initial creation
techmore Oct 22, 2026
354cc3f
Avoid duplicate keyring provisioning in fixture
techmore Oct 22, 2026
436e65e
Avoid duplicate keyring provisioning in fixture
techmore Oct 22, 2026
e03b7bd
Refresh Messages GUI favorite fixtures
techmore Oct 22, 2026
1c582bc
Refresh Messages GUI favorite fixtures
techmore Oct 22, 2026
7fb853a
Revert "Refresh Messages GUI favorite fixtures"
techmore Oct 22, 2026
73cfb34
Cite platform usability guidance in SDK spec
techmore Oct 22, 2026
f7ab1e8
Inventory window recovery SDK port candidate
techmore Oct 22, 2026
3825ebc
Scale Disk Space layout through Pantheon SDK
techmore Oct 22, 2026
38cae45
Improve Messages keyboard access
techmore Oct 22, 2026
6e6d4ed
Add recipient copy action to Rust Messages
techmore Oct 22, 2026
f14ac80
Add retry state for Messages startup
techmore Oct 22, 2026
fbc4a07
Add Messages conversation quick actions
techmore Oct 22, 2026
c698d0b
Add Messages composer send shortcut
techmore Oct 22, 2026
6833a71
Clarify Signal integration and BlueFerry identity path
techmore Oct 22, 2026
db6901a
Clarify Messages keyboard send action
techmore Oct 22, 2026
6922a1b
Format Messages timestamps in local calendar
techmore Oct 22, 2026
67aba2f
Search loaded Messages history
techmore Oct 22, 2026
85d233a
Use Unicode casefold for Messages search
techmore Oct 22, 2026
c8fe85f
Cache bounded Messages search index
techmore Oct 22, 2026
bc27f73
Group Rust Messages conversation timeline
techmore Oct 22, 2026
ea4d471
Show pending Rust Messages sends
techmore Oct 22, 2026
f3f82a4
Add Rust Messages keyboard shortcuts
techmore Oct 22, 2026
d3d8f80
Keep Rust Messages unselected until chosen
techmore Oct 22, 2026
244e117
Add shared Pantheon dock badges
techmore Oct 22, 2026
f73e6f5
Record dock badge validation
techmore Oct 22, 2026
96f2f8c
Add phone-scoped Messages pin imports
techmore Oct 22, 2026
b9ed0de
Record phone pin integration status
techmore Oct 22, 2026
b3ed900
Fix strict lint in Messages pin review
techmore Oct 22, 2026
8f49d97
Lock screen: gtklock styled like elementary's greeter
techmore Oct 22, 2026
b15d168
Record green Messages integration checks
techmore Oct 22, 2026
f727507
Test Rust Messages recipient and send reconciliation
techmore Oct 22, 2026
2feff40
Add refresh lifecycle to Rust Messages
techmore Oct 22, 2026
5dbf0dd
Merge pull request #532 from techmore/claude/elementary-lock-screen
techmore Oct 22, 2026
c7e2901
Improve Rust Messages status and responsive layout
techmore Oct 22, 2026
48a0d03
Use Pantheon-R colors for Signal accent
techmore Oct 22, 2026
15f982d
Merge remote-tracking branch 'origin/dev' into codex/native-signal-me…
techmore Oct 22, 2026
6b9a2e1
Merge remote-tracking branch 'origin/dev' into codex/rust-pantheon-me…
techmore Oct 22, 2026
21b63c5
Use elementary palette for Signal UI
techmore Oct 22, 2026
f35cf27
Follow Pantheon theme in T3 web replies
techmore Oct 22, 2026
f331280
Sandbox the T3 render test
techmore Oct 22, 2026
629b12c
Clarify Pantheon theme source in SDK handoff
techmore Oct 22, 2026
e2ebafd
Share Enter-to-send preference with Rust Messages
techmore Oct 22, 2026
6f2870c
Support multi-image screenshot shelf drags
techmore Oct 22, 2026
8111132
Add Rust Messages recent inbox parity
techmore Oct 22, 2026
b6ca6d2
Preserve handoff history and clarify Signal palette
techmore Oct 22, 2026
f290b21
Restore handoff history for Pantheon SDK work
techmore Oct 22, 2026
e15f927
Avoid stale GTK font watcher registrations
techmore Oct 22, 2026
5cf7bd2
Record Pantheon text scaling watcher fix
techmore Oct 22, 2026
28dda25
Restore Messages setup actions in Rust client
techmore Oct 22, 2026
5a05025
Record Signal and Messages runtime validation
techmore Oct 22, 2026
668e136
Make Messages offline recovery actionable
techmore Oct 22, 2026
c33ad31
Persist Messages automatic refresh preference
techmore Oct 22, 2026
b8f51fd
Record Messages performance baseline and CI state
techmore Oct 22, 2026
17d27bc
Add native compositor mask for display corners
techmore Oct 22, 2026
68c9aa4
Record Torrential SDK adoption status
techmore Oct 22, 2026
b702a70
Align native app package runtime requirements with SDK
techmore Oct 22, 2026
9753731
Discard stale Messages inbox cache on phone profile changes
techmore Oct 22, 2026
5b0c2e0
Ignore stale Messages send and favorite completions after phone changes
techmore Oct 22, 2026
dc82530
Guard Messages confirmation and read callbacks across phone changes
techmore Oct 22, 2026
da79aff
Keep identified phone draft and outbox sessions separate
techmore Oct 22, 2026
6097f17
Test Messages draft isolation and uncertain sends across phone switches
techmore Oct 22, 2026
bbed90f
Reject Messages refresh results across observed phone changes
techmore Oct 22, 2026
b47ce29
Reject stale Messages contact picker actions across phone switches
techmore Oct 22, 2026
0e362e4
Invalidate Messages avatars when the phone changes
techmore Oct 22, 2026
2d5bd9f
Validate BlueFerry phone identities at the SDK boundary
techmore Oct 22, 2026
c54c457
Exercise offline Messages widget state in an isolated GTK test
techmore Oct 22, 2026
a1dbae1
Run isolated Messages GTK recovery regression in CI
techmore Oct 22, 2026
e670fb9
Exercise actual unavailable-backend refresh and retry in Messages GTK…
techmore Oct 22, 2026
13afc7d
Verify Messages recovery with a private synthetic BlueFerry service
techmore Oct 22, 2026
2c19a8f
Verify per-phone draft isolation through the Messages D-Bus refresh path
techmore Oct 22, 2026
05910b4
Exercise Messages conversation selection and composer draft restoration
techmore Oct 22, 2026
4c89510
Verify Messages rejects a phone switch during inbox refresh
techmore Oct 22, 2026
75a9816
Exercise Messages send outcomes against a private synthetic service
techmore Oct 22, 2026
cba1a37
Verify Messages API mismatch recovery through the actual GTK app
techmore Oct 22, 2026
912ce8a
Exercise delayed Messages send responses after a phone switch
techmore Oct 22, 2026
44fb8fb
Wait for actual Messages send callback completion in isolation regres…
techmore Oct 22, 2026
6b4e4b3
Verify compact and regular Messages navigation visibility
techmore Oct 22, 2026
ae9bb5a
Verify actual Messages window resize breakpoints on private Xvfb
techmore Oct 22, 2026
0cfee74
Preserve usable Messages pane widths during responsive transitions
techmore Oct 22, 2026
f3862d5
Verify Messages layout responds to enlarged GTK text
techmore Oct 22, 2026
1496430
Capture Messages fixture layouts for visual review
techmore Oct 22, 2026
cfc95cf
Record live screenshot shelf safety update and native capture gap
techmore Oct 22, 2026
e54e3c1
Match three-second screenshot shelf and target only its process on in…
techmore Oct 22, 2026
efdf43c
Add tested native screenshot selection core for Pantheon-R
techmore Oct 22, 2026
fc43e2d
Add bounded compositor framebuffer readback and pixel conversion
techmore Oct 22, 2026
9ef11d6
Add offscreen desktop composition for native screenshots
techmore Oct 22, 2026
0787dfc
Publish complete screenshot PNGs with private permissions and no over…
techmore Oct 22, 2026
4252004
Wire full-screen screenshot requests through compositor rendering and…
techmore Oct 22, 2026
252965d
Verify full-screen screenshot shortcut in an isolated nested compositor
techmore Oct 22, 2026
ed8e8c6
Correct screenshot orientation and assert asymmetric rendered fixture…
techmore Oct 22, 2026
a5ca186
Map logical screenshot selections to bounded output pixel crops
techmore Oct 22, 2026
b1696b9
Wire screenshot region selection input and pixel cropping
techmore Oct 22, 2026
52fe1c3
Complete and verify nested screenshot selection, window capture and s…
techmore Oct 22, 2026
0de7b82
Qualify native screenshot release and fix playback, lock cancellation…
techmore Oct 22, 2026
698b7e8
Record verified screenshot release artifact and privileged install bo…
techmore Oct 22, 2026
7db1222
Fix long-message compact layout and record native client acceptance g…
techmore Oct 22, 2026
b288748
Fix Messages keyboard search focus and qualify release package
techmore Oct 22, 2026
427aeba
Advertise native screenshot shelf placement and select Wayland by cap…
techmore Oct 22, 2026
b880ccb
Select native shelf backend through running compositor capability
techmore Oct 22, 2026
53e3669
Verify automatic native shelf selection in release screenshot workflow
techmore Oct 23, 2026
674798e
Clarify compositor shelf capability detection
techmore Oct 23, 2026
8415da0
Install verified Messages preview with reliable user launcher
techmore Oct 23, 2026
7471f96
Open Messages at latest history and restore Back focus; audit parity
techmore Oct 23, 2026
565cc84
Preserve Messages reading position and add latest-history navigation
techmore Oct 23, 2026
74c5775
Record verified deployment of reviewed Signal elementary palette
techmore Oct 23, 2026
267c161
Record installed Signal palette archive verification
techmore Oct 23, 2026
cadbbe0
Invalidate Signal theme cache on helper and archive updates; qualify …
techmore Oct 23, 2026
302ed1d
Exercise Messages accessibility metadata with GTK test backend
techmore Oct 23, 2026
c98c4b9
Enlarge messaging text and add distinct-background client tab switcher
techmore Oct 23, 2026
59cacc6
Enlarge Signal reading text and distinguish its cool workspace
techmore Oct 23, 2026
1d2b91a
Fix contact-picker keyboard focus with shared SDK helper
techmore Oct 23, 2026
49b99b6
Prepare reviewed upstream phone-ID development build and provenance
techmore Oct 23, 2026
0966b03
Use desktop activation context and simplify verified screenshot staging
techmore Oct 23, 2026
f17006e
Cancel superseded MSeries PR workflows and enforce cancellation policy
techmore Oct 23, 2026
195d8a2
Verify cancellation guard execution and PR publishing exclusion
techmore Oct 23, 2026
0d06216
Fix owner session reload and add keyboard accessible message menus
techmore Oct 23, 2026
b4d33af
Cover shared SDK and messaging switcher in Messages release checks
techmore Oct 23, 2026
70444a6
Preserve conversation row keyboard focus across inbox refresh
techmore Oct 23, 2026
f7019eb
Document safe live PR cancellation and non-publishing control checks
techmore Oct 23, 2026
a9848cb
Introduce Messages gettext domain and static string catalog
techmore Oct 23, 2026
6d6244d
Localize static Messages accessibility names and validate catalog in CI
techmore Oct 23, 2026
a934f1b
Coalesce automatic read requests with phone scoped retry markers
techmore Oct 23, 2026
b729573
Verify SDK dock badge wire contract on isolated session bus
techmore Oct 23, 2026
d0dc1f8
Localize messaging switcher and keyboard help text
techmore Oct 23, 2026
34f0ef1
Mark selected unread conversation on Messages window activation
techmore Oct 23, 2026
813c038
Merge Signal integration with Rust Messages and preserve shared v2 pi…
techmore Oct 23, 2026
e4f2c08
Use shared local favorites for Rust Messages star, menu and strip
techmore Oct 23, 2026
a66d4d2
Qualify encrypted favorites persistence across Python and Rust
techmore Oct 23, 2026
8e98a8c
Verify Messages favorite UI save and restoration with private keyring
techmore Oct 23, 2026
11b3d5d
Record incomplete messaging apps and require faster product-first SDK…
techmore Oct 23, 2026
05cadd6
Require product-first SDK app-building workflow on dev
techmore Oct 23, 2026
c9635b2
Add shared local AI reply drafts to Messages
techmore Oct 23, 2026
1c98cca
Fix and test shared AI draft storage
techmore Oct 23, 2026
4d08415
Mark Signal and Messages incomplete and deferred on dev
techmore Oct 23, 2026
ece8a6e
Bound Aurora CI downloads and fall back between signed Ubuntu mirrors
techmore Oct 23, 2026
0defd35
Merge current dev documentation while preserving CI fixes
techmore Oct 23, 2026
45dd13d
Merge pull request #536 from techmore/codex/mseries-ci-cancellation
techmore Oct 23, 2026
c299d9c
docs: platform plan for repo split, small-model SDK and pipeline (#539)
techmore Oct 23, 2026
ba1dbc9
docs: SDK benchmark specs, rubric and honest baseline; fix timing cla…
techmore Oct 23, 2026
f7b9a24
docs: Arch rebase decision and phased plan (#543)
techmore Oct 23, 2026
ddb3cfb
docs: Asahi Alarm audit; correct the Arch rebase plan (#544)
techmore Oct 23, 2026
80e46f2
docs: minimal system inventory and layers (Arch rebase Phase B) (#545)
techmore Oct 23, 2026
0660590
mseries-greeter: Rust greetd login screen (first SDK shell surface) (…
techmore Oct 23, 2026
11fffac
msdk: typed core, live renderer (msdk-gtk), agent loop tools, HIG lin…
techmore Oct 23, 2026
7098dfe
Greeter and dock on the SDK renderer; templates (msdk new); app audit…
techmore Oct 23, 2026
34e3b4a
msdk: SwiftUI/QML-style text syntax (parser, printer, fmt) + T3 port …
techmore Oct 23, 2026
c368bae
dev-clean: prune stale cargo incremental folders (newest per crate st…
techmore Oct 23, 2026
43be785
T3 port in the SDK + standard window chrome, Tabs/Stack, plug-in serv…
techmore Oct 23, 2026
64092bd
SDK: layout props (align, grow, width, lines), contrast gate, segment…
techmore Oct 23, 2026
6895af5
SDK corner tokens (screen/window/popover/card/bubble/control), concen…
techmore Oct 23, 2026
1692134
CI: harden the Fairydust tarball download (token, growing waits, git …
techmore Oct 23, 2026
47fc9b7
Update public dock status for wip3 observation
techmore Oct 22, 2026
7b1da07
dock: honor hidden user desktop overrides (#556)
techmore Oct 23, 2026
412a169
docs: record blocked wip4 CI attempt
techmore Oct 22, 2026
de06727
sdk: anchor panel surfaces through Pantheon Wayland protocol
techmore Oct 23, 2026
b44240d
docs: update wip4 build status
techmore Oct 23, 2026
d82402f
docs: smart reply design (window-aware drafts, Tab to insert) and fir…
techmore Oct 23, 2026
e7735f1
Merge pull request #559 from techmore/claude/smart-reply-design
techmore Oct 23, 2026
62580c7
Fix dock launcher test PID publication race (#527)
techmore Oct 23, 2026
0575179
docs: smart reply builds on PR #526, adds rules/settings, chat-first …
techmore Oct 23, 2026
000c8c5
Merge pull request #560 from techmore/claude/smart-reply-526
techmore Oct 23, 2026
e5272c0
Merge dev and integrate Pantheon reply drafts
techmore Oct 23, 2026
ad646a2
Merge current dev smart reply design into feature branch
techmore Oct 23, 2026
244a949
work-mode: window buttons setting puts minimize, maximize and close o…
techmore Oct 23, 2026
5c62f41
Merge pull request #526 from techmore/codex/rust-pantheon-messages-20…
techmore Oct 23, 2026
7c356a4
PolyBagger: support multiple printers and USB hotplug (#522)
techmore Oct 23, 2026
4264bbb
Merge pull request #562 from techmore/claude/work-mode-window-buttons
techmore Oct 23, 2026
cd85678
Merge pull request #519 from techmore/codex/mseries-pages-status-2026…
techmore Oct 23, 2026
88a928f
Merge pull request #557 from techmore/codex/dock-panel-protocol
techmore Oct 23, 2026
db4290d
docs: SDK agent surface — intents, scopes and consent for the MCP bro…
techmore Oct 23, 2026
005899d
Merge origin/main into dev
techmore Oct 23, 2026
4d9ab42
Compositor: tie key grabs to their D-Bus client so volume keys surviv…
techmore Oct 23, 2026
3e7d318
Merge pull request #568 from techmore/claude/sync-main-into-dev
techmore Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
57 changes: 57 additions & 0 deletions .agents/skills/elementaryos-mseries-ui-specialist/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
name: elementaryos-mseries-ui-specialist
description: Build, edit, and review consistent native UI in the ElementaryOS_MSeries project using its GTK 4, Granite 7, Wingpanel, and Switchboard patterns. Use for project screens, settings, indicators, interaction states, and UI consistency reviews.
---

# M-Series UI Specialist

Create a coherent elementary OS experience across the project's apps, settings,
and menu bar. The owner values Apple's design standards: use their attention to
clarity, hierarchy, feedback, consistency, and craftsmanship as a quality bar,
expressed through the native elementary OS toolkit.

## Start from the actual surface

Locate the active ElementaryOS_MSeries checkout; read its `AGENTS.md` and current
`mseries/OS9-HANDOFF.md`. Resolve all `mseries/...` paths below against that
checkout, not this skill's installation directory. If no checkout is available,
request its location before making project-specific edits.

Read [toolkit-and-screens.md](references/toolkit-and-screens.md) for the relevant
screen family, then inspect its current code and build dependencies. The listed
revision is an inspection baseline, not a substitute for the active branch.

Read [ui-conventions.md](references/ui-conventions.md) when designing or reviewing
layouts, controls, asynchronous states, text, or accessibility.

Read [sources-and-apple-guidance.md](references/sources-and-apple-guidance.md) for
source attribution, the original **swiftui-specialist** skill, Apple HIG, and how
to translate those references without importing SwiftUI-specific rules.

## Working approach

- Choose the closest existing screen family and name the components or helpers
being reused. Existing helpers are mostly local to individual apps; inspect
their ownership and dependencies before extracting a shared implementation.
- Match the surface's toolkit and host conventions. GTK 4 + Granite 7 is the
common baseline; Work Mode already uses libadwaita inside Switchboard. Preserve
intentional exceptions and user-requested product direction.
- Distinguish observed conventions from new recommendations. Existing hardcoded
colors, small text, crowded headers, or missing translations are review targets,
not an approved design system merely because they appear in source.
- Keep UI state backed by its existing model/service. Preserve account, selection,
focus, and scroll position through updates; handle pending, stale, unavailable,
empty, and failed states without presenting unknown data as zero or success.
- Make the requested change at its natural scope. A consistency fix does not
require a toolkit migration, global theme rewrite, or new shared library.

## Validate the changed experience

Read [review-and-validation.md](references/review-and-validation.md) and choose
checks for the changed surface. Review layout in light/dark modes, long text and
small windows, plus keyboard and accessible names for changed controls. Use
existing isolated fixture probes where available.

Report concrete findings and checks, distinguishing source inspection, successful
builds, screenshot review, interaction tests, and live hardware verification.
Preserve the owner's panel stability and the repository's deployment rules.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
interface:
display_name: "M-Series UI Specialist"
short_description: "Consistent native UI for elementary OS M-Series"

policy:
allow_implicit_invocation: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Review and validation

## Scope checks to the changed surface

Before editing, identify the relevant app, toolkit versions, nearest reusable
pattern and user-visible states. After editing, inspect the diff for unrelated
style changes and state/backend regressions. Build/test the touched component,
not the whole OS image for a documentation or small widget change.

For a consistency review, report specific findings with source locations and
user impact. Separate regressions, platform mismatches and optional polish;
existing implementations are evidence, not an automatic gold standard.

## Existing test and visual entry points

All paths below are relative to the active repository. Inspect script arguments,
fixtures and side effects before running them; use an isolated display, temporary
configuration and fake services rather than real accounts/devices.

- CodexBar: `mseries/codexbar-wingpanel/meson.build` defines model, JSON,
presentation, helper and interaction tests. `probe/run-probe.sh` takes
`BUILD_DIR OUT_DIR [dark|light] [scenario...]` and renders fixture states such
as healthy, empty, busy, stale and provider-error. `probe/run-settings-probe.sh`
renders settings pages; inspect its fixed X display before use. Reuse relevant
existing probes for account switching and long-label popovers.
- Orchard: `mseries/orchard-incus-native/tests/test-ui.py` supplies a fake Incus
socket and isolated config/state for the native UI smoke target. Under an
isolated display, `meson test -C BUILD_DIR native-windows --print-errorlogs`
exercises that target after a successful component build. It is a smoke check,
not proof of visual consistency.
- Apple Passwords: inspect `mseries/icloud-passwords/test_gui.py` and its mocks
before testing; keep credentials and live keychains out of fixtures.
- Troubleshooter: compare relevant light/dark retained screenshots under
`mseries/netspeed/docs/screenshots/`, then capture changed states if needed.
- Machine Lab, Battery, Work Mode: use their current tests or isolated fixture
launchers where available; source-only inspection does not establish a visual
or scheduling pass. Do not activate live VMs or change wallpaper to test layout.

For changed layouts, inspect captured output in light/dark modes and a narrow
window with long text. For controls, check keyboard activation, focus order,
accessible names and pending/error recovery. Rendering probes alone do not
establish keyboard or assistive-technology behavior. Record omitted checks.

## Runtime boundaries

Follow `AGENTS.md`: routine indicator changes must preserve Wingpanel stability;
use private probes rather than restarting the owner's panel for screenshots.
CodexBar runtime changes still follow the repository's custom-port checks and
deployment requirements. A skill/documentation-only change does not deploy an
indicator or require rebuilding the desktop.

Report what was source-inspected, built, rendered, interacted with or verified
on hardware. State installed-but-not-loaded status when applicable. Do not infer
factory-image qualification or hardware success from a local build or fixture.
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Sources, provenance and Apple guidance

## Original reference explicitly retained

**swiftui-specialist**, distributed in
[superagents-lab/xcode27-skills](https://github.com/superagents-lab/xcode27-skills),
was the reference that inspired this skill's organization:

- [Pinned original SKILL.md](https://github.com/superagents-lab/xcode27-skills/blob/6f9ff8d5ad6000491cb0f483a776b7062e41cd97/swiftui-specialist/SKILL.md)
- [Pinned reference directory](https://github.com/superagents-lab/xcode27-skills/tree/6f9ff8d5ad6000491cb0f483a776b7062e41cd97/swiftui-specialist/references)
- [Repository attribution](https://github.com/superagents-lab/xcode27-skills/blob/6f9ff8d5ad6000491cb0f483a776b7062e41cd97/README.md)

Inspected 2026-10-20; upstream `master` revision:
`6f9ff8d5ad6000491cb0f483a776b7062e41cd97`.

The community repository states that the guidance was authored/published by
Apple and exported from Xcode 27. This attribution comes from the redistributor;
this repository does not independently establish its Apple provenance. Its
README retains Apple's rights and grants no license over that content. We link
to the original and summarize the organizational idea; no Apple skill text,
reference files, or assets are vendored here. This is original project guidance,
not an Apple-authored or Apple-endorsed port.

## Design intent

The owner considers Apple to have good design standards and wants that quality
bar represented here. Favor thoughtful hierarchy, coherent controls, predictable
navigation, immediate understandable feedback, readable text and careful handling
of state. Apply those principles using elementary OS's native components and the
user's intended product design.

The SwiftUI reference separates structure, data flow, environment, modifiers,
localization, animation, collection identity and outdated APIs into focused
references. Useful translations for this project are:

| Original topic | Native project application |
| --- | --- |
| View structure | Cohesive GTK components and existing row/page helpers |
| Data flow | GObject models, GSettings, async services and presentation boundaries |
| Environment and modifiers | Theme/settings propagation and scoped widget/CSS changes |
| Localization | gettext, locale-aware formatting, start/end layout |
| Collection identity | Stable backend IDs and preserved selection/focus in GTK models |
| Animation | Restrained transitions and supported motion preferences |
| API modernization | Verify the target GTK/Granite/host version before replacing APIs |

SwiftUI wrappers such as `@State`, `@Binding` and `@Observable`, modifier rules,
and Swift actor requirements are not GTK implementation instructions. The
upstream skill's statement about superseding model training is source content,
not authority over this project's requirements.

## Platform reference guidance

- [elementary OS Human Interface Guidelines](https://docs.elementary.io/hig):
native interaction, component use and desktop integration.
- [elementary developer documentation](https://docs.elementary.io/develop):
GTK/Granite, Meson and gettext context.
- [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines):
complementary design reference and quality bar.
- [GTK 4 reference](https://docs.gtk.org/gtk4/): validate API availability against
the actual build dependencies rather than assuming latest-version support.

Treat these as guidance with different scopes. Follow the owner's requirements,
project working agreement, target platform and installed toolkit capabilities;
use Apple guidance to improve the experience within that context. Verify current
external documentation when making an API or version-specific claim.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Toolkit and screen map

Inspected 2026-10-20 at ElementaryOS_MSeries revision
`ed0d31ab28431b5ecb8549a274ac9d1892bc63a4` (`origin/dev`). Paths are repository-relative.
Recheck them in the active branch before copying patterns.

## Build evidence and screen families

| Surface | Evidence and useful starting points | Patterns to reuse or assess |
| --- | --- | --- |
| CodexBar settings | `mseries/codexbar-wingpanel/meson.build`; `settings/SettingsApp.vala`; `settings/SettingsModel.vala`; `PanelPreferences.vala` within that directory | Vala, Granite 7 >= 7.7; `Gtk.ApplicationWindow`, HeaderBar + StackSwitcher, scrollable pages, `Granite.HeaderLabel`, grouped rows with trailing controls; live configuration and visible apply errors |
| CodexBar panel | `mseries/codexbar-wingpanel/Indicator.vala`, `Presentation.vala`, `JsonBoundary.vala`, `HelperProcess.vala`, `AccountDialog.vala` | Wingpanel 9; compact snapshot-driven panel and popover, asynchronous bounded helper calls, separate presentation/model boundary, account actions |
| Quick Settings | `mseries/quick-settings/Controls.vala`, `Bluetooth.vala`, `AirDropPanel.vala`, `AirPlayOutputs.vala`, `AudioOutput.vala`; `prepare-source.sh` | Existing indicator integration; inspect source preparation and host dependency versions before modifying; preserve backend interfaces and device-state distinctions |
| Orchard (machines, Incus, Podman; replaces the Orchard native manager and Machine Lab, merged 2026-10-21) | `mseries/orchard/meson.build`, `src/main.vala`, `src/sidebar.vala`, `src/incus-page.vala`, `src/page.vala`, `src/PodmanPage.vala`, `src/ResourceBrowser.vala`, `src/Dashboard.vala`, `data/style.css` | GTK >= 4.12 + Granite 7, libsoup 3, libsecret; one sidebar with section headers, per-page header with StackSwitcher tabs, `ml-` cards/pills/dots, Granite.Toast; cairo renderer, 1 px CSD outline, cursor blink off; optional Wingpanel 9 module |
| Machine Lab (now the Machines section of Orchard) | `mseries/orchard/src/page.vala`, `src/viewer.vala`, `data/style.css` | GTK >= 4.12 + Granite 7; machine sidebar/detail pages, empty welcome, machine states, themed cards; follows Granite color preference changes |
| Battery | `mseries/battery/mseries-battery-app.py`, `battery_core.py` | Python GI GTK 4 + Granite 7; section/card helpers, `Granite.Placeholder`, history and estimates. Keep measurements and estimates distinguishable |
| Apple Passwords | `mseries/icloud-passwords/app.py`, `worker.py`, `test_gui.py` | Python GI GTK 4 + Granite 7; HeaderBar, sign-in/verification/unlock flow, search/list/detail, busy/cancel/re-authentication controls, explicit experimental status |
| Work Mode | `mseries/work-mode/meson.build`, `Plug.vala`, `io.elementary.mseries.work-mode.gschema.xml` | GTK 4 + Granite 7 + libadwaita + Switchboard 3; PreferencesPage/Group, SwitchRow/ActionRow/EntryRow, GSettings bindings, native image chooser; initialize plug fields after GObject base construction |
| Troubleshooter | `mseries/netspeed/troubleshooter/mseries-troubleshooter-ui` | Python GI GTK 4 with optional Granite fallback; question entry, welcome suggestions, readable report with verdict and evidence |

## Concrete local anchors

In CodexBar `settings/SettingsApp.vala`, inspect `page`, `section`, `row`,
`add_row`, `icon_button`, `changed`, and `apply_pending`. Rows associate controls
with accessible labels, subtitles wrap, and configuration writes are debounced.
These are private per-app helpers, not a shared public component API.

CodexBar's current quick-switch menu starts with a 240-logical-pixel width request
and wraps/ellipsizes dynamic labels. GTK width requests are minimums; inspect
child natural sizes when a long account name widens a popover. Do not apply that
width to unrelated dialogs or full settings windows.

Machine Lab's CSS scopes styles with `ml-`; CodexBar uses `cb-` or
`mseries-codexbar` selectors. Machine Lab mixes theme-derived colors with explicit
status and machine palette values. Assess contrast and meaning before reuse.

## Retained screenshots actually inspected

- `mseries/netspeed/docs/screenshots/troubleshooter-empty-light.png`: 640 × 470,
native header search, centered welcome with title, short explanation, and three
icon/title/subtitle suggestions.
- `mseries/netspeed/docs/screenshots/troubleshooter-report.png`: 640 × 470, dark
report with a verdict, attention/ignore groups, and readable task-focused text.

These are historical visual references, not evidence that current code or
hardware was visually qualified. Other screen families were inspected in source;
new screenshots should be captured when changing those screens.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# UI conventions and decision criteria

These recommendations translate the inspected project into a consistent working
practice; they are not a claim that every existing screen already complies.

## Layout and styling

Use native header bars, navigation, controls and dialogs for the containing app.
Keep primary content and the next useful action easy to find. Group related
settings with a heading and rows: label/optional description at the start,
control at the end. Use a sidebar/detail layout for collections, and a welcome
or placeholder for genuinely empty content.

Match neighboring rows before introducing new dimensions. Observed settings
examples include 12-pixel control gaps, CodexBar row padding of 8 × 12, page
side margins of 18, and Battery row side margins of 14. These are local anchors,
not universal tokens. Avoid converting the whole project to a new spacing scale
as part of a small change. Use logical units and start/end alignment.

Reuse theme typography and hierarchy; keep subordinate copy readable. Scope CSS
to the app or component and prefer theme foreground, background, accent and
semantic colors. Check contrast in both schemes. Follow the app's system color
preference handling; do not force a macOS font, palette or decoration. Keep
intentional palette choices when they communicate a useful identity.

Allow labels to wrap and content to scroll vertically. Check long account names,
provider errors, translated text, enlarged text and narrow windows. Ellipsize
compact summaries only when full information remains available. A width request
does not cap GTK's natural width. Keep header actions usable as space shrinks;
existing crowded headers are not a template to reproduce.

## Controls and navigation

Use a switch for a persistent boolean, a button for an action, and a dropdown or
other suitable selector for mutually exclusive choices. Preserve established
instant-apply settings and display save failures; only show success when the
backend confirms it. Retain an explicit Apply/Save workflow where the target
surface already needs staged changes.

Use clear action labels such as Refresh, Sign In, Cancel, or Retry. Label
icon-only actions accessibly and supply useful tooltips. Preserve keyboard focus,
selection and scroll position after a refresh. Use stable backend identifiers
for rows and accounts, not display text or list positions.

## Asynchronous state and data flow

Keep service, parsing and presentation responsibilities distinct, following
existing model/helper boundaries. Avoid blocking subprocess, network or disk
work on the GTK main loop; marshal worker results onto the UI thread. Cancel or
ignore stale completions when the account changes or a window closes. Avoid
rebuilding the entire widget tree for a value update.

- **Loading:** identify what is being fetched; preserve useful prior data.
- **Empty:** explain why there is no content and offer the relevant next action.
- **Pending:** prevent duplicate operations while retaining cancellation where supported.
- **Stale/offline:** retain last-known data with its age and a useful refresh/retry action.
- **Error:** explain the failed operation and recovery; keep details available without overwhelming the screen.
- **Success:** reflect confirmed backend state. Distinguish measured values, estimates, unavailable values and real zeros.

For sync or account flows, distinguish signed out, verification required,
unlocking, syncing, up to date, expired authentication and failed operations.
Do not invent conflict-resolution controls if the backend is read-only or has
no conflict model. Never expose passwords or tokens in labels, screenshots or logs.

## Accessibility, text and motion

Associate labels and controls; ensure keyboard activation, logical tab order,
visible focus and a way to dismiss dialogs. Communicate state with text or icons
as well as color. Test contrast for dim subtitles and status badges, not only
main headings. Use semantic GTK accessibility properties for custom controls.

Follow the target app's gettext setup for new user-facing text. If it lacks
translation infrastructure, identify that gap and keep strings ready to extract;
do not claim localization is complete. Use locale-aware date/number/unit formatting
and translator context for ambiguous labels. Avoid sentence fragments assembled
around substituted values where grammar changes with translation.

Use restrained feedback and transitions; honor animation preferences where
supported. A continuously pulsing status indicator in existing CSS is something
to assess, not a requirement for every running state.
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
*.pgp binary
*.gpg binary
# Empty context lines in this unified diff contain the required leading space.
mseries/patches/dock-taskbar-codexbar.patch whitespace=-blank-at-eol
mseries/patches/dock-taskbar-repobar.patch whitespace=-blank-at-eol
mseries/patches/dock-taskbar-power-buttons.patch whitespace=-blank-at-eol
mseries/patches/dock-running-apps.patch whitespace=-blank-at-eol
Loading
Loading