Skip to content

SDD: onboarding-setup-ux (requirements + spec + plan)#25

Merged
RCowles merged 4 commits intotrunkfrom
add/onboarding-setup-ux-sdd
Apr 23, 2026
Merged

SDD: onboarding-setup-ux (requirements + spec + plan)#25
RCowles merged 4 commits intotrunkfrom
add/onboarding-setup-ux-sdd

Conversation

@RCowles
Copy link
Copy Markdown
Contributor

@RCowles RCowles commented Apr 22, 2026

Add spec-driven development documents for the Onboarding & Setup UX epic (DOTCOM-16793). Covers the unified FOSSE admin menu, inline ActivityPub configuration, Bluesky OAuth bridge via Atmosphere, the connection-status dashboard, and the extensible Connection_Provider architecture for future protocol integrations.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds spec-driven development (SDD) documentation for the “Onboarding & Setup UX” epic, describing the intended unified FOSSE admin onboarding flow and an extensible provider architecture for ActivityPub + Bluesky setup/status.

Changes:

  • Add requirements document capturing UX goals, constraints, and linked issues.
  • Add a technical spec detailing the provider/registry architecture and OAuth bridge approach.
  • Add an implementation plan and implementation notes document for the epic.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
sdd/onboarding-setup-ux/spec.md Defines the target UX and technical approach (menu, providers, OAuth bridge).
sdd/onboarding-setup-ux/requirements.md Captures product requirements, constraints, and source references for the epic.
sdd/onboarding-setup-ux/plan.md Breaks implementation into sequenced tasks and verification steps.
sdd/onboarding-setup-ux/implementation-notes.md Records claimed deviations/limitations, but currently contains statements that don’t match the repository state.

Comment thread sdd/onboarding-setup-ux/implementation-notes.md Outdated
Comment thread sdd/onboarding-setup-ux/implementation-notes.md Outdated
Copy link
Copy Markdown
Contributor

@kraftbj kraftbj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partial review focused on requirements.md and implementation-notes.md; haven't done a deep pass on spec.md yet. Leaving inline comments below for discussion before I dive further.

Comment thread sdd/onboarding-setup-ux/implementation-notes.md Outdated
Comment thread sdd/onboarding-setup-ux/spec.md Outdated
Comment thread sdd/onboarding-setup-ux/requirements.md Outdated
Comment thread sdd/onboarding-setup-ux/requirements.md Outdated
Comment thread sdd/onboarding-setup-ux/requirements.md Outdated
Comment thread sdd/onboarding-setup-ux/requirements.md Outdated
Add spec-driven development documents for the Onboarding & Setup UX
epic (DOTCOM-16793). Covers the unified FOSSE admin menu, inline
ActivityPub configuration, Bluesky OAuth bridge via Atmosphere, the
connection-status dashboard, and the extensible Connection_Provider
architecture for future protocol integrations.

Updated after review feedback from @kraftbj:
- Upstream-first OAuth (PRs to Atmosphere, not wp_redirect intercept)
- Option projection pattern (fosse_ap_* with pre_option_* filters)
- Minimum viable AP config (actor mode + post types only)
- Bluesky handle setup friction acknowledged
- Upstream-first policy added to constraints
- implementation-notes.md reframed as forward-looking decisions
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread sdd/onboarding-setup-ux/implementation-notes.md Outdated
Comment thread sdd/onboarding-setup-ux/plan.md Outdated
Copy link
Copy Markdown
Contributor

@kraftbj kraftbj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Second pass after the force-push. requirements.md and spec.md both look good to go — every review point was addressed cleanly. plan.md still needs a full refresh to match the updated spec (stale wp_redirect intercept, missing option-projection steps, no upstream-PR task, outdated "Backfill" framing for Task 9). Copilot flagged the wp_redirect piece too — fully agree with that comment. Also agree with Copilot's suggestion to rename the implementation-notes.md H1 / intro so it doesn't mismatch the filename. Two tiny residual nits on spec.md inline below — optional, but while you're in there.

Resolving the threads that have been substantively addressed by the rewrite.

Comment thread sdd/onboarding-setup-ux/spec.md Outdated
Comment thread sdd/onboarding-setup-ux/spec.md Outdated
- Fix implementation-notes.md H1/intro to match filename
- Update plan.md: remove wp_redirect intercept from Task 4, add option
  projection steps to Task 3, add upstream Atmosphere PR task (new
  Task 4), renumber tasks, fix Backfill framing to Update SDD docs
- Update spec.md: remove OAuth bridge wording from Bluesky_Provider
  description and File Changes table, update Bluesky test description

Agent-Logs-Url: https://github.com/Automattic/fosse/sessions/476965db-29b3-4ece-a383-b66e0fd9b43d

Co-authored-by: RCowles <1421894+RCowles@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 22, 2026

