Skip to content

Seed v3 Colophon design system for OpenClaw Windows Hub - #1395

Open
karkarl wants to merge 16 commits into
mainfrom
karkarl-seed-design-system-v3
Open

karkarl wants to merge 16 commits into
mainfrom
karkarl-seed-design-system-v3

Conversation

@karkarl

@karkarl karkarl commented Sep 10, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Seeds a fresh v3-schema Colophon design system into .agents/design/ for the OpenClaw Windows Hub app, carrying over the design decisions from the earlier v1 seed (PR #962, closed/unmerged) and re-expressing the component patterns in the updated v3 schema. Branches off main.

This PR is design-system seeding only. It adds .agents/design/* and the idempotent Colophon pointer block in repo-root AGENTS.md. No application code, tests, or build files are modified.

What's here

  • design.json — carried over from the v1 seed (tokens format is unchanged in v3): Fluent color tokens (each with its resource ThemeResource key + light/dark/highContrast themes), authority port targets, brand, typography, spacing, radii, shadows, principles. Preview hex is preview-only; shipping code binds the Fluent resource keys. Now carries 15 color tokens (12 from the v1 seed + control / controlLine / accentSubtle for inputs/chat) and a WinAppCli entry in the port authority (see below).
  • principles.md — carried over verbatim from the v1 seed.
  • components.jsonc — 10 components authored to v3 (meta.version: 3): Button, Field, Card, Badge, ComposerPicker, ComposerPickerOptions, ChatBubble, ChatComposer, ChatThread, ExampleScreen. Every raw-CSS attrs.style string is replaced with semantic, token-bound layout / position / appearance. Every object node has a stable unique id. WinUI-provenance and Reactor-port notes are preserved; ExampleScreen uses a v3 freeform status board to exercise absolute positioning alongside Auto Layout.
  • colophon.jsonc — new v3 presentation profile (schemaVersion: 1, extends: "colophon/default") mapping OpenClaw tokens to theme roles for light + dark, brand, navigation, and component template config.
  • AGENTS.md — idempotent Colophon pointer block; em dashes removed so the repo doc validator (no em dashes in user-facing docs) passes.

Chat components reconciled to the shipping Reactor UI (design data only)

The chat entries in components.jsonc describe what the app actually ships today, so the design stays in sync with the implementation:

  • ComposerPicker — the subtle inline dropdown the composer's session / model / reasoning selectors use: borderless, transparent resting fill (SubtleFillColorTransparent), hover subtleHover / press subtlePressed, muted value text with a trailing muted chevron, sm radius, gap/padding tokens 1/2. Opens a flyout of single-select options in-app (Reactor port note).
  • ChatComposer — toolbar matches the implemented layout (session picker + Attach/Model/Reasoning/Voice/Speaker/Settings/Send), container binds control / controlLine with a 12px margin; note documents the Send↔Stop toggle.
  • ChatThread / ChatBubble — user bubble uses the softer accentSubtle with a hover Copy; assistant bubble uses subtleHover fill + controlLine border with a Read-aloud footer and max-width 720.
  • 3 new tokens the system didn't previously cover (preview hex are approximations; shipping code binds the resource keys): control → ControlFillColorDefaultBrush, controlLine → ControlStrokeColorDefaultBrush, accentSubtle → AccentFillColorSecondaryBrush.

Composer input + pickers use the colophon #16 interaction model (design data only)

The composer's input, subtle buttons, and picker flyout are expressed with the schema-pure interaction keys (control / states / on) from the colophon #16 components schema, so the preview matches Windows Fluent (not Fluent-web) behavior with no raw CSS:

  • Borderless, typeable input — chat-composer-input (a contenteditable textbox) sets control.chrome: none to drop the web button/input border and control.focus: { kind: underline, color: accent } for a Windows accent underline on focus instead of a web focus ring. It stays selectable and editable in the canvas.
  • Real subtle buttons with WinUI states — ComposerPicker and the four composer icon buttons (add context, dictate, read aloud, chat settings) are real button elements with a transparent rest state ($none), control.chrome: none + control.focus outline, and states carrying subtleHover / subtlePressed (hover / pressed / hoverPressed). ComposerPicker also gets a disabled shade for single-choice selectors.
  • Click-to-open flyout — ComposerPicker's on: { click: { open: "ComposerPickerOptions" } } opens the new ComposerPickerOptions component, a WinUI RadioMenuItem-style single-select flyout on a surface sheet with md radius/shadow. Flyout targets take no props, so it is a representative shared model list; the real per-picker option sets are a Reactor port note.
  • Notes were refreshed to describe the real button + control model and to drop the obsolete combobox-div and web-focus-ring caveats.

WinAppCli in the port authority (design data)

Per the maintainer, XAML and Reactor now build/package through winapp (WinAppCli, https://github.com/microsoft/WinAppCli). design.json's authority gains a tooling descriptor and a toolingSource on the default WinUI 3 port and the Reactor chat override. This is design-system metadata about how the design ports to code; it changes no code. The design→code syncSource references (win-dev-skills / microsoft-ui-reactor) are unchanged.

px → token approximations (worth a human eye)

Raw WinUI pixel padding snapped to the nearest 4px token, each recorded in the component note: Button ButtonPadding 11,5,11,6 → 3/1 (MinWidth 100 = port note); Field TextControlThemePadding 10,5,6,6 → 2/1 (MinHeight 32 = port note); Card 16,12 → 4/3 (exact). Chat bubble/composer max-width/min-height growth values have no token equivalent and remain Reactor port notes. The 3 input/chat tokens' preview hex are approximations of the real Fluent brushes; shipping code binds the resource keys, so the hex is preview-only.

Required proof pools

none — this PR only adds framework-agnostic design-system data files under .agents/design/ plus the AGENTS.md pointer. No shipping UI, MCP, node, setup, pairing, or gateway code changes, so the app-behavior proof pools in docs/PROOF_POOLS.md don't apply.

Validation

Validated against the Colophon extension's own read-only validators (componentsio.mjs, profileio.mjs, validate.mjs):

  • components.jsonc parses at meta.version: 3; validateComponentsDoc(doc, { tokens }) passes (all appearance / states / control token refs, including the 3 new tokens, resolve against design.json; every on.click.open target resolves to a defined component); all 10 components expandInstance successfully; guard confirms no raw "style" attrs remain.
  • colophon.jsonc $schema matches PROFILE_SCHEMA_URL; validatePresentationProfile passes.
  • Aggregate validateDesignDir('.agents/design') → ok: true, 0 errors, 0 warnings.
  • Against the main merge-base, this branch changes only .agents/design/* and AGENTS.md (verified via git diff --stat). No C#, test, or build files are touched, so repo build/test suites are not applicable to this change.

Real behavior proof

The design system renders in the Colophon canvas from these files; the extension validators above exercise the same parse/validate/expand path the canvas uses. No runtime app behavior changes in this PR.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Carry over the v1 design.json tokens/brand/authority and principles.md verbatim, port all 9 components (Button, Field, Card, Badge, ComposerPicker, ChatBubble, ChatComposer, ChatThread, ExampleScreen) from raw-CSS attrs.style to v3 Auto Layout with token-bound layout/appearance, and add a v3 colophon.jsonc presentation profile. Adds the idempotent Colophon pointer block to AGENTS.md.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Sep 10, 2026
@clawsweeper

clawsweeper Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

Codex review: blocked before merge. Reviewed September 24, 2026, 9:00 PM ET / September 25, 2026, 01:00 UTC (Revision 16).

ClawSweeper review

What this changes

The branch adds a Colophon design catalog, canvas profile, Fluent design guidance, and root instructions for agents building the Windows UI.

Merge readiness

⛔ Blocked before merge - 9 items remain

Current main and the latest release lack this catalog, and the earlier seed closed unmerged. The new canvas screenshot supports the visible layout, while supported Colophon behavior and repository guidance still expose merge blockers. A maintainer also needs to confirm the catalog’s authority boundary.

Priority: P3
Reviewed head: 9a11bdf7ac3f88dc70239c1c1998226c949a62cd
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The visible catalog has useful signal, but supported-preview defects and inaccurate implementation guidance limit merge readiness.
Proof confidence 🌊 off-meta tidepool Not applicable: This collaborator-authored design-only PR is exempt from the ordinary contributor runtime-proof gate. The supplied canvas screenshot shows the migrated composer and thread at rest; it does not prove picker selection or profile consumption. The final commit changed prose punctuation. No existing application stored-data contract changes, and this read-only review ran no build or tests.
Patch quality 🦐 gold shrimp (3/6) 6 actionable review findings remain.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: This collaborator-authored design-only PR is exempt from the ordinary contributor runtime-proof gate. The supplied canvas screenshot shows the migrated composer and thread at rest; it does not prove picker selection or profile consumption. The final commit changed prose punctuation. No existing application stored-data contract changes, and this read-only review ran no build or tests.
Evidence reviewed 16 items Introduced scope: The pinned branch delta adds four design and guidance files with 1,671 inserted lines and no application or test changes.
Still absent from main and release: The fetched main tree and v2026.9.4 release tree contain AGENTS.md but no DESIGN.md or .agents/design catalog.
Release check: The v2026.9.4 tree has no design catalog.
Findings 6 actionable findings [P2] Use functional radio controls in the picker preview
[P2] Preserve generated styles on the selected checkmark
[P2] Use a supported Colophon profile contract
Security None None.

How this fits together

The catalog records visual patterns derived from the shipping WinUI and Reactor chat surfaces. Colophon renders those patterns for preview, and agents use the guidance when implementing future UI changes.

flowchart LR
  A[Shipping Windows UI] --> B[Fluent resource inspection]
  B --> C[Design guidance and tokens]
  C --> D[Component patterns]
  D --> E[Colophon canvas]
  C --> F[Agent UI guidance]
  F --> G[Future Windows UI]
Loading

Decision needed

Question Recommendation
Should this repository adopt the Colophon catalog as maintained agent-facing design guidance when native WinUI and Reactor behavior remain canonical? Adopt as derived guidance: Approve the catalog after its instructions consistently defer to shipping native behavior and name who keeps the examples synchronized.

Why: The prior seed closed over parallel design authority; accepting a repository-wide agent workflow and its synchronization obligation requires maintainer intent.

Before merge

  • Use functional radio controls in the picker preview (P2) - The flyout rows are labels with fixed aria-checked values. Colophon closes the overlay only when a radio input changes, so choosing another row cannot update selection or dismiss the flyout, and the rows are not keyboard-focusable. Use supported radio controls while retaining the intended checkmark.
  • Preserve generated styles on the selected checkmark (P2) - The raw attrs.style font declaration replaces Colophon's generated inline style, dropping the checkmark's token-bound accent color, width, and alignment. Represent the icon without overriding its generated styles.
  • Use a supported Colophon profile contract (P2) - The cited Colophon revision has no declared profile schema or profile loader, and its directory validator reads the design tokens and components without this file. Remove the unused profile or identify and validate against a consumer revision that supports it.
  • Correct the Windows build-tool authority (P2) - This calls WinAppCLI the single build and packaging tool for both UI ports. The repository build invokes dotnet build, CI uses dotnet and MSBuild, and WinAppCLI is an optional local launch path. Future agents would receive the wrong build instructions.
  • Point design guidance at files this branch provides (P3) - The metadata still names components.jsx, the Components section points to an absent prototypes.jsonc, and the picker note names the removed design.json. Update those references and the PR body to match the DESIGN.md migration.
  • Remove em dashes from the remaining canvas copy (P3) - Late discovery: the component file was unchanged since the prior reviewed head, and its preview text still contains em dashes after the root guidance was corrected. The repository's user-facing copy rule also covers this displayed sample text.
  • Resolve merge risk (P1) - Root agent instructions could make a derived Colophon catalog a competing design authority for future UI work. The earlier seed was closed over that boundary, so adoption and synchronization ownership need an explicit maintainer decision.
  • Complete next step (P2) - Repair the preview and guidance findings, update the PR body, report the repository-required validation results, and obtain maintainer direction on catalog authority before merge.
  • Resolve maintainer decision - Resolve the maintainer decision shown above before merge.

Findings

  • [P2] Use functional radio controls in the picker preview — .agents/design/components.jsonc:248-250
  • [P2] Preserve generated styles on the selected checkmark — .agents/design/components.jsonc:253
  • [P2] Use a supported Colophon profile contract — .agents/design/colophon.jsonc:2-4
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Introduced lines design and guidance +1,671; production +0; tests +0 The substantial catalog growth adds maintenance obligations without changing the shipping app.

Root-cause cluster

Relationship: canonical
Canonical: #1395
Summary: This live v3 seed succeeds an earlier v1 seed that closed without merging.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge-risk options

Maintainer options:

  1. Keep native UI canonical (recommended)
    Revise the root instructions so the catalog is explicitly derived from shipping UI, then assign synchronization ownership before merge.
  2. Accept a design-first workflow
    A maintainer may sponsor the new authority model and take responsibility for conflicts between the catalog and shipping UI.
  3. Pause repository adoption
    Keep the preview in the Colophon project if the ongoing repository maintenance cost is not justified.

Technical review

Best possible solution:

Maintain a keyboard-accessible, validated preview as derived guidance from native WinUI and Reactor behavior, with accurate resource mappings and build instructions.

Do we have a high-confidence way to reproduce the issue?

Yes, source gives a high-confidence picker check: open the Colophon model flyout and choose another row. The rows have no radio inputs, while the inspected Colophon runtime closes only on radio-input changes; this review did not execute the interaction.

Is this the best way to solve the issue?

No, not yet. The preview needs supported controls and a supported profile contract, while the guidance must describe the repository’s real build path and the maintainer-approved native authority boundary.

Full review comments:

  • [P2] Use functional radio controls in the picker preview — .agents/design/components.jsonc:248-250
    The flyout rows are labels with fixed aria-checked values. Colophon closes the overlay only when a radio input changes, so choosing another row cannot update selection or dismiss the flyout, and the rows are not keyboard-focusable. Use supported radio controls while retaining the intended checkmark.
    Confidence: 0.97
  • [P2] Preserve generated styles on the selected checkmark — .agents/design/components.jsonc:253
    The raw attrs.style font declaration replaces Colophon's generated inline style, dropping the checkmark's token-bound accent color, width, and alignment. Represent the icon without overriding its generated styles.
    Confidence: 0.94
  • [P2] Use a supported Colophon profile contract — .agents/design/colophon.jsonc:2-4
    The cited Colophon revision has no declared profile schema or profile loader, and its directory validator reads the design tokens and components without this file. Remove the unused profile or identify and validate against a consumer revision that supports it.
    Confidence: 0.9
  • [P2] Correct the Windows build-tool authority — DESIGN.md:80-83
    This calls WinAppCLI the single build and packaging tool for both UI ports. The repository build invokes dotnet build, CI uses dotnet and MSBuild, and WinAppCLI is an optional local launch path. Future agents would receive the wrong build instructions.
    Confidence: 0.97
  • [P3] Point design guidance at files this branch provides — DESIGN.md:75
    The metadata still names components.jsx, the Components section points to an absent prototypes.jsonc, and the picker note names the removed design.json. Update those references and the PR body to match the DESIGN.md migration.
    Confidence: 0.98
  • [P3] Remove em dashes from the remaining canvas copy — .agents/design/components.jsonc:286
    Late discovery: the component file was unchanged since the prior reviewed head, and its preview text still contains em dashes after the root guidance was corrected. The repository's user-facing copy rule also covers this displayed sample text.
    Confidence: 0.84
    Late finding: first raised on code an earlier review cycle already covered.

Overall correctness: patch is incorrect
Overall confidence: 0.93

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 273b0182745a.

Labels

Label changes:

  • add merge-risk: 🚨 other: Repository-wide agent guidance could drift from, or compete with, the canonical native UI design contract.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. This collaborator-authored design-only PR is exempt from the ordinary contributor runtime-proof gate. The supplied canvas screenshot shows the migrated composer and thread at rest; it does not prove picker selection or profile consumption. The final commit changed prose punctuation. No existing application stored-data contract changes, and this read-only review ran no build or tests.

Label justifications:

  • P3: This is a non-shipping design and contributor-workflow addition with no current user-facing runtime regression.
  • merge-risk: 🚨 other: Repository-wide agent guidance could drift from, or compete with, the canonical native UI design contract.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🌊 off-meta tidepool and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Not applicable: This collaborator-authored design-only PR is exempt from the ordinary contributor runtime-proof gate. The supplied canvas screenshot shows the migrated composer and thread at rest; it does not prove picker selection or profile consumption. The final commit changed prose punctuation. No existing application stored-data contract changes, and this read-only review ran no build or tests.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. This collaborator-authored design-only PR is exempt from the ordinary contributor runtime-proof gate. The supplied canvas screenshot shows the migrated composer and thread at rest; it does not prove picker selection or profile consumption. The final commit changed prose punctuation. No existing application stored-data contract changes, and this read-only review ran no build or tests.

Evidence

What I checked:

  • Introduced scope: The pinned branch delta adds four design and guidance files with 1,671 inserted lines and no application or test changes. (9a11bdf7ac3f)
  • Still absent from main and release: The fetched main tree and v2026.9.4 release tree contain AGENTS.md but no DESIGN.md or .agents/design catalog. (273b0182745a)
  • Release check: The v2026.9.4 tree has no design catalog. (3c43751b2bac)
  • Picker options: The three option rows are labels with fixed aria-checked values and no radio inputs. (.agents/design/components.jsonc:248, 9a11bdf7ac3f)
  • Colophon selection contract: At the cited Colophon revision, the flyout closes on change from an input[type=radio] and focuses the first focusable child. The proposed labels satisfy neither path. (extensions/colophon/components-interactions.js:94, cca8a719af5c)
  • Selected glyph style: The checkmark combines generated layout and accent appearance with a raw style attribute setting its font family. (.agents/design/components.jsonc:253, 9a11bdf7ac3f)

Likely related people:

  • shanselman: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • karkarl: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • Dallin Romney: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Make picker selection functional and retain token styling on its checkmark.
  • Remove the unsupported profile or validate it against an identified Colophon consumer revision.
  • Correct build and file references, update the PR body, and report the repository-required validation results.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (15 earlier review cycles; latest 8 shown)
  • reviewed 2026-09-11T18:08:54.851Z sha ada5a62 :: needs changes before merge. :: [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from the new agent-facing prose
  • reviewed 2026-09-14T17:47:48.923Z sha 3b62bbf :: needs changes before merge. :: [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from the new agent-facing prose
  • reviewed 2026-09-14T18:39:19.799Z sha c59d186 :: needs changes before merge. :: [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from the new agent-facing prose
  • reviewed 2026-09-15T18:02:14.753Z sha 9aded00 :: needs changes before merge. :: [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from the new agent-facing prose
  • reviewed 2026-09-15T23:43:55.677Z sha 3752e58 :: needs changes before merge. :: [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from the new agent-facing prose
  • reviewed 2026-09-17T05:43:41.539Z sha 5b0fcdf :: needs changes before merge. :: [P2] Preserve functional radio controls in the picker preview | [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from agent-facing prose
  • reviewed 2026-09-17T05:49:37.211Z sha 5a12399 :: needs changes before merge. :: [P2] Preserve functional radio controls in the picker preview | [P2] Preserve token styles when applying the icon font | [P2] Use an available Colophon presentation-profile contract | [P2] Describe WinAppCLI as the optional launcher it currently is | [P3] Replace references to the nonexistent JSX catalog | [P3] Remove prohibited em dashes from agent-facing prose
  • reviewed 2026-09-23T19:41:00.392Z sha 146fe47 :: needs changes before merge. :: [P2] Restore functional radio controls in the picker preview | [P2] Preserve token styling on the selected checkmark | [P2] Use a supported Colophon presentation profile | [P2] Correct the Windows build-tool authority | [P3] Remove references to missing design files | [P2] Replace em dashes in maintained design guidance

@karkarl
karkarl marked this pull request as draft September 10, 2026 18:57
ComposerPicker now follows the Fluent ComboBox pattern (bordered control fill + hairline border, ink value, right-aligned muted chevron). ChatComposer and ChatThread are realigned to the actual ReactorChatComposer/ReactorChatTimeline implementation:

- ChatComposer toolbar: adds session picker, speaker, and settings; notes the Send<->Stop toggle; binds ControlFill/ControlStroke (control/controlLine) instead of Card resources; 12px outer margin.

- ChatThread/ChatBubble: user bubble uses the softer accentSubtle (AccentFillColorSecondaryBrush) with a hover Copy; assistant bubble uses subtleHover fill + controlLine border, adds Read aloud, and max-width 720.

Adds 3 tokens the system did not cover: control (ControlFillColorDefaultBrush), controlLine (ControlStrokeColorDefaultBrush), accentSubtle (AccentFillColorSecondaryBrush). Preview hex only; code binds the resource keys.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. label Sep 10, 2026
…AppCli

Reactor port of the design system's ComposerPicker into the shipping composer: ReactorChatComposer.PickerButton now renders a bordered Fluent ComboBox (ControlFill fill, ControlStroke hairline border, primary-text value, right-aligned muted chevron pinned by a Star/Auto grid, radius 4, MinWidth 64, padding 12/8) instead of a borderless subtle button. Session/model/reasoning selection still opens the existing MenuFlyout of RadioMenuItems.

design.json: add a winapp (WinAppCli, https://github.com/microsoft/WinAppCli) tooling reference to authority and a toolingSource on both the default WinUI 3 port and the Reactor chat override, since XAML and Reactor now build/package through winapp.

Update the composer chevron contract test to assert the ComboBox styling. Remove em dashes from the Colophon pointer block in AGENTS.md so the repo doc validator (no em dashes in user-facing docs) passes.

Validation: build.ps1 OK; OpenClaw.Shared.Tests 3989 passed; OpenClaw.Tray.Tests 2897 passed; design-system validators (componentsio/profileio/validateDesignDir) OK; rubber-duck review clean.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Sep 10, 2026
The bordered Fluent ComboBox port regressed the composer's session/model/reasoning selectors. Restore the subtle inline dropdown the surface is meant to ship: ReactorChatComposer.PickerButton goes back to a borderless, transparent button (SubtleFillColorTransparent resting, subtle hover/press, muted value + trailing chevron with a small right/up offset). Update the design system's ComposerPicker to the same subtle pattern (transparent fill, no border, muted text/chevron, gap/padding tokens 1/2) and rename the contract test to ReactorComposer_StylesPickersAsSubtleDropdown.

The WinAppCli port authority (design.json) is unchanged.

Validation: build.ps1 OK; OpenClaw.Shared.Tests 3989 passed; OpenClaw.Tray.Tests 2897 passed; design-system validators OK.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
This PR is design-system seeding only. Restore src/OpenClaw.Tray.WinUI/Chat/ReactorChatComposer.cs and tests/OpenClaw.Tray.Tests/ChatTimelinePresentationTests.cs to their main state, removing the composer picker code port entirely. The design system (.agents/design/*) still describes the subtle inline dropdown that the app actually ships, and design.json keeps the WinAppCli port authority. No production code or tests are changed by this PR.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. labels Sep 10, 2026
karkarl and others added 10 commits September 11, 2026 10:53
Update the ChatComposer sample values and placeholder to mirror the real Reactor composer (Message Assistant placeholder; Main session / Claude Sonnet 5 / Default pickers), and note that a picker with a single option (the session picker with one session) renders disabled so its label reads lighter than its enabled neighbours. Design data only; no code or token changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
The ComposerPicker and the chat icon/send/copy buttons rendered with the
browser default button bevel in the Colophon preview because they were the
only authored el:button nodes without the canonical ds-btn reset class
(border: 1px solid transparent). Adding it drops the retro OS chrome so the
subtle borderless pickers render as intended; inline appearance still drives
radius, color, and the Send accent fill. Design-only, no production changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
The composer pickers and toolbar icon buttons ship as WinUI subtle
DropDownButtons / transparent Buttons (SubtleFillColorTransparent rest,
SubtleFillColorSecondary hover, SubtleFillColorTertiary press,
ControlCornerRadius, TextFillColorSecondary glyph) - verified against the
canonical ReactorChatComposer PickerButton and WinUI Fluent resources. In the
web preview these were rendering as native <button>s (browser chrome plus the
ds-btn web button weight), which read as Fluent-web rather than Fluent-Windows.
Represent them as role-annotated elements so the transparent WinUI rest state
shows cleanly; only the filled primary Send stays a real button. Notes now name
the WinUI control and resource ladder explicitly. Design-only, no production or
test changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
The composer message input was a raw <textarea>, so the preview showed the
browser's default field border. The design intent is a borderless, transparent
WinUI TextBox (the hairline border belongs to the outer control panel, not the
input). Render it as a borderless contenteditable textbox (role=textbox) showing
the muted placeholder, so no field border shows in any theme, while keeping it
typeable. Design-only, no production or test changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
Clicking the composer input showed the browser's :focus outline ring, a
web-Fluent artifact that only appeared because contenteditable made the div
focusable. A Windows Fluent TextBox has no such ring. Render the preview input
as a non-focusable role=textbox div (drop contenteditable) so no focus outline
shows on click, keeping the static borderless rest-state representation. The
real focus cue (accent underline) ships on port. Design-only.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
Interactive editability is the point of the web preview, so keep the composer
input contenteditable (typeable). The browser's :focus outline ring that shows
on click is a web-Fluent artifact the static renderer cannot suppress from
design-only JSON (appearance has no outline key; raw style attrs are rejected).
Document that caveat and route the fix (suppress web outline / show a Windows
accent-underline focus cue) to the Colophon extension, tracked in
karkarl/colophon#14. Design-only.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
…ickers

Re-express the chat composer's borderless input, subtle picker/icon
buttons, and picker flyout using the schema-pure interaction keys
(control/states/on) from the colophon #16 components schema, replacing
the earlier focus-ring-routing workaround. No raw CSS; all tokens bind
to design.json.

- ComposerPicker root is now a real transparent button: control.chrome
  none removes the web button border, control.focus supplies the Windows
  accent focus rectangle, and states carry WinUI subtleHover/subtlePressed
  plus a disabled shade. on.click opens a representative single-select
  ComposerPickerOptions flyout (targets take no props).
- New ComposerPickerOptions component: WinUI RadioMenuItem-style flyout on
  a surface sheet with md radius/shadow.
- chat-composer-input renders borderless and typeable with an accent
  underline on focus (control.chrome none + control.focus underline),
  dropping the web focus ring.
- The four subtle icon buttons (add context, dictate, read aloud, chat
  settings) become real buttons with transparent rest state and WinUI
  hover/pressed/hoverPressed states.
- Notes refreshed to describe the real button + control model and drop the
  obsolete combobox-div and web-ring caveats.

Design-only: no production or test files touched.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
Replace the radio-dot selection indicator in ComposerPickerOptions with a
reserved leading glyph column that renders an accent checkmark on the
selected row, matching WinUI RadioMenuItem selection. Preserves
menuitemradio/aria-checked semantics.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
Use the Fluent icon CheckMark (U+E73E) in the Segoe Fluent Icons font for the
selected ComposerPickerOptions row instead of a generic Unicode check, matching
WinUI menu selection glyphs. Document the icon font as an 'icon' typography
family (SymbolThemeFontFamily provenance); the glyph keeps its accent color
token-bound and applies the icon font via a font-family-only raw style, since
the token appearance.fontFamily is capped to display/body/mono.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
Re-express the v3 seed in Colophon's new DESIGN.md format (karkarl/colophon#20):
- Add root DESIGN.md carrying every token, Fluent `resource` mapping, the
  `authority` port targets (WinUI 3 default + Reactor chat override + winapp
  tooling, owner, sync process), per-color dark/high-contrast themes, and the
  OpenClaw principles prose (voice, hierarchy, do/don't, anti-references).
- Remove legacy .agents/design/design.json and .agents/design/principles.md;
  loadDesign now errors if both DESIGN.md and design.json coexist.
- Keep .agents/design/components.jsonc and colophon.jsonc unchanged.
- Repoint the AGENTS.md Colophon block at DESIGN.md.

Validated with the colophon validate.mjs CLI at commit cca8a71: design system is valid.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
@karkarl

karkarl commented Sep 25, 2026

Copy link
Copy Markdown
Collaborator Author
image

@karkarl
karkarl marked this pull request as ready for review September 25, 2026 00:47
…olicy

CI user-facing documentation check forbids em dashes. Replace them in the
DESIGN.md front matter token descriptions and the managed AGENTS.md Colophon
block with commas, periods, and parentheses. Front-matter edits stay YAML-safe
(no colon-space introduced into plain scalars); colophon validate still passes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac8d03a2-7198-43dc-8506-709986d6e1d3
@clawsweeper clawsweeper Bot added merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. labels Sep 25, 2026
@karkarl

karkarl commented Sep 25, 2026

Copy link
Copy Markdown
Collaborator Author

Global triage: HOLD_FOR_AUTHOR. Take confidence 15%; recommendation confidence 97%; effort medium; risk medium.

Reviewed exact head 9a11bdf7. The catalog does not match the cited Colophon runtime:

  • Picker rows are static menuitemradio labels with no selectable input, keyboard behavior, or state transition.
  • Raw attrs.style replaces the generated checkmark styling.
  • Border-color-only avatar, bubble, and composer nodes render no border because no width is supplied.
  • The composer placeholder is editable content rather than placeholder state.
  • The pinned Colophon implementation does not load the added colophon.jsonc, and its schema URL is unavailable.
  • DESIGN.md incorrectly describes WinAppCli as the exclusive build and packaging authority and still references nonexistent design files.

Please repair those contracts and provide pinned Colophon interaction and computed-style proof for picker selection, focus restoration, first-keystroke composer behavior, borders, and light/dark rendering. No shipping-app proof pool is required unless production WinUI changes are added.

The three failed E2E lanes also fail at the same setup step on current main; CI Gate is derivative. They are not attributed to this design-only patch.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant