Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ fosse/
│ ├── composer.json
│ ├── sync-bundled.sh # Refresh bundled/ from upstream checkouts
│ └── bundled-excludes.txt # Rsync exclude list for sync-bundled.sh
├── sdd/ # Spec-Driven Development docs (per-feature)
├── sdd/ # Spec-Driven Development docs (per-feature; index in sdd/roadmap.md)
├── .github/
│ ├── workflows/ # tests.yml, linting.yml, e2e.yml, build-zip.yml
│ └── dependabot.yml
Expand Down Expand Up @@ -158,6 +158,8 @@ This project follows **WordPress Coding Standards (WPCS)** for all PHP code, enf

### SDD plan status tracking

`sdd/roadmap.md` indexes every SDD with one-line purpose, status, and Linear/PR pointers — start there to see what's been designed, what's shipped, and what's in flight.

`sdd/<feature>/plan.md` is the persistent record of what's done — not git log, not Linear. For new SDD plans going forward, each task carries a `- **Status**:` field, and the top of the file carries a `## Progress` checklist mirroring the per-task statuses. Keep both in sync as work progresses. Older plans (e.g. `sdd/bundled-backends/`) predate this convention and don't need to be retrofitted unless intentionally updated.

Status values:
Expand Down
39 changes: 39 additions & 0 deletions sdd/roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# SDD roadmap

Index of every Spec-Driven Development doc in this repo. The first stop for "what's been designed, what's shipped, and what's in flight."

Each row points at a directory under `sdd/`. The directory holds the long-form work (`spec.md` / `requirements.md` / `plan.md` / `implementation.md` / `implementation-notes.md` as appropriate); this table is just the index. Status reflects implementation, not whether the SDD doc itself is merged — for that, look at the PR column.

Status legend:
- **shipped** — implementation's primary deliverables are live on trunk
- **in-progress** — SDD merged; implementation is still landing in pieces
- **planning** — SDD doc itself isn't merged yet (see PR)

## On trunk

| SDD | Purpose | Status | Linear | PR(s) |
|-----|---------|--------|--------|-------|
| [bluesky-handle-setup](./bluesky-handle-setup/) | Claim your site domain as your Bluesky handle from inside WP admin (well-known route + DNS fallback + resolver verification). | in-progress | [DOTCOM-16801](https://linear.app/a8c/issue/DOTCOM-16801) | [#35](https://github.com/Automattic/fosse/pull/35) |
| [bluesky-native-publishing](./bluesky-native-publishing/) | Short-form WP posts publish to Bluesky as native posts (no link card); long-form keeps the teaser. Cross-network projector via `fosse_object_type`. | shipped | [DOTCOM-16795](https://linear.app/a8c/issue/DOTCOM-16795) | [#18](https://github.com/Automattic/fosse/pull/18), [#21](https://github.com/Automattic/fosse/pull/21) |
| [bundled-backends](./bundled-backends/) | Vendor `wordpress-activitypub` and `wordpress-atmosphere` into FOSSE and auto-load at bootstrap. The "rough starting point" before FOSSE owns its own UI. | shipped | [DOTCOM-16799](https://linear.app/a8c/issue/DOTCOM-16799) | [#44](https://github.com/Automattic/fosse/pull/44) and earlier |
| [destination-first-onboarding-wizard](./destination-first-onboarding-wizard/) | Revise the first-run wizard so Bluesky is a first-class destination, starting from "Where should your posts appear?". | shipped | (iterates [onboarding-setup-ux](./onboarding-setup-ux/)) | [#88](https://github.com/Automattic/fosse/pull/88) |
| [fosse-metrics-strategy](./fosse-metrics-strategy/) | Strategy + implementation for FOSSE usage metrics: cohorts A/B/C, layered tiers, recorder + Tracks/MC channel architecture, full event taxonomy. | planning | [DOTCOM-16879](https://linear.app/a8c/issue/DOTCOM-16879) (sub-issues DOTCOM-17027 → 17035) | [#41](https://github.com/Automattic/fosse/pull/41) |
| [long-form-bluesky-strategy](./long-form-bluesky-strategy/) | Replace the long-form link-card with a teaser-thread strategy that reads better on Bluesky while keeping WP canonical. | in-progress | [DOTCOM-16810](https://linear.app/a8c/issue/DOTCOM-16810) ([DOTCOM-16795](https://linear.app/a8c/issue/DOTCOM-16795) epic) | several |
| [onboarding-setup-ux](./onboarding-setup-ux/) | Unified FOSSE admin: Setup + Status pages, bundled-plugin admin entries hidden, extensible Connection_Provider abstraction. | in-progress | [DOTCOM-16793](https://linear.app/a8c/issue/DOTCOM-16793) (sub-epics 16800/16801/16802/16803) | several |
| [post-type-sync](./post-type-sync/) | Project AP's `activitypub_support_post_types` into Atmosphere via FOSSE's `Post_Types` projector. AP option stays canonical. | shipped | [DOTCOM-16875](https://linear.app/a8c/issue/DOTCOM-16875) | [#31](https://github.com/Automattic/fosse/pull/31) |
| [settings-page-scoped-actions](./settings-page-scoped-actions/) | Settings page splits shared federation settings from provider connect/disconnect actions; one save button scope. | shipped | — | [#83](https://github.com/Automattic/fosse/pull/83) |
| [unified-reactions-display](./unified-reactions-display/) | Surface ActivityPub and Bluesky reactions side by side on a single WP post via the bundled `activitypub/reactions` block. | in-progress | [DOTCOM-16894](https://linear.app/a8c/issue/DOTCOM-16894) | several |

## In flight (SDD docs not yet merged)

| SDD (proposed) | Purpose | Linear | PR |
|----------------|---------|--------|-----|
| `sdd/posting-ui/` | FOSSE-native posting UI (composer epic — defaults to `post_format = status`, enforces 300 graphemes). | [DOTCOM-16794](https://linear.app/a8c/issue/DOTCOM-16794) | [#90](https://github.com/Automattic/fosse/pull/90) |
| `sdd/deactivation-lifecycle/` | What happens to FOSSE's menu state and bundled-plugin handoff on deactivate / delete / standalone-coexistence. | [DOTCOM-16865](https://linear.app/a8c/issue/DOTCOM-16865) | [#92](https://github.com/Automattic/fosse/pull/92) |
| `sdd/bundled-backends-migration/` | Migration successor to `bundled-backends/`; replaces the bootstrap-shim with the next-gen loader. | [DOTCOM-16826](https://linear.app/a8c/issue/DOTCOM-16826) | [#93](https://github.com/Automattic/fosse/pull/93) |

## Maintaining this file

When you open a new SDD, add a row in the appropriate table. When an in-flight SDD merges, move it from "In flight" to "On trunk." When implementation ships, flip its status from `planning` or `in-progress` to `shipped`. The per-SDD `plan.md`'s `## Progress` checklist (per AGENTS.md) is still the source of truth for task-level status; this file just rolls it up.

The Linear "Radical Month: FOSSE" project ([b5435621](https://linear.app/a8c/project/radical-month-fosse-b5435621)) is where most of these SDDs live as parent epics; check there for the full work breakdown.
Loading