Second pass after the force-push. requirements.md and spec.md both look good to go — every review point was addressed cleanly. plan.md still needs a full refresh to match the updated spec (sta...

All addressed in 8233743:

  • plan.md Task 4 is now a dedicated "Open upstream Atmosphere PRs" task (no wp_redirect intercept)
  • The Bluesky implementation is Task 5, depending on Task 4
  • Task 3 (AP_Provider) now includes the fosse_ap_* option + pre_option_* filter steps
  • Task numbering updated throughout; the final task is "Update SDD documentation" (not "Backfill")

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment thread sdd/onboarding-setup-ux/planned-decisions.md
Comment thread sdd/onboarding-setup-ux/plan.md
Comment thread sdd/onboarding-setup-ux/plan.md
Copy link
Copy Markdown
Contributor

@kraftbj kraftbj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two follow-ups from a comprehensive review pass (full inventory below; the rest all checked out — claims about bundled/ source verified accurate, upstream-first honored, structural parity with sdd/bundled-backends/, AGENTS.md compliance clean).

  1. AP menu suppression scope — plan currently hides only AP's Settings submenu. AP also registers a top-level Dashboard page (activitypub-social-web) and two Users submenus (activitypub-followers-list, activitypub-following-list). Since FOSSE is claiming the full admin surface for federation setup, those should all be hidden too — we can build FOSSE-owned equivalents later. Start clean. Details inline.
  2. Deactivation/deletion story — deliberately deferred out of this epic. Tracked in DOTCOM-16865. A one-line note under "Known Limitations" in planned-decisions.md pointing at that issue is enough.

Everything else is fine. Ship once these are in.

Comment thread sdd/onboarding-setup-ux/requirements.md Outdated
## Requirements

1. **Single top-level FOSSE admin menu** replacing the need to find AP under Settings and Atmosphere under Settings separately. Two sub-pages: Setup and Status.
2. **Hide bundled plugins' native admin submenus** from the Settings menu so users are not confused by duplicate surfaces. Pages remain accessible by direct URL for power users.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expand the scope here — not just the Settings submenu. Verified against bundled/activitypub/includes/wp-admin/class-menu.php:

  • Line 28 — AP's Settings submenu (activitypub, under options-general.php). Already handled.
  • Lines 42-49 — AP registers a top-level Dashboard page (activitypub-social-web) when activitypub_reader_ui is on. Not handled.
  • Lines 57-79 — AP registers two Users submenus (activitypub-followers-list, activitypub-following-list). Not handled.

FOSSE is claiming the unified admin surface for federation setup, so all of these should be hidden for consistency. We can add FOSSE-owned equivalents (follower lists, dashboard) later when we have a story for them. Better to start with one clean surface and build up than ship with three disjoint entry points.

Suggested requirement rewording: "Hide all bundled-plugin admin entries (Settings submenu, top-level Dashboard page, Users submenus) so FOSSE is the single admin surface for federation setup. Pages remain accessible by direct URL for power users."

Comment thread sdd/onboarding-setup-ux/plan.md Outdated
- **Do**:
1. Create `Menu` class with `register()` static method that fires `fosse_register_providers`, calls `register_hooks()` on available providers, hooks `admin_menu` at priority 9 (register menu) and 99 (hide bundled menus), and hooks `admin_enqueue_scripts` for CSS.
2. `add_menu_page('fosse')` with `dashicons-share` icon. Two submenu pages: Setup (slug `fosse`) and Status (slug `fosse-status`).
3. `remove_submenu_page('options-general.php', 'activitypub')` and `remove_submenu_page('options-general.php', 'atmosphere')` at priority 99.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Task 2 step 3 should expand with the broader menu scope. The current plan only removes the two Settings submenu entries:

remove_submenu_page('options-general.php', 'activitypub')
remove_submenu_page('options-general.php', 'atmosphere')

Add removals for AP's top-level Dashboard and Users submenus:

remove_menu_page('activitypub-social-web')
remove_submenu_page('users.php', 'activitypub-followers-list')
remove_submenu_page('users.php', 'activitypub-following-list')

(Pages remain registered, so direct-URL access still works for power users.)

Atmosphere's admin is a single Settings submenu, so no additional removal there.

Verify step should add: "Playground: no AP or Atmosphere entries appear in Settings, Users, or the top-level menu."

- **Decision**: `Menu::register()` fires `fosse_register_providers`, then iterates registered providers and calls `register_hooks()` on each. Provider hooks (like `admin_post_*` handlers) are only registered in admin context.
- **Reason**: Avoids registering admin-post handlers on front-end requests. The `is_admin()` guard in `fosse.php` already limits this to admin context, but having `Menu::register()` control the lifecycle is cleaner.

## Known Limitations (Expected)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a deferral note under "Known Limitations (Expected)" covering the deactivation/deletion story:

Deactivation/deletion behavior is deferred. This epic does not define what happens to fosse_ap_* options or menu state when FOSSE is deactivated or deleted, nor how FOSSE behaves if ActivityPub or Atmosphere are also installed as standalone plugins. Tracked separately in DOTCOM-16865 so the decision happens before production distribution.

The option-projection pattern (FOSSE stores fosse_ap_*, projects via pre_option_activitypub_*) is clean for the "FOSSE is active" case but needs a companion story for lifecycle events. Not blocking for MVP.

Expand AP menu suppression scope to cover all bundled-plugin admin
entries (top-level Dashboard page, Users submenus) not just Settings.
Add deactivation/deletion deferral note pointing to DOTCOM-16865.
Update Bluesky_Provider descriptions to reflect upstream-first approach.
@RCowles RCowles merged commit fe2440c into trunk Apr 23, 2026
13 checks passed
@RCowles RCowles deleted the add/onboarding-setup-ux-sdd branch April 23, 2026 16:39
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.

4 participants