Skip to content

fix(ui): align connection settings and correct dark render background - #174

Merged
Lucas1479 merged 2 commits into
mainfrom
codex/settings-design
Oct 10, 2026
Merged

Lucas1479 merged 2 commits into
mainfrom
codex/settings-design

Conversation

@Lucas1479

@Lucas1479 Lucas1479 commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

What and why

ACP and MCP editors used separate layouts from the rest of Settings. The dark-theme Render pane also composited its transparent character document over a white canvas because the embedding iframe and its document used different color schemes. Editing an ACP name and opening another agent silently discarded the draft, and switching from a long settings section opened the next section at the old scroll position.

Align both editors with the existing Settings field rows, cards, theme tokens and status pills. Group low-frequency options, associate every field label, localize the guidance, and give save/cancel/remove distinct actions. Pending writes lock the form; unsaved edits require a discard decision before changing editors or leaving through Settings/app navigation. ACP removal has an inline confirmation. Section navigation starts at the top. The embedded Render pane now matches the unthemed render document’s color scheme and composites over a pure black stage in the dark theme, while retaining the light-theme background.

Linked Issue for product-semantic or public-contract changes: none; this is the requested repair of existing Settings presentation and editing behavior.

Change class

  • Routine fix, documentation, test, maintenance, or presentation-only UI
  • Product-semantic or public-contract change discussed in the linked Issue
  • Isolated, default-off experiment

Owning layer: Electron renderer and its embedded Render surface styling. Shared primitives own presentation; ACP/MCP still own their drafts and complete-record saves. The app shell consults the Settings navigation decision before user navigation or projection toggles.

User-visible effects:

  • Consistent field rows and switches, collapsible advanced options, sticky save actions, inline errors and responsive single-column forms.
  • Pure black (#000000) character backdrop in the dark theme, without changing character pixels, alpha, wallpaper rendering or reloading the frame when the theme changes.
  • Explicit startup-enabled / restart-required labels instead of implying that an ACP agent is running.
  • Unsaved ACP/MCP edits can be kept when changing context, and in-flight saves cannot be abandoned through these navigation controls.

Compatibility: no changes to stored schemas, defaults, launch behavior, credential references, encrypted MCP values, Provider-only bindings or backend-restart application. The default theme remains wallpaper-slice (dark). The change does not introduce field-by-field autosave. OS-window-close handling and unrelated character-editor drafts are outside this scope.

Evidence

  • npm test: 388 passed at 2b2b38c.
  • npm run build: passed, including TypeScript and generated-configuration checks. The existing bundle-size advisory remains.
  • git diff --check: passed.
  • Browser preview of the production components with synthetic desktop IPC/runtime responses: dark/light at 1280x720 and narrow at 600x800, with no horizontal overflow.
  • Verified ACP held-save locking, Host-success round trip, failed-save draft retention and inline errors, removal cancellation, and scroll reset.
  • Verified MCP stdio/HTTP fields, accessible names, explicit Provider bindings, and save/reopen without echoing stored environment values.
  • Reproduced the opaque white iframe using the real bundled Pixi render page; verified dark rgb(0, 0, 0), light rgb(246, 247, 249), and live theme switching after matching the iframe’s normal color scheme. The render engine and its transparent canvas are unchanged. See the CSS color-scheme compositing rule.
  • Loaded the installed Kurisu KTX2 character pack (2026.10.07-color-crop-v3) in the production render page with production Electron CSS and synthetic render events. Visually checked idle, wind/hair and speaking clips against black; dark → light → dark retained the same iframe (one load), with animation progressing and no console warnings/errors. Local screenshots captured. This verifies asset rendering/compositing, not a live voice conversation or other character backends.
  • Discard accept/decline and pending-write navigation decisions are covered by automated tests, including app-sidebar/projection handlers.
  • Before/after screenshots were captured locally and delivered in the Codex review handoff; no private configuration, real credentials or preview fixtures are included in this PR.

No Python, dependency or live-service behavior changed. No live ACP agent or MCP server was launched during visual verification.

Final check

  • One requested desktop UI consistency pass
  • No speculative backend API, fallback or compatibility path
  • No secrets, local state, models or restricted assets included
  • Existing third-party notices and provenance preserved
  • Independent review and remote CI complete

@Lucas1479 Lucas1479 changed the title fix(settings): align ACP/MCP editors and protect unsaved changes fix(ui): align connection settings and correct dark render background Oct 10, 2026
@Lucas1479
Lucas1479 marked this pull request as ready for review October 10, 2026 16:15
@Lucas1479
Lucas1479 merged commit 09aecfb into main Oct 10, 2026
14 checks passed
@Lucas1479
Lucas1479 deleted the codex/settings-design branch October 10, 2026 16:15
Lucas1479 added a commit that referenced this pull request Oct 10, 2026
Prepare the source prerelease `v0.16.0-alpha.0` after #174, comparing
against `v0.15.2-alpha.0`. Synchronize Python/Electron versions, release
notes and source-package guides; run packaged settings-upgrade checks
against the previous release.

Release tracker: #176. Publication and final asset verification are
tracked separately from merging this PR.

Update compatible Electron tooling dependencies identified by the
release audit: concurrently/shell-quote, http-cache-semantics and joi.
Preserve the real Codex permission probe's terminal failure evidence and
correct its evidence note type.

Validation: 388 Electron tests and build; 11/11 native model-less
desktop checks; 17/17 extended role GUI checks; previous-release native
encrypted settings upgrade; native composer/startup settings GUI; 13
Windows lifecycle contracts; real Codex allow/deny (8/8 each) and
ongoing Chat/Work status/amendment (10/10); real Electron AUIP full
game/restart/resign/leave/history (37/37); four real GPU voice replies
with nonzero physical device writes. All 17 checks on the first
candidate passed, including three full Python shards, platform/profile
checks and extracted-source package startup. Final-head checks run after
recording acceptance and repairing obsolete probe observations.

The local full Python run retained two asset-junction setup failures;
the junctions were removed and affected suites passed on clean recheck.
This is not relabeled as a passing full local invocation. Full clean CI
is separate evidence. The Work probe now opens its Project through the
Session API and checks durable input receipts instead of the retired
steer_queued event; the audio probe observes the actual PortAudio stream
write boundary for complete and streaming playback. No production
routing, permissions or voice code was changed for these test repairs.

Outstanding dependency review: Pi 0.86.1's upstream shrinkwrap still
installs brace-expansion 5.0.9. A lockfile-only repair did not change
the installed version and was discarded. Remaining Electron moderate
findings are in the build tooling chain. Neither audit is described as
clean.

No uncommitted local voice configuration, credentials, runtime sessions
or external media are included. `docs/alpha-0.16-acceptance.md` records
failed attempts, corrections, outcomes and limits. Microphone/listening,
long-run stability and matched previous-release latency A/B are not
claimed. Publication uses a clean merged commit, source manifest and
verified SHA-256 assets.
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