Add SOL Inbound Monologue RSS reader extension - #449
Merged
Conversation
`<wpd-button>` and `<wpd-text-field>` render their native `<button>` and `<input>` inside a shadow root, and form association does not cross a shadow boundary. The submit button therefore had no form owner, so the light-DOM `<form data-feed-buddy-add-form>` never received a `submit` event: clicking "Add buddy" did nothing, and Enter in the URL field did nothing either, since implicit submission also needs a form-owned control. The whole add-feed path was unreachable. Drive submission the way the component kit's own `<wpd-form>` does — from the button's click and the field's `wpd-submit` event — keeping the native `submit` listener as a fallback for plain controls. Guard against a double-click firing two POSTs, and report an empty URL through the existing status region instead of silently doing nothing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015sKW1mu1SGg5k9oSHgxv5s
AllTerrainDeveloper
approved these changes
Jul 30, 2026
Three fixes to the SOL Inbound Monologue surfaces.
The extension had no row in OS Settings -> Apps & Icons. That list is
built from the dock-item payload plus `desktop_mode_register_icon()`
registrations, and a native window with `placement => 'dock'` is
neither -- so there was no way to move SOL to the wallpaper or hide
it. Register the launcher icon alongside the window, the pattern the
other bundled extensions already follow. The shell dedupes the two,
so the dock does not paint the target twice.
The widget title bar rendered fully transparent. The palette was
scoped to `.feed-buddy-reader, .feed-buddy-widget`, but the shell's
chrome header is a sibling of the body slot `.feed-buddy-widget`
mounts into, not a descendant. Custom properties only inherit
downward, so `background: var(--feed-buddy-blue)` on the chrome was
invalid at computed-value time and fell back to its initial value --
the wallpaper showed through behind the correctly white title text.
The card background failed the same way. Add the widget card to the
palette's selector list and route the chrome through two named
tokens carrying the same values `applyReaderTheme()` installs as
`--desktop-mode-titlebar-{bg,color}-focused`, so the widget and the
native window stay the same colour.
The title-bar controls had no hover state. The shell's own hover
rules are weaker selectors than the extension's resting rule, so the
resting navy won the cascade even while hovered, leaving only an
opacity lift that is invisible against a saturated blue bar. Restate
hover, active and focus-visible at the extension's specificity.
Close reads `--wpd-btn-danger-hover`, the same token the reader
window's close control resolves through as a `<wpd-window-button
danger>`, so both title bars redden identically under a desktop
theme that retints it.
Adds PHPUnit coverage for all three registration surfaces, including
that the icon reaches the desktop-icons payload the Apps & Icons tab
actually reads.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015sKW1mu1SGg5k9oSHgxv5s
# Conflicts: # .github/workflows/ci.yml # .wordpress-org/blueprints/blueprint.json # README.md # bin/package-extensions.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Adds SOL Inbound Monologue, a standalone Desktop Mode extension that presents RSS and Atom subscriptions as an inbound-only, turn-of-the-century buddy list and conversation reader.
SOLkeyboard easter egg.Why
SOL is a useful extension in its own right and a fairly complete dogfood test for the public window, widget, shared-store, request, confirmation, theme-token, and
<wpd-*>component APIs. It also gives the one-click demo an inhabited, immediately understandable extension surface without adding code to the core plugin.Implementation notes
Feed and state boundary
wp_safe_remote_get().Desktop integration and lifecycle
feed-buddy-reader,feed-buddy/buddy-list, andfeed-buddy/state.wp.desktop.fetch(),wp.desktop.confirm(),createSharedStore(),applyWindowTheme(), and native window channels instead of raw browser substitutes.Accessibility and visual direction
Testing
Repository gates:
npm run buildnpm run lintnpm run typechecknpm run test:js— 256 files, 2,499 testsnpm run test:php— 1,678 tests, 4,295 assertions, 3 skippedSOL-specific gates:
Packaging/install verification:
./bin/package-extensions.shunzip -tnode_modulesor nesteddisttree is presentwp-envsite and verified that it activates, registers its REST routes, and loads its Desktop Mode integrationc564d7bf9503efe17116f73a23a345c30d847dcde68aeb207ab418c542281312Reviewer QA
The normal PR preview exercises the core plugin but does not package standalone extensions. For SOL itself:
npm ci../bin/package-extensions.sh.dist/desktop-mode-feed-buddy.zipas a separate plugin.The in-app browser's network policy blocked agent access to the localhost visual QA site. Package activation, registrations, feed behavior, and UI lifecycle are covered by the checks above; the selected visual evidence and its taste review are included under
extensions/desktop-mode-feed-buddy/design/.The committed Blueprint intentionally references
trunk, so the one-click SOL demo becomes available after merge without leaving a feature-branch reference in the release configuration.