From 97727242689d052338ed53514d58909eff2b5c36 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 12 Oct 2026 15:14:49 +0100 Subject: [PATCH] docs: replace PRD with Headless revision 4, add direction update to implementation guide, update changelog Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01BDvcAvuLeGQbo78PAiYWnP --- CHANGELOG.md | 4 + IMPLEMENTATION.md | 69 +- PRD.md | 1748 ++++++++++++++------- docs/prd-assets/headless-architecture.png | Bin 0 -> 269729 bytes 4 files changed, 1245 insertions(+), 576 deletions(-) create mode 100644 docs/prd-assets/headless-architecture.png diff --git a/CHANGELOG.md b/CHANGELOG.md index c570d00..aa016b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ The project is pre-1.0. Versions below `1.0.0` are internal milestones, not publ ### Added +- `docs/prd-assets/headless-architecture.png`, the architecture diagram used in the PRD. +- Design reference: Figma file "Wursor - Experiment" (Design system, Product Design, Marketing site and Brand Guideline pages). - **Monorepo workspace** — `pnpm` workspace (`api`, `web`, `e2e`), root `package.json` / `pnpm-workspace.yaml` / `tsconfig.base.json`, and a PHP `plugin` package (`composer.json`). Empty packages by design (see [ADR 8](docs/decisions/0008-empty-packages-not-stubs.md)). - **Phase 0 spike records** under `spikes/`: - `pairing-threat-model.md` — pairing protocol: 8+ char code, 5-min TTL, 5-attempt lockout, HMAC, scoped `read`/`deploy` tokens, threat table T1–T10. @@ -24,6 +26,8 @@ The project is pre-1.0. Versions below `1.0.0` are internal milestones, not publ ### Changed +- **PRD.md replaced with Wursor PRD: Headless, revision 4** (October 10, 2026). Wursor owns its control plane (Next.js app, Wursor API, Conductor), WordPress is the first target platform behind a platform interface, and a site can live on Wursor Cloud, on a connected WordPress, or be built here and published, with moves in both directions. Adds access levels (Full access, Content only), evidence-bound approval, and the PX requirement family for the designed surfaces. The v2.0 text (August 13, 2026) remains in git history at `e9de6ba`. +- **IMPLEMENTATION.md** gains section 0, "Direction update (October 2026)": what changed, four decisions to ratify (Next.js versus Vite, sign-in method, Cloud provisioning, wording of the "no diff" rule), how existing sprints map, new work steps A to I, and updated Phase 1 exit criteria. Sprints 1 to 8 are unchanged and marked as superseded where they conflict. - **Repository identity** — renamed from `originmain` to `wursor`; description set to the product tagline; stale homepage cleared; topics `wordpress`, `ai`, `agent` added (see [ADR 9](docs/decisions/0009-repo-rename.md)). - **PRD / IMPLEMENTATION** — expanded risk register (R1–R14 with mitigations and sprint ownership), media-proxy and capability-tier decisions locked, pairing and warm-pool details corrected. - **README / AGENTS.md** — repo layout and Phase 0 gate documented; status updated to reflect the workspace existing while product code remains gated. diff --git a/IMPLEMENTATION.md b/IMPLEMENTATION.md index f9c2611..ba88732 100644 --- a/IMPLEMENTATION.md +++ b/IMPLEMENTATION.md @@ -1,13 +1,14 @@ # Implementation Guide — Wursor v2 -**Version:** 2.0 -**Source:** [PRD.md](./PRD.md) v2.0 +**Version:** 2.1 (direction update, October 12, 2026) +**Source:** [PRD.md](./PRD.md) Headless revision 4 **Method:** Test-driven development (TDD) — every module is written against its tests before its implementation. --- ## Table of Contents +0. [Direction update (October 2026)](#0-direction-update-october-2026) 1. [Architecture Overview](#1-architecture-overview) 2. [Project Structure](#2-project-structure) 3. [Build Phases](#3-build-phases) @@ -28,6 +29,70 @@ --- +## 0. Direction update (October 2026) + +[PRD.md](./PRD.md) is now **Wursor PRD: Headless, revision 4**. It replaces the v2.0 PRD (August 2026) that the sprints below were written against. The Phase 0 spikes, the pairing model, the semantic tool schema and the golden harness still stand. What changes is the shape of the product around them. Read this section first. Where it conflicts with a sprint below, this section wins until the sprint is rewritten. + +### 0.1 What changed + +| Area | v2.0 (sprints below) | Headless rev 4 | PRD | +| :--- | :--- | :--- | :--- | +| Control plane | Wursor API and Postgres, with WordPress as the target | Wursor owns accounts, projects, tasks, approvals, policy and audit log. Nothing product-related is stored in a customer site. | HL-02 | +| Frontend | React + Vite | Next.js (App Router) with a server layer that holds tokens. The browser gets only a session cookie and a short-lived stream token. | HL-01, HL-04 | +| Identity | In-memory user store, session token | Wursor-owned sign-in (emailed 8-character code as designed, passkeys), authorization code flow with PKCE | HL-03, PX-01, PX-02 | +| Platforms | WordPress plugin only | A platform interface (connect, describe, back up, copy, apply, check, roll back, export, import, provision) with WordPress as the first implementation and a fake target for tests | HL-09 to HL-11 | +| Where a site lives | Connected WordPress only | Wursor Cloud, connect my WordPress, or build here and publish. Moves work both ways. | SH-01 to SH-16 | +| Access | Capability tiers in the plugin | Two named levels, Full access and Content only, shown on every site and enforced before a run starts | SH-06 | +| Approval | Approve in preview | Approval bound to evidence hashes. A visible Publish button (and the P shortcut) opens the approval step and never releases directly. | PX-03, SH-10 | +| Surfaces | Chat, preview, approve | Home, Sites, Activity, Board with a calendar view, Settings, command palette, system states, mobile and dark parity | PX-04 to PX-12 | + +### 0.2 Decisions to ratify before building on them + +These conflict with existing ADRs or code and need a written decision (add ADRs 0018 onward) before work starts. + +1. **Next.js versus React + Vite.** [ADR 0011](docs/decisions/0011-fastify-react-stack.md) chose Fastify and React. Headless rev 4 needs a server layer for token handling. Options: adopt Next.js, or keep Vite and add a small backend-for-frontend inside the API. Decide before more of `web/` is built. +2. **Sign-in method.** The design uses an emailed 8-character code. HL-03 still says passkey or emailed link (PRD D-HL-13). +3. **Who provisions Cloud sites.** WeOwn Cloud infrastructure or a partner behind the same interface (PRD D-HL-7). Do not build the hosting plane until this is decided. +4. **"The user never sees a diff" (AGENTS.md rule 3).** The PRD keeps technical detail one tap away in an expandable section for owners who want it. Confirm the wording of the rule. + +### 0.3 How the existing sprints map + +| Existing work | Status under the new direction | +| :--- | :--- | +| Phase 0 spikes and golden harness | Keep as they are. | +| Sprint 1, web app scaffold and sandbox orchestration | Keep the sandbox work. Revisit the scaffold after decision 0.2.1. | +| Sprint 2, WordPress plugin connector | Keep. Extend `site-info` to report the access level (Full access or Content only) and the operations the site supports. Wrap it behind the platform interface. | +| Sprint 3, agent orchestrator and playbooks | Keep. Add the pre-run access check so a task that needs more access stops in the composer before any run starts. | +| Sprints 4 and 5, content and design playbooks | Keep. Design playbooks gain the new-site path: a five-question brief and three design directions. | +| Sprint 6, deploy and rollback | Extend deploy into a release with evidence, an approval bound to hashes, and a rollback point. Add the Publish entry point. | +| Sprints 7 and 8, integration and alpha | Rewrite the exit criteria around the three starting paths (below). | + +### 0.4 New work, in order + +| Step | Work | PRD | +| :--- | :--- | :--- | +| A | Platform interface and a fake target, with one contract suite that runs against both the WordPress target and the fake. Dependency check that blocks platform-specific code outside platform packages. | HL-09, HL-11 | +| B | Access levels and capability discovery in the plugin and the API. | SH-06 | +| C | Identity: sign-up, sign-in, verify states, workspace naming, then Home. | PX-01, PX-02 | +| D | Evidence-bound approval and the Publish entry point on desktop and mobile. | PX-03, SH-10 | +| E | New-site path on Cloud: brief, three design directions, build on a safe copy, preview, approval. | SH-03 | +| F | Hosting plane: provisioning, temporary address, backups, domain connection. Blocked on 0.2.3. | SH-04, SH-12, SH-14 | +| G | Moves in both directions as releases, with dry run, page-by-page comparison and rollback. | SH-08 to SH-11 | +| H | Surfaces: Home, Sites, Activity, Board with calendar, Settings, command palette, system states. | PX-04 to PX-08 | +| I | Mobile and dark parity audits, accessibility scan, touch-target and contrast checks. | PX-09 to PX-12 | + +Each step follows the TDD rules in section 7. Hosting (F and G) is the largest new commitment and the PRD's rollout plan puts hardening at about 46 weeks, against about 32 for the previous plan. + +### 0.5 Updated Phase 1 exit criteria + +A first-time owner, using each of the three starting paths, reaches a first preview without help (target: at least four of five testers). A connected site reports its access level, and a request that needs more access is stopped before a run starts. An approval cannot release a change unless it matches the evidence hashes. The prototype's usability targets are still hypotheses until tested with real owners. + +### 0.6 Design reference + +The screens live in one Figma file ("Wursor - Experiment") with five pages: Cover, Design system, Brand Guideline, Product Design and Marketing site. It holds about 650 product frames in light and dark, desktop and mobile, built from about 94 component sets. PRD section 26 maps screens to requirements and lists the known design gaps. + +--- + ## 1. Architecture Overview ``` diff --git a/PRD.md b/PRD.md index 1302eb6..75166ac 100644 --- a/PRD.md +++ b/PRD.md @@ -1,697 +1,1297 @@ # Product Requirements Document -**Wursor** +> **Wursor PRD: Headless, revision 4** (October 10, 2026). This replaces PRD v2.0 (August 13, 2026, the Hybrid plugin-and-sandbox model); the previous text is in git history at `e9de6ba`. Requirement IDs: AG, SB, VR, RV, RL, MM, FL, CN, ID, AU, UX (shared), HL, SH, PX (this pattern). The Word original is kept by the product lead. -The Agentic WordPress Management Platform +**Wursor PRD: Headless** -*Just describe what you want. Wursor does the rest.* +Wursor delivered as a Next.js application with its own control plane, working on WordPress sites first -| Field | Value | -| :--- | :--- | -| **Version** | 2.0 | -| **Date** | August 13, 2026 | -| **Author** | Patrick (Product Lead) | -| **Status** | Draft — Internal (non-technical-first pivot; Phase 0) | -| **Repo** | Wursor/wursor | -| **Classification** | Confidential | -| **Supersedes** | v1.3 (engineer-first; desktop shell; Tauri + Monaco) | +| **Item** | **Detail** | +|---|---| +| Document | Standalone product requirements for the Headless delivery pattern (revision 4) | +| Date | October 10, 2026 | +| Status | Draft. Numeric targets are hypotheses. | +| Revision note | Revision 4 brings the document in line with the finished screen-level design: sign-in and its verify steps, the Publish action, the Board with a calendar view, the command palette, system states, mobile and dark parity, and the marketing site. It adds the PX requirement family and section 26. Revision 3 adds where a site lives. A person can start a brand-new site on Wursor Cloud (hosted on WeOwn Cloud), connect a WordPress site they already have, or build in Wursor and publish to their own WordPress, and can move a site in either direction. Revision 2 made the control plane Wursor-owned and WordPress the first target platform. | +| Companion documents | Wursor PRD: Unified (decision framework and roadmap, not yet updated for revision 2) and Wursor PRD: Hybrid App Shell | +| Requirement IDs | Shared: AG, SB, VR, RV, RL, MM, FL, CN, ID, AU, UX. Pattern: HL-01 to HL-19, SH-01 to SH-16, PX-01 to PX-14 | ---- +## Executive summary -## 1. Executive Summary +This document specifies Wursor as a Headless product. Wursor is a web-based agentic development environment: a person describes work in plain language, an agent carries it out in an isolated copy of their site, and the person reviews evidence before anything reaches the live site. The first platform it works on is WordPress. The aim is a product that a non-technical site owner can use without knowing how any of it works, and that can later extend to other kinds of sites without being rebuilt. -Wursor is a web-based platform that lets anyone manage their WordPress site by simply describing what they want. No code, no wp-admin, no hosting jargon. The user types "make my homepage look more modern" or "add a booking form" or "change the site to a two-column layout" — and Wursor does it. +That aim drives one decision that differs from the earlier version of this document. In revision 1, WordPress stayed the system of record for users, projects and approvals, with a thin adapter that could be replaced someday. That would have left Wursor dependent on WordPress for its own accounts and data, which is the opposite of what is wanted. In this revision **Wursor owns its control plane**: its own database, its own sign-in, and its own API. WordPress sites are **target platforms**. Wursor connects to them through a small connector plugin, works on test copies of them, and applies approved changes to them, but it keeps no product data inside them. -Under the hood, Wursor spins up a secure cloud sandbox (an isolated copy of the user's site), instructs an AI agent to make the changes, and shows the user a live preview. If the user likes it, Wursor deploys the changes to the real site. If they don't, it resets. +The product is a Next.js application. A server-side layer inside it keeps sign-in tokens away from the browser. The Wursor API, backed by PostgreSQL, holds users, organizations, projects, tasks, approvals, policies and the audit log. A separate Conductor service runs the agents, enforces policy, streams progress to the browser and assembles evidence. Everything that touches a customer site goes through a **platform interface**, and WordPress is its first implementation. -The product is a web app. The user installs one WordPress plugin to connect their site. Everything else happens in the browser. No Docker, no terminal, no filesystem access. +Revision 3 adds a second decision: **where a site is built is separate from where it lives.** Every site is built, previewed, approved and recorded in Wursor, on a safe copy. After that, it lives in one of two places. It can be hosted on **Wursor Cloud**, which runs on WeOwn Cloud and handles the domain, certificate, updates and backups. Or it can live on a **WordPress the customer already has**, connected by WordPress.com sign-in or by the Wursor connector plugin. First-time owners start on Wursor Cloud. Owners with a site connect it. Owners with an empty WordPress build in Wursor and publish there. A site can move in either direction at any time, with a verified copy, an approval and a rollback point, and with the exit stated in plain words from the first screen. -**The opportunity:** become the default way non-technical WordPress site owners make changes to their sites — replacing the agency phone call, the frustrating wp-admin search, and the fear of breaking something. +Revision 4 adds no new architecture. It records what has been designed. The product now exists as a screen-level prototype of about 650 frames in four matching sets (light and dark, desktop and mobile), built from one shared component library, with a marketing site of six pages in the same four sets. Every screen is reachable from the landing page. Section 26 maps the screens to requirements, the PX family turns what the design shows into testable statements, and the design gaps that remain are listed in 26.4. Nothing in the prototype has been tested with real owners yet, so every usability target in this document is still a hypothesis. ---- +| | +|---| +| **What this costs.** Building identity, sessions and the control-plane API takes longer than reusing WordPress for them, and hosting sites turns part of Wursor into an operations business: updates, security, backups, abuse handling and an availability promise. The rollout plan in section 22 reaches hardening in about 46 weeks, against about 32 for the Hybrid plan. The platform interface is also designed from a single example, so expect to revise it when a second platform arrives. | -## 2. Problem Statement +| | +|---| +| **Decision for leadership.** Operating a hosting service is a commitment that outlives the product launch. Section 5.3 and decision D-HL-7 set out the alternative of provisioning through a partner for the first release. The recommendation is to launch Cloud on WeOwn Cloud infrastructure only if WeOwn can staff on-call, security patching and abuse handling from the first customer, and otherwise to start with partner provisioning behind the same interface (SH-16). | -### 2.1 WordPress is powerful, but it still requires technical skill +| | +|---| +| **Who should read what.** Product and design: sections 1 to 5, 16 and 26. Engineering: sections 10 to 15 and 19 to 22. Hosting and operations: sections 5.3, 11.5 to 11.9, 21 and 23. Security: sections 5, 12 and 18. Leadership: this summary, section 23 (risks and exit ramps) and Appendix B (future research). | -Millions of businesses run on WordPress. The owners are real estate agents, restaurant owners, consultants, dentists, e-commerce operators. They are not developers. They are not designers. They are people who need a website that works. +## 1. Product definition -When they need to change something — update the layout, add a feature, fix a broken page — they have three options today: +Wursor is a web-based agentic development environment. It belongs to the same family of products as Claude Code, Codex and Cursor: a person describes the work they want done, an agent plans and carries it out inside an isolated runtime, and the person reviews the result before anything reaches production. What makes it different from those tools is that it is built around a particular kind of site. It begins with WordPress, understands block themes, content-only editing, plugin and theme updates and the particular ways a WordPress site can break, and builds its verification and review steps around those facts instead of treating a site as just another code repository. -1. **Learn wp-admin** — navigate a 20-year-old admin interface designed for content publishers, not business owners -2. **Call an agency** — wait days, pay hundreds, and hope the result matches what they described -3. **Use a hosted builder** — leave WordPress entirely for Wix/Squarespace, losing their SEO, content, and investment +It is also built so that the person using it does not need to be technical. The people who commission and approve work are often site owners, not developers. The interface therefore speaks in outcomes and evidence, and keeps code, hashes and logs one step deeper for those who want them. -Each option is painful. None of them respects the user's time or expertise. +### 1.1 The three jobs the product must do -### 2.2 The toolchain is designed for engineers +- **Lane A, editable sites.** Create attractive, functional websites that non-technical people can safely edit afterwards, starting from a short brief and a choice of design directions. The agent produces a block theme, patterns and content, and the product verifies that an editor can actually change the content without breaking the design. The finished site can live on Wursor Cloud or on the owner's own WordPress. -The WordPress ecosystem tools — Local WP, wp-env, WP-CLI, Git, staging sites — are all built for developers. A business owner doesn't know what a staging site is. They don't want to know. They want to see their change and click "accept." +- **Lane B, web apps and PWAs.** Create and update web applications, from heavy-functionality tools to installable progressive web apps. -### 2.3 The gap is trust, not technology +- **Lane C, existing sites.** Manage sites that already run in production. This lane is about adoption and risk: the agent first learns the site, then proposes changes as replayable scripts that are tested on a copy before anyone applies them to the live site. -The technology to have an AI agent edit a WordPress site exists today. The gap is safety: the user needs to trust that the agent won't break their site. That's why the core product is the sandbox + preview + approve loop — not the agent itself. The agent is invisible. The sandbox is the safety guarantee. +### 1.2 Positioning in one paragraph -### 2.4 Fragmentation is the user's problem, not the tool's +General coding agents can already write a WordPress plugin or theme if you give them a repository. They are weak at everything around the code: provisioning a realistic runtime, proving that the editor experience still works, deciding whether a change to a live site is safe, remembering how a particular site was built, and showing a non-developer enough evidence to approve with confidence. Wursor sells that surrounding system. If a general agent with a good starter kit can match its results, the product has no reason to exist, which is why the plan includes an explicit baseline comparison and kill criteria in the roadmap. -A business owner might use: -- A page builder (Elementor, Beaver Builder) -- Several plugins (WooCommerce, SEO, forms, booking) -- A custom theme -- Third-party services (Mailchimp, Stripe, Google Analytics) +### 1.3 Why web-based rather than a terminal or desktop tool -Today, changing any of these requires learning each tool's interface. Wursor abstracts all of them behind a single chat interface. The agent knows how to use them. +- **Shared state.** A task, its preview and its evidence need to be seen by more than one person. A web product gives every participant the same link. ---- +- **Long-running work.** Agent runs can last tens of minutes. They have to continue on the server after the browser closes and be resumable from a phone. -## 3. Vision & Opportunity +- **Runtime access.** The product needs to start real WordPress runtimes in the cloud. A browser is the natural place to attach to them and to show their previews. -**Vision:** Open Wursor, type what you want your site to do, preview it, approve it. That's it. WordPress becomes as easy as describing it. +- **Approvals.** Review and approval are the point where responsibility transfers, and they need an authenticated, auditable surface that a terminal cannot easily provide. -Wursor is not a page builder. It's not a hosting platform. It's not a content editor. It's the **agentic layer** that sits on top of any WordPress site and lets you control it with natural language. +### 1.4 Non-goals -**The opportunity:** the entire WordPress ecosystem (43% of the web) has no native agentic interface. The closest alternatives are: -- AI assistants inside page builders (lock you into their builder) -- General AI coding tools (require technical skill) -- Agency retainer relationships (expensive, slow) +- Wursor is not a general-purpose coding agent and will not try to support arbitrary stacks on equal terms. Lane B apps may use other frameworks, but the product optimizes for WordPress-adjacent work. -Wursor is the first product that gives non-technical site owners a direct, safe, natural-language interface to their WordPress site — without requiring them to learn any tool. +- Wursor Cloud is not a general-purpose host. It runs WordPress sites that are built and managed through Wursor. It does not host email, other applications or sites that Wursor does not manage, and it does not sell domains in the MVP. ---- +- It is not a visual page builder. Humans keep using the WordPress editor for content; the agent produces structure that makes that editing safe. -## 4. Target Users & Personas +- It does not promise autonomous production changes. Every change that touches a live site, wherever it lives, passes through an approval bound to evidence. -### 4.1 Primary — WordPress Site Owner (non-technical) +- It does not train or fine-tune models. It routes to model providers through a gateway. -Runs a business on WordPress. Has admin access but doesn't know how to use it beyond basic post editing. Hires an agency for anything non-trivial. Wants to make changes without a phone call. Examples: dentist, real estate agent, restaurant owner, e-commerce store operator. +- Wursor does not support platforms other than WordPress in the MVP or V1. The architecture leaves room for them (section 11), and what is known and unknown about them is listed in Appendix B. -**Out of scope for v1:** content-only users who mainly need AI to draft posts. Wursor is for *doing* — changing the site, not just writing. +- Wursor does not require customers to use WordPress for anything except the sites they want it to work on, and does not require them to host with Wursor. Their Wursor account, projects and approvals live in Wursor either way. -### 4.2 Secondary — Agency Client (delegator) +### 1.5 Where a site lives: the three starting paths -Has an agency but wants to make small changes themselves without waiting for a ticket. Wursor becomes the "self-serve" layer on top of the agency-managed site. +A site has two separate facts about it: where it is built and where it lives. It is always built in Wursor, on a safe copy, with a preview, an approval and a record. It lives either on Wursor Cloud or on a WordPress the customer connects. Keeping these apart is what lets one product serve a first-time owner with no site and an agency with forty. -### 4.3 Tertiary — Technical WordPress Developer (future) +| **Starting path** | **For whom** | **Where the site lives** | **First run** | +|---|---|---|---| +| Start on Wursor Cloud | A first-time owner with no WordPress yet. This is the default for people who say they have no site. | Wursor Cloud, on WeOwn Cloud. Domain, certificate, updates and backups are handled. | Brief, three design directions, first build on a safe copy, approve, go live at a temporary address, connect a domain. | +| Connect my WordPress | An owner with a live site, hosted anywhere. | Their own WordPress, unchanged. | Connect, read-only look at the site, then the first small change on a safe copy. | +| Build here, publish to my WordPress | An owner with an empty WordPress, or a new WordPress.com site, who wants to keep hosting there. | Their own WordPress. | The same as the Cloud path up to approval, then publish to their site as a release with a rollback point. | -The same product, with advanced features unlocked later. For now, the product is designed for non-technical users. Engineers can use it too, but they're not the target. +The second and third paths are the same connection. They differ only in the first run: one starts from a site that exists, the other from a brief. A person can also move later. **Move to my own WordPress** takes a Cloud site out to a WordPress the person owns. **Host on Wursor Cloud** brings a connected site in. Both moves are in the first release, because a one-way door would make Cloud a lock-in, and an easy exit is part of why customers can trust the entry. ---- +**What "my WordPress" means** -## 5. Product Principles +- **A WordPress.com site.** The person signs in with WordPress.com (OAuth) and chooses a site. This is the shortest path and works for people who have no technical knowledge of hosting. -1. **The user describes what they want; the agent does the rest.** No settings screens, no toggles, no configuration. -2. **The live preview is the only proof.** The user never sees a diff, a terminal, or an error log. They see their site with the change applied. -3. **Safe by default.** The agent never touches the live site until the user explicitly approves. Sandbox isolation is non-negotiable. -4. **Every change is reversible.** If the user doesn't like the result, they reject it. The live site is unchanged. If they approved and regret it, one-click rollback. -5. **Speed is the UX.** Boot the sandbox fast, show the preview fast, deploy fast. The user waits seconds, not minutes. -6. **The agent knows WordPress.** The user doesn't need to know what a theme, plugin, hook, or shortcode is. The agent does. -7. **Non-technical first.** Every feature is designed for the person who doesn't know what a file is. Technical features are added later, not instead. +- **A self-hosted WordPress on any host.** The person installs the Wursor connector plugin and enters a one-time code. This works on shared hosts, managed WordPress hosts and cloud servers alike. ---- +- **A site where the plugin cannot be installed.** Some hosts and plans disallow plugins. In V1, an application password gives Wursor limited, revocable access to content. -## 6. Core Concepts & Mental Model +**Full access and Content only** -### 6.1 The loop +What Wursor can do on a connected site depends on the access it is given. With **Full access** it can change themes, plugins, settings and content. With **Content only** it can change pages, posts, media and menus, and nothing deeper. Content moves almost everywhere. Theme and plugin changes need deeper access, and some hosts and plans do not allow it. Wursor shows the level on every site and explains it in plain words, so nobody is surprised by what the agent cannot do. A Cloud site always has Full access, because Wursor runs it. A custom-code Cloud site may not move cleanly to a Content-only destination, and Wursor says so before the move starts (SH-11). -The user's entire interaction with Wursor is a single loop: +## 2. Problem, insight and timing -``` -Describe → Preview → Approve -``` +### 2.1 The problem -That's it. There is nothing else. No dashboard, no settings, no configuration. The user lands on a chat interface, types what they want, sees a preview of their site with the change, and clicks approve or reject. +People who build and maintain websites and apps face three recurring problems that agents make faster to attempt but not safer to finish. First, agent output is hard to trust: a change can look right in a screenshot and still break checkout, the editor, accessibility or a plugin interaction. Second, site work is stateful and site-specific, so a generic agent keeps rediscovering the same facts about a site and sometimes makes confident changes that conflict with them. Third, the people who must approve the work are often not the people who can read the diff, so approval turns into a leap of faith. -### 6.2 The sandbox +### 2.2 Contrarian insights that shape the product -Every task gets an ephemeral, isolated copy of the user's WordPress site — a **sandbox**. The sandbox is a full WordPress instance running in Wursor's cloud infrastructure, pre-loaded with the user's active theme, plugins, and content. +1. **The scarce resource is trust, not generation.** Models already generate competent themes and plugins. What teams lack is a cheap way to know a change is safe. The product spends more of its engineering effort on verification, evidence and rollback than on prompting. -The agent works inside the sandbox. It can install plugins, edit files, change settings, modify the database — anything. The live site is never touched. +2. **Both ways in matter, and they are different markets.** Existing sites are the larger and harder market: the risk of a mistake is real and the agent's main job is restraint, so Lane C is a first-class lane. New sites are the way in for first-time owners, and generating a site is crowded and demos well, so Wursor does not compete on the first draft. It competes on what happens next: the same safe loop of copy, preview, approval and rollback for every later change, wherever the site lives. -When the user approves, the sandbox changes are deployed to the live site via the Wursor plugin. When the user rejects, the sandbox is destroyed. Nothing persists. +3. **Approval should be bound to evidence.** An approval that is not tied to a specific diff and a specific verification result can be invalidated silently by a later change. In Wursor an approval names the hashes of both, and changing either voids it. -### 6.3 The plugin +4. **The control plane should be owned, small and boring.** If a product's accounts, approvals and audit trail live inside the platform it manages, the platform's choices become the product's problems. Wursor keeps its own control plane and treats every platform as a place to work, not a place to live. -A lightweight WordPress plugin that the user installs once. It does two things: -1. **Connects the site** — provides a secure API for Wursor to read site info (themes, plugins, content) and deploy changes -2. **Receives deploys** — applies the sandbox changes (file updates, database changes, plugin installs) to the live site +5. **A general agent plus a good starter kit is the real competitor.** The product has to beat that baseline on measured outcomes, or it should not be built. -The plugin is the only thing the user ever installs. It requires no configuration beyond the initial connection token. +6. **Where a site is built and where it lives are separate questions.** Most tools fuse them: you build in the tool and you are hosted by the tool, or you are in your own host and the tool is a plugin. Separating them lets a first-time owner start with no setup, lets an owner with a site keep it where it is, and makes leaving cheap. An easy exit is a reason to trust the entry, and it fits WeOwn's position that customers should own their stack. -### 6.4 Playbooks +### 2.3 Why now -Every user request maps to a **playbook** — a structured, multi-step agent workflow. The user doesn't know about playbooks. They just see "I'll work on that now." But internally, each request is routed to a specific playbook: +Several pieces of platform groundwork arrived in the last year for the first target platform. WordPress 6.9 introduced the Abilities API, which gives plugins a standard way to declare what an agent may do, and the MCP Adapter (version 0.7.0 when this research was done) exposes those abilities to agent clients. WordPress 7.0, released on May 20, 2026, added a Connectors API and a DataViews-based admin. It also exposed a weakness: connector keys stored in the database are unencrypted and readable by any plugin, which is one reason this design keeps keys out of customer sites entirely. In parallel, isolated micro-VM sandbox providers have made it practical to give each task its own real runtime. WordPress Playground and my.WordPress.net are interesting but still experimental, so the plan treats them as optional accelerators and not as foundations. -- **Content change** — edit text, images, pages -- **Design change** — modify theme, layout, colors, fonts -- **Feature add** — install and configure a plugin (e.g., booking form, SEO, analytics) -- **Plugin install** — find, install, and activate a plugin from the WordPress repo -- **Site build** — create a new site from scratch (theme + pages + content) -- **Fix** — diagnose and repair a broken page, layout issue, or plugin conflict +### 2.4 Alternatives the customer already has -### 6.5 Environments +| **Alternative** | **What it does well** | **Where Wursor aims to beat it** | +|---|---|---| +| General coding agents (Claude Code, Codex, Cursor) | Strong code generation and editing across stacks; mature tooling; many users already have one. | Real WordPress runtime per task, editor-level verification, site memory, evidence-bound approvals, and a review surface non-developers can use. | +| WordPress.com MCP and hosted AI features | Direct, authenticated access to sites hosted there; content and site editing tools. | Works across hosts and with code changes, not only content; produces evidence before changes are applied. | +| Telex and similar block generators | Fast generation of blocks and small plugins from a prompt. | Covers whole sites, apps and maintenance with verification and rollback. | +| Fleet tools (Glow, InstaWP and others) | Updates, backups, monitoring and site creation across many sites. | Treated as connectors: Wursor calls them and adds planning, testing and approvals on top. | +| Agent workspaces such as Buzz | A place to assign work to agents and review it as a team. | Treated as an outside client of Wursor's API. Wursor supplies the runtime, evidence and policy that such a workspace lacks. | -- **Sandbox** — ephemeral, agent has full access, isolated from live site -- **Live site** — the user's real WordPress site, only touched by explicit deploy after approval +| | +|---| +| **Caveat.** Capabilities of Glow, InstaWP and WordPress.com connectors, and the way Buzz attaches agents, are taken from public descriptions and have not been tested end to end. They are listed as assumptions in the unified PRD. | ---- +## 3. Users and jobs to be done -## 7. Feature Requirements +| **Persona** | **Who they are** | **Job to be done** | +|---|---|---| +| Owner | Founder, marketer or operations lead who commissions the site or app and is accountable for it. Usually not a developer. | When I need a site or a change, I want to describe it in my own words and see a trustworthy preview, so I can approve it without learning the technical details. | +| Builder | Freelancer, agency developer or in-house engineer who guides the agent and fixes what it gets wrong. | When a task is too large to do by hand, I want to direct an agent that works in a real WordPress runtime, so I can ship more projects without losing control of quality. | +| Reviewer | Senior developer, QA lead or client contact who approves changes to production. | When a change is ready, I want a small set of evidence that tells me whether it is safe, so I can approve or reject quickly and defensibly. | +| Site steward | Person responsible for a portfolio of existing sites, often at an agency. | When many sites need updates and fixes, I want changes tested on copies and applied in a controlled order, so incidents do not multiply. | +| Platform admin | Administrator of Wursor deployment for an organization. | When I run this for a team, I want clear policies, budgets, audit logs and connector controls, so I can say yes to it with confidence. | -**P0** = launch-blocking · **P1** = ~30–60 days post-launch · **P2** = strategic +### 3.1 Core journeys -### 7.1 P0 — Launch Blocking +**Journey 1: a new editable site (Lane A)** -#### 7.1.1 Chat interface -- Single text input, no buttons, no tabs -- User types what they want, in any language, any level of detail -- Agent responds conversationally: "I've changed your homepage to a two-column layout. Here's the preview." -- Agent can ask clarifying questions: "I see you have a contact form. Do you want me to keep it or replace it?" -- Follow-up turns refine the result: "Make the header blue instead" → new preview -- Mobile-responsive — the user can approve changes from their phone +The owner opens a new project, describes the business and the pages they need, and uploads a logo. The agent proposes a plan with a sitemap, a style direction and the list of editable regions. After the owner approves the plan, the agent builds a block theme and content in a sandbox. Verification runs a visual check at several widths, accessibility and performance audits, and an editor test in which a scripted editor changes text and images in each editable region and confirms the layout holds. The owner sees the preview and the evidence summary, requests two changes, and approves the second version. The release step deploys to the chosen host with a rollback point. -#### 7.1.2 Live preview -- Embedded browser preview of the sandbox site -- Real-time — the preview updates as the agent works (streaming changes) -- The user can click around the preview to verify the change works on all pages -- Device toggle: desktop / tablet / mobile views -- The preview is the *only* verification — no diffs, no logs, no technical output +**Journey 2: a heavy web app or PWA (Lane B)** -#### 7.1.3 Approve / reject -- Big, clear buttons: "Looks good → Apply" and "Not right → Reject" -- Apply deploys the sandbox changes to the live site via the plugin -- Reject destroys the sandbox, live site unchanged -- Confirmation dialog before apply: "Apply changes to your live site?" -- One-click rollback: a history of deployed changes, with "Undo" for each +The builder describes an event-ticketing app: organizer accounts, event pages, checkout, QR check-in and an installable offline mode for door staff. The agent drafts a plan that splits the work into features, each with its own acceptance tests. It builds in the sandbox, runs end-to-end tests with Playwright, checks the PWA manifest, service worker behavior and offline flows, and records the evidence. The builder reviews each feature, and the reviewer approves the release candidate. -#### 7.1.4 WordPress plugin connector -- One-click install from wp-admin plugin directory -- Pairing flow: user copies an 8+ character code from Wursor web app (5-minute TTL, 5-attempt lockout, bound to account + site URL), pastes it into the plugin -- Plugin exposes: site info (theme, plugins, content), file system (read/write), database (read/write), WP-CLI (full access) -- All communication over HTTPS with token-based auth -- Plugin auto-updates; no user maintenance +**Journey 3: safely updating an existing site (Lane C)** -#### 7.1.5 Cloud sandbox orchestration -- Spin up a sandbox in ≤ 10 seconds (warm pool) -- Mirror the user's site: theme, plugins, content (task-scoped). Media is proxied from origin, not copied. -- Full network access (so the agent can install plugins from the WordPress repo) -- 15-minute idle timeout (auto-hibernate, resume on user interaction) -- 24-hour hard timeout (sandbox destroyed, no exceptions) -- Deploy: apply file changes, database changes, plugin installs/activations to the live site via the plugin - -#### 7.1.6 Content playbooks -- **Edit text** — find and replace text on any page, update headings, rewrite paragraphs -- **Edit images** — replace, resize, reposition images -- **Edit pages** — add/remove sections, reorder content, change layouts -- **Import/export** — copy content from another page or site - -#### 7.1.7 Design playbooks -- **Theme change** — switch to a new theme, migrate content -- **Layout change** — single column → two columns, sidebar position, full-width sections -- **Color/font change** — update theme colors, typography, spacing -- **Mobile fix** — fix a layout that breaks on mobile - -#### 7.1.8 Plugin playbooks -- **Install plugin** — find a plugin in the WordPress repo, install, activate, configure -- **Configure plugin** — change settings for an existing plugin (e.g., "set up WooCommerce shipping") -- **Plugin conflict fix** — diagnose and resolve a plugin conflict - -#### 7.1.9 Site build playbook (P0 limited) -- **From scratch** — user describes their business type; Wursor selects a theme, installs it, creates pages, sets up plugins -- **From existing** — take the user's current site and apply a new design direction -- Limited to simple sites in v1 (5 pages, standard plugins). Complex builds are P1. - -#### 7.1.10 Safety & trust -- Every change is previewed before apply — no "apply now, preview later" -- Agent has a "no-surprise" rule: it must surface any action that costs money (e.g., a paid plugin) or affects SEO (e.g., URL changes) -- That rule is mechanical at deploy, not just conversational: URL/slug changes, `blog_public`, payment/shipping, and user/role table writes are blocked until the user confirms that specific bullet (R12) -- Agent role: "I changed your homepage layout. It also removed your sidebar widget. Is that OK?" -- Deploy history: a timeline of all changes, with one-click undo per change -- Undo reverts the last deploy (not individual file changes — the user sees "your site has been restored to before that change") -- The last 3 deploy snapshots are stored in Wursor's cloud as well as on the site, so Undo still works if the live site is down (R3) - -### 7.2 P1 — Follow-on - -#### 7.2.1 Multi-step workflows -- User can queue multiple changes: "Change the homepage layout, add a booking form, and update the footer" -- Agent works through them in order, previews the combined result -- User approves all at once or rejects individual changes - -#### 7.2.2 Visual design picker -- Instead of describing a design, the user picks from a gallery of design templates -- "Show me my site with this theme" — the agent changes the theme, previews it -- The user can cycle through options without committing - -#### 7.2.3 SEO optimization -- "Make my site rank better" — agent analyzes the site, suggests changes, applies them with approval -- Meta descriptions, title tags, alt text, heading structure, schema markup - -#### 7.2.4 Performance optimization -- "Make my site faster" — agent analyzes performance, suggests fixes (image optimization, caching, plugin cleanup) -- Applies changes with approval - -#### 7.2.5 Content migration -- "Move my site from Wix to WordPress" — agent imports content, maps pages, sets up redirects -- Complex, but the agent does the heavy lifting - -#### 7.2.6 Multi-site management -- User connects multiple WordPress sites to one Wursor account -- Switch between sites, apply changes across sites, bulk operations - -#### 7.2.7 Team / agency mode -- Multiple users can access the same site with different permission levels -- Agency team can manage client sites from a single Wursor account -- Client approves changes, agency makes them - -### 7.3 P2 — Strategic - -- E-commerce operations (WooCommerce: product updates, inventory, pricing, shipping) -- Scheduled changes (e.g., "update the site for the holiday sale on December 1") -- Custom code agent (for users who want to add custom CSS/JS — still via chat, no code editor) -- A/B testing (agent creates two versions, measures performance, picks the winner) -- Monitoring agent (watches the site, suggests fixes proactively) -- Marketplace (playbooks built by third parties, shared with the community) - ---- - -## 8. Architecture & System Design - -### 8.1 Layers - -``` -┌─────────────────────────────────────────────────────┐ -│ Web Frontend (Wursor Web App) │ -│ ┌─────────────────────────────────────────────────┐ │ -│ │ Chat UI (React) │ │ -│ │ Preview iframe (sandbox URL) │ │ -│ │ Approve / Reject buttons │ │ -│ │ Deploy history timeline │ │ -│ └─────────────────────────────────────────────────┘ │ -├─────────────────────────────────────────────────────┤ -│ API Server (Backend) │ -│ ┌─────────────────────────────────────────────────┐ │ -│ │ Session Manager │ │ -│ │ ├─ Create session (auth, site info, context) │ │ -│ │ └─ Resume session (reconnect to sandbox) │ │ -│ ├─────────────────────────────────────────────────┤ │ -│ │ Agent Orchestrator │ │ -│ │ ├─ Route user request to playbook │ │ -│ │ ├─ Build system prompt (site context, rules) │ │ -│ │ ├─ Dispatch tool calls to sandbox │ │ -│ │ └─ Stream results to frontend (SSE) │ │ -│ ├─────────────────────────────────────────────────┤ │ -│ │ Playbook Runner │ │ -│ │ ├─ Content playbook (text, images, pages) │ │ -│ │ ├─ Design playbook (theme, layout, colors) │ │ -│ │ ├─ Plugin playbook (install, configure) │ │ -│ │ └─ Site build playbook (scaffold, populate) │ │ -│ ├─────────────────────────────────────────────────┤ │ -│ │ Sandbox Manager │ │ -│ │ ├─ Spin up/down containers (Docker + k8s) │ │ -│ │ ├─ Warm pool (pre-booted base images) │ │ -│ │ ├─ Mirror user site (plugin, content, media) │ │ -│ │ └─ Garbage collection (idle, hard timeout) │ │ -│ ├─────────────────────────────────────────────────┤ │ -│ │ Deploy Manager │ │ -│ │ ├─ Compute diff from sandbox → live site │ │ -│ │ ├─ Push changes via plugin API (files, DB) │ │ -│ │ └─ Rollback (revert last deploy) │ │ -│ └─────────────────────────────────────────────────┘ │ -├─────────────────────────────────────────────────────┤ -│ WordPress Plugin (on user's hosting) │ -│ ┌─────────────────────────────────────────────────┐ │ -│ │ REST API (site info, read/write files, DB, │ │ -│ │ WP-CLI execution, deploy receiver) │ │ -│ └─────────────────────────────────────────────────┘ │ -├─────────────────────────────────────────────────────┤ -│ Infrastructure │ -│ ┌─────────────────────────────────────────────────┐ │ -│ │ Docker + orchestration on raw VPS (v1) │ │ -│ │ → Pre-baked WordPress image │ │ -│ │ → Warm pool for instant spin-up │ │ -│ │ → Lazy media sync (only what the task needs) │ │ -│ └─────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────┘ -``` - -### 8.2 Agent substrate (locked) - -- **Model:** Grok (xAI) — strong agentic capabilities, tool-calling, multi-step reasoning -- **Routing:** Wursor-hosted (users do not need their own API key) -- **Tool-calling:** Each playbook step is a tool call against the sandbox. The agent orchestrates the sequence; the API server dispatches. -- **System prompt:** Built per session from: - - Site info (theme, active plugins, WordPress version, PHP version) - - User's goal (parsed from the chat message) - - Safety rules (never touch the live site, never ask for money, never hide changes) - - Playbook-specific instructions - -### 8.3 Sandbox infrastructure - -- **Base image:** WordPress + nginx + PHP 8.x + MySQL 8.x + WP-CLI + Redis -- **Warm pool:** 5–10 pre-booted containers per region, ready to accept a mirror -- **Site mirroring:** - - Plugin list and active theme → installed immediately - - Content (posts, pages, options) → pulled from the live site via the plugin API - - Media files → not copied. Sandbox nginx proxies `/wp-content/uploads/*` to the live origin (or a signed Wursor proxy). A file is pulled only when the agent replaces it. -- **Networking:** Sandboxes have full outbound internet access (for plugin installs, API calls). No inbound access except from the Wursor API server. -- **Idle timeout:** 15 minutes. User typing or viewing the preview resets the timer. -- **Hard timeout:** 24 hours. Sandbox is destroyed regardless of state. -- **Cost per sandbox:** ~$0.01–0.02/hour in raw compute (VPS-backed). A typical 1.5-hour task costs ~$0.02–0.03. - -### 8.4 Deploy mechanism - -When the user approves: - -1. **Compute diff** — compare the sandbox's file system and database to the mirror snapshot taken at spin-up -2. **File changes** — send changed files to the plugin's deploy API -3. **Database changes** — send SQL migration to the plugin's deploy API (or WP-CLI commands) -4. **Plugin changes** — plugin installs/activations sent as WP-CLI commands -5. **Verify** — plugin confirms the live site is functional after changes -6. **Snapshot** — deploy snapshot stored for rollback (files + DB state) on the site **and** in Wursor's cloud (last 3). Cloud copy is what Undo uses if the live site is down. -7. **Drift check** — re-hash the live files/options in the changeset at approve time. If the live site changed since the preview, ask before clobbering (R11). -8. **No-surprise gate** — slug / `blog_public` / payment / role changes require an explicit confirm bullet (R12). - -Rollback walks the changeset journal backwards, then restores from the snapshot if the journal is incomplete. - -### 8.5 Error & offline states - -| State | What Wursor does | -| :--- | :--- | -| **Plugin not installed** | Show the pairing code and a link to install the plugin; wait for connection | -| **Plugin unreachable** | Show "Wursor can't reach your site" with troubleshooting steps (check if site is down, plugin is active) | -| **Sandbox spin-up fails** | Retry with a fresh container; if persistent, show "We're having trouble starting a preview" with support link | -| **Agent encounters an error** | Surface in chat: "I ran into an issue. Here's what happened and what I can try next." | -| **Deploy fails** | Show the error with a retry button; sandbox is kept alive so the user can retry or contact support | -| **Deploy results in broken site** | Plugin detects a 500 error or critical failure; automatically rolls back and reports to the user | -| **Network offline (user)** | Show "You're offline" message; session resumes when connection returns | -| **Rate limit / API error** | Retry with exponential backoff; surface persistent failures in chat | - ---- - -## 9. UX Notes - -- **Landing page is the chat.** No dashboard, no navigation. The user signs in and sees a chat input. That's it. -- **First-time user:** "Welcome to Wursor. Describe what you'd like to change on your site." -- **Empty state:** "Your site is connected. Try: 'Make my homepage look more modern' or 'Add a contact form.'" -- **Preview opens in a split view.** Chat on the left, preview on the right. The user can resize the split. -- **Preview is interactive.** The user can click around the preview, navigate pages, test forms. It's a real browser. -- **Approve/reject buttons are persistent.** They stay at the bottom of the chat as long as there's an unapproved change. -- **Deploy history is a simple list.** "Homepage redesign — applied 2 hours ago — Undo" with a one-click undo on each entry. -- **The agent has a name and personality.** Warm, competent, transparent. "I've updated your homepage. Here's what I changed: I updated the hero section, added a call-to-action button, and fixed the mobile layout." -- **Mobile:** The preview collapses to a full-screen chat with a "Show preview" button that opens the preview in a new tab. - ---- - -## 10. Competitive Landscape - -| Product type | Strength | Gap Wursor fills | -| :--- | :--- | :--- | -| Page builders (Elementor, etc.) | Visual editing | Require learning the builder; agent does it for you | -| AI content assistants (Jetpack AI, etc.) | Writing posts | Can't change layout, install plugins, or modify design | -| General AI coding tools | Code-level changes | Require technical skill; no visual preview | -| Wix / Squarespace | Simple, integrated | Not WordPress; don't own your site | -| Agency / freelancer | Human expertise | Slow, expensive, per-task | -| Host copilot features | In-context help | Limited to what the host built; no agentic autonomy | - -**Moat:** Cloud sandbox + agentic orchestration + universal plugin connector. The user gets a safe, ephemeral copy of their site, an agent that can do anything a WordPress developer can do, and a one-click deploy back to the live site. No other product combines all three. - ---- - -## 11. Metrics & Success Criteria - -| Metric | Baseline | 6-month target | Owner | How we measure | -| :--- | :--- | :--- | :--- | :--- | -| Time from sign-up to first deployed change | TBD (alpha 1) | ≤ 5 min | PM | In-app timer from sign-up to first approve | -| Task completion rate (user describes → change deployed) | TBD (alpha 1) | ≥ 60% | PM | Per-task: started → approved | -| User claps back (reject → re-describe → approve) | TBD | ≤ 20% of tasks | PM | Reject events per session | -| Sandbox spin-up time (p50) | TBD | ≤ 5s | Eng | Server-side timer | -| Verify step catches issues before approve | TBD (alpha 1) | ≥ 30% of failing tasks | PM | Verify-fail before approve, per task | -| Weekly active users as % of sign-ups | TBD | ≥ 40% | PM | Weekly active per cohort | -| Paid conversion | TBD | ≥ 5% of trial users | GTM | Billing records | - -**Measurement plan:** all metrics instrumented from first alpha build. Every metric is a dashboarded event. Baselines from closed alpha (Phase 1) inform Phase 2 targets. - ---- - -## 12. Phased Roadmap - -### Phase 0 — Pivot & spec (now) -- Rewrite PRD for non-technical-first -- Risk rewrite: §13 is 14 risks with mitigations that map to tests or UI (this revision) -- Spike: golden-task eval harness (20 prompts × ≥2 canned WP sites, scored) -- Spike: Elementor / builder detection in site-info -- Spike: pairing threat model (8+ char, TTL, lockout, HMAC, scoped tokens) -- Spike: time a task-scoped content mirror + media proxy against a ≥2GB site -- Spike: cloud sandbox orchestration (WordPress in Docker, overlay + pause pool) -- Spike: WordPress plugin (REST API, file read/write, DB access, WP-CLI) -- Spike: basic chat + preview web app -- Lock the P0 plugin catalog (~40 slugs) before any agent can install - -### Phase 1 — Foundation (weeks 1–8) -- Web app: sign-up, site connection (plugin auth), chat, preview, approve/reject -- Sandbox infrastructure: overlay + pause-to-disk warm pool, task-scoped mirroring, media proxy, idle timeout, GC -- WordPress plugin: site info API (builder + capability tiers + pre-flight), HMAC-signed pairing, two-phase deploy receiver, journaled rollback, auto-update -- Playbooks: content edit (text, images, pages), design change (layout, colors) -- Deploy history: timeline, one-click undo - -**Exit criteria:** a new user signs up, connects their WordPress site, types "change my homepage heading to 'Welcome to My Business'", sees a preview with the change, and approves it — all in under 5 minutes. - -### Phase 2 — Intelligence (weeks 9–16) -- Plugin playbooks (install, configure, fix conflicts) -- Site build playbook (from scratch, from design direction) -- Mobile-responsive preview -- Agent clarifying questions (disambiguation) -- Closed alpha (10–20 site owners) - -**Exit criteria:** all §11 baselines collected and reviewed; a non-technical user can install a plugin via chat and see it working on their site. - -### Phase 3 — Professional (weeks 17–28) -- Multi-step workflows (queue changes) -- Visual design picker (theme gallery) -- Site build playbook (complex, multi-page) -- SEO optimization playbook -- Performance optimization playbook -- Paid beta - -### Phase 4 — Platform -- Multi-site management -- Team / agency mode -- E-commerce operations (WooCommerce) -- Scheduled changes -- Marketplace (community playbooks) - ---- - -## 13. Risks & Mitigations - -Isolation, a warning dialog, and a fallback model are not mitigations. Each row below maps to a test, a playbook constraint, or a product surface. Residual impact assumes the mitigation ships; **Launch-blocking** means Phase 1 cannot exit without it. - -### 13.1 Documented risks - -#### R1 — Agent breaks the sandbox site - -| | | -| :--- | :--- | -| **Impact (original → residual)** | Medium → Low for the live site; **High for session trust** until checkpoints ship | -| **Launch-blocking** | Circuit breaker and per-step verify. Full self-heal can follow. | -| **Why the old mitigation fails** | “GC and start fresh” keeps the live site safe and kills the session. A white-screen preview after 90 seconds is a churn event. Retrying the same trajectory also burns the warm pool and the model budget. | -| **Mitigation** | Copy-on-write checkpoint after every successful playbook step (overlayfs / Docker commit). Verify after every tool call (target URL 200, no new PHP fatal, `siteurl`/`home` unchanged). Two consecutive verify failures → circuit breaker, stop, and talk — do not thrash. Content playbooks prefer WP-CLI / REST (`wp post update`) over theme file surgery. A tiny internal self-heal path rewinds the last checkpoint before the user sees a dead preview. | -| **Owner / where** | Sprint 1 (overlay + GC), Sprint 3 (circuit breaker), Sprint 4 (REST-first content), Sprint 6 (reuse verifier on the sandbox). | +The site steward connects an existing site through a fleet connector or a direct plugin. The agent first builds a dossier of the site (SITE.md): theme, plugins, custom code, traffic-critical pages and known fragilities. The steward asks for a plugin update and a fix to a form. The agent classifies the change by risk class, clones the site into a sandbox, applies the change as a replayable script, and runs regression checks against the critical pages. The reviewer receives the diff, the evidence and the exact script that will run in production, approves it, and the connector applies it with a backup taken first. If monitoring shows a regression afterwards, the rollback script runs. -#### R2 — Agent installs a malicious plugin +**Journey 4: a first site, started on Wursor Cloud** -| | | -| :--- | :--- | -| **Impact (original → residual)** | Medium → Low **if** the catalog and gates ship. Deploy path makes the unmitigated case High. | -| **Launch-blocking** | Tool-schema allowlist in Sprint 3. Catalog + reputation in Sprint 9, but the agent must not be able to `wp plugin install ` before then. | -| **Why the old mitigation fails** | wordpress.org is not a reviewed-safe catalog. Sandbox isolation only holds until the user clicks “Looks good → Apply.” A pretty form that phones home looks fine in preview. | -| **Mitigation** | P0/P1 install from a curated catalog of ~40 slugs only (CF7, WPForms, Yoast, RankMath, Woo, Elementor, WooPayments, …). Reputation gate before install: WPScan / Patchstack CVE, last updated < 18 months, `tested up to` within 2 majors, active-install floor, zip SHA against a Wursor mirror. Fail closed. While a new plugin first activates, sandbox egress is allowlisted (wordpress.org, gravatar, the user’s own domain); unexpected egress is surfaced in chat and the plugin is not applied. Static smell test rejects `eval(base64_decode`, `/e` preg, unexpected remote `file_get_contents`. Deploy re-checks reputation even after approve. No arbitrary ZIP, no premium marketplace URLs, no `wp plugin install ` in v1. | -| **Owner / where** | Sprint 3 (`tool-schemas.ts` allowlist), Sprint 9 (catalog + reputation + egress watch). | +A first-time owner signs up, says they have no website and picks Start on Wursor Cloud. Wursor asks five short questions: what the business does, who it is for, the one thing visitors should do, the pages wanted and the tone. It returns three design directions as previews of the real homepage. The owner picks one, the agent builds the site on a safe copy, and the owner sees the preview and a plain summary of what was checked. After approving, the site goes live at a temporary address within minutes. The owner then connects a domain by following plain steps with live status, and the site moves to the domain with a certificate in place. From then on every change follows the same loop. -#### R3 — Deploy to live site fails +**Journey 5: connecting a site the owner already has** -| | | -| :--- | :--- | -| **Impact (original → residual)** | High → Medium (hosts stay messy) | -| **Launch-blocking** | **Yes** | -| **Why the old mitigation fails** | The failure mode is a **partial** deploy, not a clean 500. CSS lands, `wp_options` is half-updated, object cache serves the old theme, then rollback fails because the customer’s disk is full. HTTP 200 does not catch a wrong `home` URL or a dropped menu. | -| **Mitigation** | Two-phase deploy: prepare artifacts under `wp-content/upgrade/wursor-/`, then commit. Prepare failure = live site untouched. Pre-flight before the confirm dialog: disk free, `ABSPATH` writable, `DISALLOW_FILE_MODS` off, PHP memory, `post_max_size`, can flush object/opcode cache, can enter maintenance mode. Failure copy is host-ticket language, not “deploy failed.” Every file / option / WP-CLI call is a numbered journal entry; rollback walks it backwards. Health contract: homepage + one inner page + `/wp-json` + `wp-login.php` + no new fatal + `siteurl`/`home` match intent + screenshot SSIM vs sandbox. Last 3 snapshots live in **Wursor’s cloud**, not only on the customer disk, so Undo still works when the site is down. Maintenance mode for the commit window (seconds). Detect managed hosts at connect; v1 still file-pushes but must purge known caches. Canary rewrite (`/?wursor_canary=`) is stretch; journal + cloud snapshot is the P0 version. | -| **Owner / where** | Sprint 2 (pre-flight on site-info), Sprint 6 (two-phase, journal, cloud snapshot, health contract). The existing `handles partial failures` test is acceptance, not a comment. | +An owner with a WordPress site on a shared host picks Connect my WordPress. If the site is on WordPress.com they sign in; otherwise they install the connector plugin and type the code it shows. Wursor reads the site, reports its access level (Full access or Content only), flags anything worrying such as no recent backup, and starts in read-only mode. The owner asks for a small first change, reviews a preview made on a copy, approves, and the change is applied with a backup taken first. -#### R4 — Mirroring a large site is slow +**Journey 6: moving a site, in either direction** -| | | -| :--- | :--- | -| **Impact (original → residual)** | High → Medium once thin-slice + media proxy ship (standby replica is Phase 2) | -| **Launch-blocking** | **Yes** for task-scoped mirror + media proxy. Standby replica is not. | -| **Why the old mitigation fails** | Warm pool absorbs *boot*, not *copy*. “Incremental” was unnamed. The 5-minute Phase 1 exit criterion dies on a Woo store with 8 years of posts. Media is often not the bottleneck — `wp_posts`, plugin folders, and upload thumbs are. | -| **Mitigation** | **Task-scoped mirrors.** Content edit → target posts + `wp_options` + menus + active theme/plugins (skip orders, logs, transients, revisions). Design → theme + `theme.json` + templates + a few representative pages. Plugin install → current site + the new plugin, still skip Woo order tables. Theme swap / rebuild → fuller clone. **Remote media proxy:** sandbox nginx rewrites `/wp-content/uploads/*` to the live origin (or a signed Wursor proxy). Copy a file only when the agent replaces it. Plugin sends a path→sha256 manifest; wordpress.org packages come from a Wursor cache, not the customer host. Chunked resumable zstd batches over plugin REST, not one zip. Default DB exclude: `_transient_*`, action scheduler logs, Woo orders/customers for non-commerce playbooks. Progressive preview: show the target page as soon as *that* page is mirrored. **Phase 2:** a per-site standby replica synced by webhook / 15-min cron so a task is `fork replica`, not `pull production`. | -| **Owner / where** | Sprint 1 (proxy, hash manifest, subset dump), §14 media decision, Phase 2 standby replica. | +Eighteen months later the owner wants to host the site elsewhere. They open the site page, choose Move to my own WordPress, pick or connect a destination, and see a report of what will travel and what will not. Wursor builds a verified copy, shows a page-by-page comparison, and asks for an approval. After approval the owner switches the domain with a guided, reversible cutover. The Cloud site stays live and read-only for 30 days. In the other direction, an agency owner with a connected site chooses Host on Wursor Cloud, and the same steps run the other way, with the original left untouched. -#### R5 — User can't describe what they want +### 3.2 First-time site owner -| | | -| :--- | :--- | -| **Impact (original → residual)** | Medium → Medium. Unmitigated this is **High for activation** — vague language is the default for the primary persona. | -| **Launch-blocking** | Intent chips, site-aware starters, and structured reject in Sprint 8. Full design-fork picker can wait on alpha reject rate. | -| **Why the old mitigation fails** | Clarifying questions feel like a support form. The §11 “claps back” metric (reject → re-describe ≤ 20%) *is* this risk. | -| **Mitigation** | Empty state is intent chips (“Change wording” / “New look” / “Add a form” / “Something’s broken”), not a blank chat. After connect, scan for default theme H1, missing favicon, no contact page, mobile overflow, and offer three *specific* starter sentences. Reject is chips (“Wrong color” / “Too busy” / “Keep my logo” / “Undo only the last thing”), each mapped to a constrained follow-up. Vague design prompts should *show* 2–3 cheap visual forks (theme.json / CSS / catalog themes) rather than ask “modern or classic?” Point-and-talk: click an element in the preview, then type “make this blue” — Phase 1 spike, not Phase 4 magic. Before/after slider on the preview. Voice input on mobile via browser SpeechRecognition is enough for alpha. | -| **Owner / where** | Sprint 8 (chips, starters, structured reject), Phase 1 spike (point-and-talk), Sprint 12 (disambiguation), pull a fork-and-pick slice forward from Sprint 13 if design-prompt reject rate is high. | +Revision 3 adds a persona the earlier drafts underserved. The first-time site owner has a business, no website and no technical vocabulary. They do not know what hosting, DNS or a theme is and should not have to. -#### R6 — Plugin compatibility (old WordPress, old PHP) +| **Need** | **What the product does about it** | +|---|---| +| "I do not know what to ask for." | A five-question brief and three design directions shown as real previews, so choosing replaces describing. | +| "I do not know where it will live." | Start on Wursor Cloud is the default: no host to pick, no settings to see. | +| "What if I want to leave?" | The exit is stated on the first screen. A complete archive and a guided move to their own WordPress are always available (SH-08, SH-13). | +| "I cannot tell if it is safe." | The same evidence and plain-language review as every other site, from the first build. | +| "Where do I put my domain?" | A step-by-step connect flow with live checks, written for people who have never touched DNS (SH-12). | -| | | -| :--- | :--- | -| **Impact (original → residual)** | Medium → Medium | -| **Launch-blocking** | Version matrix + capability tiers at connect (Sprint 2). | -| **Why the old mitigation fails** | A warning a dentist cannot act on is a bounce. The real incompatibilities are Elementor vs Gutenberg vs Classic, security plugins that kill REST, and hosts that set `DISALLOW_FILE_MODS` — not PHP 7.4 vs 8.2 alone. | -| **Mitigation** | **Capability tiers, not a binary supported flag.** *Content-safe:* edit posts/pages via REST (always try to offer this). *Design-safe:* writable theme / `theme.json` / page-builder API. *Install-safe:* WP-CLI or filesystem and `DISALLOW_FILE_MODS` off. Chat: “I can change text on your site today. Installing plugins needs a WordPress update — I can preview that first if you want.” **P0 matrix (locked):** WP 6.1+ and PHP 8.0+ for full playbooks; WP 5.8–6.0 / PHP 7.4 are content-only. Publish this in the plugin readme. Detect Elementor / Beaver / Divi / Gutenberg at connect; content and layout playbooks must use the matching adapter or they will edit `post_content` while Elementor JSON is what renders. Sandbox may run newer PHP than production; deploy lints PHP against the live interpreter version. “Update WordPress for me” is a sandbox-then-approve playbook, not a warning. If PHP is old, generate a 4-line host-ticket email the user can forward. Connect-time scan also flags Wordfence / iThemes / disabled REST, `DISALLOW_FILE_EDIT`, `open_basedir`, object cache. | -| **Owner / where** | Phase 0 spike (matrix + builder detect), Sprint 2 (tiered connect + concierge copy), Sprint 4–5 (adapters for builders we actually see). | +## 4. Core concepts -#### R7 — Grok model quality for agentic tasks +Both delivery patterns expose the same objects and the same workflow. This section defines them once so the pattern-specific sections can refer to them. -| | | -| :--- | :--- | -| **Impact (original → residual)** | Medium → Medium. Unmitigated this is High until the eval harness has a score. | -| **Launch-blocking** | Golden-task harness (Phase 0) + tool allowlist (Sprint 3). | -| **Why the old mitigation fails** | “Have a fallback model” is not a design. WordPress is full of hallucinated WP-CLI flags. Grok stays the default *vendor*; it must not be the architecture. | -| **Mitigation** | Playbooks are the intelligence; the model fills slots (`page`, `old`, `new`) and a deterministic runner executes. Almost never emit free-form shell. Allowlisted tools only: a short WP-CLI list, REST routes, file paths under `wp-content/themes/{active}` and `wp-content/uploads`. Forbidden: `wp db query` with DROP/TRUNCATE, `wp eval`, `wp config`, `rm`, writing `wp-config.php`, touching `mu-plugins`. Golden-task harness from day 1: 20–50 fixture sites × ~20 prompts, asserting preview text / options / screenshot — not “the model said it worked.” Router: cheap/fast model classifies + asks one question; stronger model (Grok or fallback) only for design/plugin reasoning. Fallback is **per playbook**. Sprint 3 client is `llm-client.ts` with a Grok adapter; vendor switch is an env var. Self-critique before the user sees the preview (health contract + screenshot: “Did the H1 actually change?”). Store anonymized winning tool traces as few-shots. If the classifier is unsure, offer chips (R5) — do not improvise a theme rewrite. | -| **Owner / where** | Phase 0 (eval harness, before playbooks), Sprint 3 (allowlist + provider-agnostic client), Sprint 4–5 (slot-filling). | +### 4.1 Objects -#### R8 — Sandbox cost scales with usage +| **Object** | **Definition** | +|---|---| +| Organization | The tenant. Owns members, policies, budgets and connectors. | +| Project | A site or app the organization is working on, with a lane, a repository, an environment list and a memory file set. | +| Task | A unit of requested work in a project. A task has a description, a lane, a plan and a state. | +| Run | One execution attempt of a task by the Conductor. A task can have several runs (retries, revisions). | +| Sandbox | An isolated runtime, created per run, containing a real WordPress install, the repository and the agent's tools. | +| Evidence bundle | A signed collection of verification results, screenshots, traces and the diff for a run. | +| Approval | A decision by a human reviewer, bound to the hashes of the diff and the evidence bundle. | +| Release | The act of applying an approved change to an environment, with a rollback point. | +| Connector | A configured link to an external system such as GitHub, a host, a fleet tool or a model provider. | +| Policy | A rule set that decides which actions the agent may take automatically, which require approval and which are forbidden. | -| | | -| :--- | :--- | -| **Impact (original → residual)** | Low compute → Low. **Token spend is the real risk** (Medium) and was previously named but not mitigated. | -| **Launch-blocking** | Per-task token budget in Sprint 3. Pause-to-disk in Sprint 1. | -| **Why the old mitigation fails** | The old row admitted API spend is higher than VPS hours, then did nothing about it. A warm pool of *running* WP+MySQL+Redis boxes is idle burn. One runaway tool loop can cost more than a month of that user’s subscription. | -| **Mitigation (compute)** | 15-min idle → pause / checkpoint to disk, resume in ~2s. Warm pool = paused images + 1–2 hot spares per region, not 5–10 fully running. Shared read-only WordPress image + overlayfs site layers. Predictive pool on time-of-day / queue depth. Do not copy media (R4). Content-edit without a full container is stretch. | -| **Mitigation (tokens — the actual cost)** | Hard cap per task: e.g. 12 tool rounds and a dollar token budget. Hit the cap → R1 circuit breaker, not another retry. Playbook-specific short prompts; do not dump the entire site-info blob every turn. Cache prompt prefixes and repeated tool results (“what’s the active theme”). Price the unit against p95 token usage, not sandbox hours. Free tier = 1 concurrent sandbox + M token-budgeted tasks (kills sandbox-farming). | -| **Owner / where** | Sprint 1 (pause + overlay + no media copy), Sprint 3 (token budget), Phase 3 pricing (unit = task budget). | +### 4.2 Task state machine -### 13.2 Risks the original table did not name +| **State** | **Meaning** | **Allowed next states** | +|---|---|---| +| Draft | The description exists but no plan has been made. | Planned, Cancelled | +| Planned | The agent has proposed a plan that awaits the builder's or owner's approval of scope. | Running, Draft, Cancelled | +| Running | The agent is working in a sandbox. | Verifying, Failed, Paused, Cancelled | +| Paused | The run waits for a human answer or an approval of a risky action. | Running, Cancelled | +| Verifying | Verification workers are executing the checks. | In review, Running (fix loop), Failed | +| In review | The evidence bundle is complete and awaits a reviewer. | Approved, Running (changes requested), Cancelled | +| Approved | A reviewer has approved a specific diff and evidence bundle. | Released, In review (if hashes change) | +| Released | The change has been applied to the target environment. | Monitoring, Rolled back | +| Monitoring | Post-release checks are watching for regressions. | Closed, Rolled back | +| Failed / Cancelled / Rolled back / Closed | Terminal states, each recorded with a reason. | None (a new task or run may reference them) | -The spec creates these. They are in scope for Phase 1. +### 4.3 What an evidence bundle contains -#### R9 — Plugin is a privileged backdoor +| **Item** | **Purpose** | +|---|---| +| Diff and file manifest | The exact change under review, with a hash. | +| Visual captures | Screenshots at defined widths for the pages affected, compared against the baseline. | +| Editor test result | Scripted editor session proving that editable regions still behave (Lane A), and block validation results. | +| Accessibility and performance reports | Automated audit output with pass and fail thresholds set by policy. | +| Test suite results | Unit, integration and end-to-end results, including PHPUnit and Playwright traces. | +| Regression comparison | For Lane C, a comparison of critical page behavior before and after, plus the replayable change script. | +| Security checks | Static analysis, dependency checks and a list of capabilities and endpoints added or changed. | +| Cost and run log | Model spend, tool calls and timings, so reviewers can see how the result was produced. | +| Signature | A signature from the verification service over the bundle hash, so the result cannot be altered unnoticed. | -Plugin exposes files + DB + WP-CLI. A 6-character pairing code (`[A-Z0-9]{6}`) with no stated rate limit, plus a stolen token, is site ownership. +### 4.4 Target platforms -**Mitigation:** Pairing codes are 8+ characters, 5-minute TTL, 5-attempt lockout, bound to account + site URL. Tokens are hashed at rest, scoped (read vs deploy), rotatable, stored in WP encrypted with a site salt. Requests are HMAC-signed (body + timestamp) so a leaked URL is not enough. **Launch-blocking. Sprint 2.** +A target platform is a kind of site that Wursor can connect to and work on. The WordPress target is the only one in scope for this document. Each target supplies the same set of operations through the platform interface (section 11), plus a runtime in which tasks can be tested. A WordPress site is a **site** belonging to a project; the project, tasks and approvals are Wursor objects. A site has a home: either Wursor Cloud, where Wursor provisions and runs it, or a WordPress the customer connects. Both homes are the same platform, WordPress, and differ in who runs the host. -#### R10 — Sandbox holds real customer PII +### 4.5 Objects added for hosting and moves -A full mirror copies Woo orders, emails, form submissions, and license keys into a container with outbound internet. +| **Object** | **Definition** | +|---|---| +| Site home | Where a site lives: Wursor Cloud or a connected WordPress. Shown on every site. Changed only by a move. | +| Access level | What Wursor may do on a site: Full access (theme, plugins, settings, content) or Content only (pages, posts, media, menus). Cloud sites always have Full access. | +| Connection | The link between Wursor and a connected WordPress: WordPress.com sign-in, the connector plugin, or (V1) an application password. Revocable from either side. | +| Brief | The short description of a new site: what the business does, who it is for, the one thing visitors should do, the pages wanted and the tone. | +| Design direction | One of three proposed looks for a new site, shown as a preview of the real homepage. Choosing one starts the first build. | +| Cloud site | A WordPress site that Wursor runs on WeOwn Cloud, with a temporary address, backups, updates and monitoring. | +| Domain | A web address the owner connects to a site, with its status (waiting for DNS, checking, live) and certificate. | +| Move | A transfer of a site from one home to another. It is a release: it has a plan, evidence, an approval, a rollback point and an audit entry. | +| Hosting plan | The part of a subscription that covers running a Cloud site, billed separately from the work allowance. | -**Mitigation:** Default DB subset excludes orders, customers, and form entries. Redact options matching `*_key`, `*_secret`, `smtp_pass`. Egress allowlist (R2). 24-hour hard delete already helps; pin sandbox region to the user’s site region when we have it, and document retention. **Launch-blocking for subset + redact. Sprint 1.** +## 5. Architecture -#### R11 — Live-site drift during a session +The Headless pattern has a web app in front, a Wursor-owned control plane behind it, a Conductor that does the long-running agent work, an execution plane for sandboxes and verification, and a platform layer that reaches customer sites. The figure shows how they connect. -An agency or the user edits wp-admin while the sandbox is open. Deploy silently overwrites their work. +![Headless architecture](docs/prd-assets/headless-architecture.png) -**Mitigation:** On approve, re-hash the live files/options in the changeset. If they drifted, show “your live site changed since this preview — refresh preview or apply anyway.” Never silent clobber. **Sprint 6.** +*Figure 1. Wursor owns the control plane. Sites, whether on Wursor Cloud or the customer's own WordPress, are reached only through the platform interface.* -#### R12 — Visual-only approve misses silent damage +### 5.1 The planes + +- **Web app (Next.js).** The interface, plus a server-side layer that holds tokens and calls the other services on behalf of the signed-in person. + +- **Control plane (Wursor API and PostgreSQL).** Holds users, organizations, memberships, projects, sites, tasks, approvals, policies and audit summaries. It is the system of record for who is allowed to do what. + +- **Conductor.** Orchestrates agent runs. It contains the policy engine, the event stream, the model gateway, the secrets broker, the platform interface and the evidence assembler. It is the only component that talks to model providers and to customer sites. At MVP the control plane API and the Conductor may be deployed together as separate modules of one service, and split later (decision D-HL-3). + +- **Execution plane.** Sandboxes with a real runtime for the target platform, verification workers and the evidence store. Sandboxes are short-lived and have no standing credentials. + +- **Platform layer.** The platform interface and its implementations: the WordPress target (reached through the connector plugin or WordPress.com sign-in on a customer's site, or provisioned on Wursor Cloud) and a fake target for tests. + +- **Hosting plane (Wursor Cloud).** The WordPress sites that Wursor runs for customers on WeOwn Cloud, kept separate from the execution plane. It provisions sites, holds their databases and files, terminates certificates, takes backups and reports health. Sandboxes are copies of sites and never serve visitors; Cloud sites serve visitors and never run agents. + +### 5.2 Decisions that shape everything else + +| **Decision** | **Reason** | +|---|---| +| Wursor owns the control plane. | Accounts, approvals and the audit trail should survive any change to a target platform, and should be usable by customers who have no site yet. | +| Streaming never goes through the Next.js server or the control plane API. | The Conductor serves the event stream directly, and the browser reconnects with a resume token. Long-lived connections are kept away from request-response services. | +| No model keys or site credentials on customer sites or in the browser. | Keys live in the secrets broker. Customer sites hold only a per-site pairing key that lets Wursor sign requests to them. | +| Previews run on a separate origin. | Generated sites are untrusted code. Serving them from a different registrable domain with no shared cookies keeps them away from the application session. | +| Approvals bind to hashes. | An approval names the diff hash and the evidence hash. A new commit or a re-run voids it. | +| Events between services are signed and delivered through an outbox. | HMAC signatures and a transactional outbox mean a crash cannot lose or duplicate a state change silently. | +| The audit log is append-only and hash-chained. | Each entry includes the hash of the previous entry, so tampering is detectable. | +| Customer sites are reached only through the platform interface. | This keeps credentials in one place and keeps platform-specific code out of the rest of the product. | +| Where a site is built and where it lives are separate. | All work happens on a safe copy in Wursor. A site's home (Wursor Cloud or a connected WordPress) decides only where the approved result is published, so the safety loop is identical for both. | +| Wursor Cloud is a platform target, not a special case. | Cloud sites are reached through the same interface as customer-hosted sites, with extra operations only for provisioning. A move between homes is an ordinary release. | +| Leaving is a supported feature. | Export, import and a complete archive exist from the first release, so Cloud is never a lock-in and customers can trust the entry. | +| Prompt-injection posture: content is data. | Text from sites, pages, issues and files is treated as untrusted. It cannot raise the agent's permissions, and tool calls that cross a trust boundary require policy checks. | + +### 5.3 Hosting plane and the commitment it carries + +Hosting changes what kind of company the product team is. A product that only connects to other people's sites answers for the quality of its changes. A product that also runs the sites answers for their availability, security patching, backups, abuse and support, around the clock, for as long as a customer stays. This section states the commitment so that it is a decision, not a side effect. + +| **Concern** | **What Cloud must provide** | **Open choice** | +|---|---|---| +| Isolation | Each site in its own container or microVM, with its own database credentials and file space; no cross-site access. | Container platform or microVM service on WeOwn Cloud (D-HL-7). | +| Updates and security | WordPress core, plugin and theme security updates applied automatically, tested on a copy first, with rollback. | Patch window (target 72 hours for critical issues, SH-14). | +| Backups | Daily, verified by restore tests, kept 30 days; a backup before every change. | Retention beyond 30 days is a paid option (D-HL-8). | +| Availability | Uptime monitoring, an on-call rota and a published target. | Target number is set only after measuring (V1). | +| Abuse and legal | An acceptable-use policy, takedown handling and a process for compromised sites. | Staffing and tooling owned by WeOwn operations. | +| Support | Plain-language help for domain and move problems. | Who answers, and during which hours. | + +Two ways to meet the commitment are open. **Run it on WeOwn Cloud**: the most control, the cleanest story for customers who care about owning their stack, and the largest operational load. **Provision through a partner** (WordPress.com, InstaWP or a managed host with an API) behind the same interface (SH-16): the fastest start and the least operational risk, with less control over price and behavior. Because the interface hides the difference, the choice can change without changing the product. The recommendation is in decision D-HL-7. + +## 6. Shared requirements + +These requirements apply to every delivery pattern. They describe the WordPress target where they mention WordPress, because it is the only target in scope. + +The tables below list each requirement with its target phase (MVP, V1 or V2) and the acceptance criteria used to decide whether it is met. Numeric targets in the acceptance criteria are hypotheses to be confirmed during the MVP, not commitments. + +**Agent and orchestration (AG)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| AG-01 | A user can create a task by describing the work in plain language, choosing a lane (Sites, Apps, or Existing sites) and a target project or site. | MVP | A task is created in under 60 seconds with only a description and a project. The lane is suggested automatically and can be changed. | +| AG-02 | Before changing anything, the agent produces a plan that lists the intended changes, the files and systems it expects to touch, the checks it will run, and a proposed risk class. The user can approve, edit or reject the plan. | MVP | No sandbox writes begin until the plan is approved, unless policy allows automatic approval for Class 1. The plan is stored with the task and shown in review. | +| AG-03 | The agent runs inside an isolated sandbox and can use only the tools its project policy grants (file edit, shell, WP-CLI, browser, Git, connector calls). | MVP | A call to a tool outside the allowlist is blocked and logged. A test suite attempts at least 20 forbidden calls and all are blocked. | +| AG-04 | The agent runs a verify-and-fix loop: it runs the lane's checks, reads failures, fixes them and reruns until the checks pass or an iteration or budget limit is reached, and then reports honestly anything that is still failing. | MVP | The iteration limit is configurable (default 8). A failing check is never reported as passing, and the final task status always matches the real check results. | +| AG-05 | Sessions keep running after the browser is closed and can be resumed from any device. | MVP | Close the tab mid-run, open the task on another device, and the event stream resumes with no lost events. | +| AG-06 | Users can interrupt, redirect or cancel a running task and send follow-up instructions while it runs. | MVP | Cancel stops sandbox activity within 10 seconds and leaves no partial change on any production site. | +| AG-07 | Several tasks can run in parallel on one project, each in its own sandbox and branch. | V1 | Five parallel tasks run without interfering with each other, and conflicting changes are detected at merge time. | +| AG-08 | The agent runtime sits behind an adapter interface so that more than one agent (for example one built on the Claude Agent SDK, and others such as Codex or goose through adapters) can do the same work. | V1 | Two different runtimes complete the same reference task through the same interface and produce evidence bundles in the same format. | +| AG-09 | An optional reviewer agent critiques the diff and the evidence, using a different prompt and, where configured, a different model, and posts its findings to the task. | V1 | Findings appear in the review view labelled as agent-generated and never count as a human approval. | + +**Sandbox and runtime (SB)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| SB-01 | Each task gets a fresh, isolated WordPress runtime (PHP, database, web server and WP-CLI) with the project's repository checked out and the declared PHP, WordPress and plugin versions installed. | MVP | Cold start under 90 seconds and snapshot start under 20 seconds. The runtime's reported versions match the project's declared versions. | +| SB-02 | Every sandbox exposes a live preview on an isolated origin that is a different site from Wursor's application, so preview code cannot reach the user's session. | MVP | A script running inside a preview cannot read Wursor's cookies or storage (tested). Preview links expire. | +| SB-03 | Network traffic leaving a sandbox is denied by default and goes through a proxy with per-project allowlists (for example package registries and GitHub). | MVP | A request to a host that is not on the allowlist fails and is logged. | +| SB-04 | Raw long-lived secrets never enter a sandbox. A secrets broker gives the agent scoped, short-lived credentials only for the tools it needs. | MVP | After a run, a scan of the sandbox environment and file system finds none of the planted canary secrets. | +| SB-05 | Sandboxes can be paused and resumed from snapshots so that tasks outlive any provider session limit. | V1 | A task that runs longer than the provider's session limit completes after a resume, with identical file and database state. | +| SB-06 | For an existing site, the system creates a staging clone from a backup, applies a data-scrubbing profile, and records a fidelity fingerprint (versions of WordPress, PHP, theme, plugins and PHP extensions) and a fidelity score against production. | V1 | The clone passes the site's baseline smoke test, and the fingerprint difference from production is shown to the reviewer. | +| SB-07 | The sandbox supports headless customer projects: a WordPress backend and a Node frontend running together and wired to each other. | V1 | A reference headless project boots, and a browser test passes from the frontend through to WordPress. | +| SB-08 | A provider abstraction lets the sandbox provider (a managed microVM service or a self-hosted fleet) be replaced without changing agent or interface code. | V2 | Two providers pass the same conformance test suite. | + +**Verification and evidence (VR)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| VR-01 | Every task produces an evidence bundle: the diff, check results, logs, screenshots, reports and the rollback plan, stored so it cannot be changed afterwards and linked to the task. | MVP | A bundle exists for 100 percent of tasks that reach Ready for review, and its hash is recorded. | +| VR-02 | Lane A (Sites) verification runs Lighthouse, axe accessibility checks, screenshots at three widths, visual comparison against the approved design baseline, and the editor test. | MVP | All five appear in the bundle. A deliberately broken fixture site fails each check. | +| VR-03 | Lane B (Apps) verification runs code-style and static-analysis checks, unit tests, API contract tests, browser tests of the main user journeys, and a permission matrix test. Concurrency tests run whenever a task touches inventory, balances or capacity. | MVP | A seeded permission bug and a seeded overselling bug are both caught by the suite. | +| VR-04 | Lane C (Existing sites) verification runs smoke tests, visual comparison against the production baseline, a plugin conflict check, an error-log scan, a performance comparison and a rollback rehearsal. | V1 | A seeded plugin conflict and a seeded performance regression are both caught on a fixture site. | +| VR-05 | The editor test is a first-class check. It records an Editor-role session performing the edits listed in the brief and asserts that structural controls are not available in locked areas. | MVP | The bundle contains a video or trace of the session. Unlocking a protected area in a fixture makes the test fail. | +| VR-06 | The agent cannot tamper with its own checks. Verification runs in separate workers, check definitions come from a protected source, and results are signed by the worker. | MVP | An attempt from the agent sandbox to weaken or delete a check is blocked or flagged to the reviewer. Unsigned results are rejected. | +| VR-07 | Each bundle includes an honest "not verified" section that lists what could not be checked and why. | V1 | The section is generated for every bundle, and reviewers can filter tasks by unverified items. | + +**Review and approvals (RV)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| RV-01 | The review screen leads with evidence and risk, not code: a plain-language summary, the risk class, what changed, the proof, and what was not verified. The code diff is one tap deeper. | MVP | In a usability test with five site owners, at least four complete a Class 1 review without opening the diff. | +| RV-02 | Reviewers can approve, request changes (which returns the task to the agent with their comments) or reject. Each decision is bound to the exact evidence hash and diff hash that was reviewed. | MVP | Changing the diff after review invalidates the approval. Every decision is recorded with the user, the time and the hashes. | +| RV-03 | A policy engine maps risk class to the approvals required. Class 3 needs per-change approval with step-up authentication. Class 4 changes can never be applied by the agent. | MVP | Policy tests cover every class and role combination, and attempts to bypass the rules fail. | +| RV-04 | Agents, including the reviewer agent, cannot approve anything. | MVP | The approval endpoint rejects any agent identity, and approval is not exposed as an ability or tool. | +| RV-05 | The plain-language summary is generated from deterministic evidence data and checked against it, so it cannot claim something the data contradicts. | MVP | A test suite of 30 fixtures finds no summary that states a check passed when it failed. | +| RV-06 | Approvals work on a phone, with push notifications and secure step-up authentication. | V1 | Median time from notification to decision on a throttled 4G connection is recorded, and step-up works on iOS and Android. | +| RV-07 | Site owners can approve low-risk classes for their own sites, while higher classes need a Builder or Admin. An optional two-person rule is available for Class 3. | V1 | The permission matrix test passes for all role and class combinations. | + +**Release and rollback (RL)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| RL-01 | For Lanes A and B, the agent opens a pull request. Merging triggers the customer's CI, a tagged release deploys, and Wursor observes and records the result. | MVP | A reference project goes from approved task to tagged release with the outcome recorded, and the agent never holds production credentials. | +| RL-02 | For Lane C, changes are applied as replayable change scripts: backup, run the script on production, smoke test, and automatic rollback if the test fails. | V1 | Fault injection (a script that breaks the home page) triggers automatic rollback within 10 minutes and the site is restored. | +| RL-03 | Every release has a rollback plan. One-click rollback is offered where technically possible, and changes that cannot be reversed are flagged before approval. | MVP | Rollback is exercised in CI for each release type, and irreversible changes are visibly marked. | +| RL-04 | Change windows and freeze periods are enforced by policy. | V1 | A release attempted inside a freeze period is blocked with a clear explanation. | + +**Memory and instructions (MM)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| MM-01 | Project instructions (an AGENTS.md file and one file per lane) are editable in the application, versioned in Git, and always loaded by the agent. | MVP | An edit made in the app appears as a Git commit, and the next run follows the changed rule. | +| MM-02 | When a reviewer requests changes, the system offers to add a lesson to the project's known-mistakes section. | MVP | The lesson is committed, and the same mistake in a rerun fixture does not recur. | +| MM-03 | A site dossier (SITE.md) is created by the first audit, can be edited by people, is versioned, is read by the agent before any Lane C task and updated after it. | V1 | Every Lane C task shows the dossier version it used and the update it proposed. | +| MM-04 | Organization-level standards (design tokens, starter kits, rules) are shared across projects with per-project overrides. | V1 | A change to an organization standard propagates to new tasks, and overrides are visible. | + +**Fleet and existing sites (FL)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| FL-01 | A fleet view lists every connected site with its versions, risk, pending updates, known vulnerabilities, backup freshness, uptime and level on the adoption ladder. | V1 | Data is no more than 24 hours old and every row links to the site dossier. | +| FL-02 | Scheduled checks (weekly fleet check, monthly restore test, quarterly review) create reports and tasks automatically. | V1 | A missed schedule raises an alert, and each run produces a report in the fleet channel. | +| FL-03 | A site moves up the adoption ladder only when the preconditions are met, for example a verified backup and a passed restore test before level 1. | V1 | Attempting to promote a site without a passed restore test is refused with the reason. | + +**Connectors (CN)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| CN-01 | A GitHub connector provides repository access, branches, pull requests and status checks. | MVP | The reference project completes a task through pull request and status check without manual Git work. | +| CN-02 | Fleet connectors (Glow for WordPress, InstaWP, WordPress.com) sit behind a connector interface with capability discovery, per-site scoping, and approval for powerful actions. | V1 | The capabilities of each connector are tested on a fixture site before use, and actions such as running updates or creating login links are gated by policy. (Connector capabilities are not yet verified.) | +| CN-03 | Wursor consumes MCP servers, including the WordPress MCP Adapter on staging, through an allowlist of tools. | V1 | A tool that is not allowlisted cannot be called, and every call is logged. | +| CN-04 | Wursor exposes its own API and MCP surface so that outside agents and Buzz can create tasks and read status. Creation needs a user-scoped token, and outside agents cannot approve. | V1 | An outside agent creates a task and reads its status, and an approval attempt from that agent is rejected. | +| CN-05 | Buzz integration links a Buzz task thread to a Wursor task and posts evidence links back. (Buzz's agent integration has not yet been verified.) | V1 | A task created from a Buzz thread shows its evidence link in that thread. | +| CN-06 | A Figma connector lets the agent read approved designs during Lane A design-to-code work. | V1 | The agent builds a hero section from a referenced Figma frame and the visual comparison reports the difference. | + +**Identity and permissions (ID)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| ID-01 | Users belong to organizations and hold roles: Admin, Builder, Reviewer, Owner (a client of the studio) and Viewer. Agents have their own non-human identities. | MVP | The permission matrix test passes for every role and action. | +| ID-02 | Passkeys or one-time-code multi-factor authentication are required for all roles that can approve, and step-up authentication is required for Class 3 approvals. | MVP | An approver without multi-factor authentication cannot approve, and Class 3 approval prompts a fresh authentication. | +| ID-03 | Access can be limited to one project or one site, so a client Owner can be invited to a single site. | V1 | An invited Owner sees only their site, and guessing identifiers for other sites returns nothing. | +| ID-04 | No user can read or change another organization's data. | MVP | An automated tenant isolation suite covering reads, writes and identifier guessing passes on every release. | + +**Audit and observability (AU)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| AU-01 | An append-only, tamper-evident audit log records every agent action, tool call, approval, policy decision and release, and can be exported. | MVP | Altering a stored entry breaks the hash chain, and the break is detected by a nightly check. | +| AU-02 | Cost and usage are metered per task, project and organization, with budgets and hard stops. | MVP | A task that reaches its budget stops and reports why. Usage totals reconcile with provider invoices within 2 percent. | +| AU-03 | Operational telemetry covers run traces, sandbox lifecycle, errors and service-level dashboards. | V1 | A single trace follows a task from user action through to sandbox and back. | + +**Experience (UX)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| UX-01 | The application is responsive and installable as a PWA, and the review and approval flows are fully usable on a phone. | MVP | The approval flow is completed on a mid-range Android phone and an iPhone with throttled 4G. | +| UX-02 | A real-time activity stream shows human-readable steps, with raw tool output collapsed by default. | MVP | Events appear within 1 second at the 95th percentile, and long logs stay responsive. | +| UX-03 | Wursor's own interface meets WCAG 2.2 AA. | MVP | axe reports no serious or critical violations, and a manual keyboard and screen-reader pass is completed. | +| UX-04 | A plain-language mode for owners hides code terms and offers progressive disclosure down to technical detail. | V1 | Five owners complete a review in plain-language mode without help. | +| UX-05 | Makers can open a web terminal or remote editor into a running sandbox. | V2 | A user edits a file by hand in the sandbox and the agent sees the change. | + +## 7. Non-functional requirements + +These targets apply to both patterns. They are hypotheses chosen to be demanding but plausible, and the MVP exists partly to test them. + +| **Area** | **Target** | **How it is checked** | +|---|---|---| +| Task start latency | A sandbox is ready and the agent is working within 90 seconds of approving a plan (p95). | Synthetic task started every 15 minutes, with timing from the run log. | +| Stream latency | New agent events appear in the browser within 1 second (p95); reconnection resumes without loss. | Browser instrumentation and a replay test that kills the connection mid-run. | +| Availability | The review and approval surface reaches 99.9% monthly availability; an outage of the agent service does not block reading evidence. | External uptime probes; fault-injection test that stops the Conductor. | +| Isolation | No sandbox can reach another tenant's data, the control plane or the metadata service. | Quarterly adversarial test and automated egress rules tests. | +| Data protection | Secrets are never written to logs, evidence or the browser; evidence is encrypted at rest. | Secret-scanning of logs and bundles in CI, and a storage configuration audit. | +| Accessibility | Wursor interface meets WCAG 2.2 AA. | Automated audits plus a manual screen-reader pass each release. | +| Cost control | Each task has a budget; runs stop gracefully at the limit and say why. | Budget enforcement tests and a daily spend report. | +| Recovery | Recovery time of 4 hours and data loss of at most 15 minutes for control-plane data. | Restore drill each quarter. | + +## 8. Success metrics + +Metrics are grouped by what they prove. The first group is a gate: if Wursor cannot beat a general agent with a starter kit on these measures, the later metrics do not matter. -The user never sees a diff (product principle — keep it). That is right for UX and wrong for SEO slugs, `robots`, deleted pages, and payment settings. +| **Metric** | **Definition** | **Initial target (hypothesis)** | +|---|---|---| +| Baseline win rate (gate) | Share of benchmark tasks where reviewers prefer Wursor's result over a general agent with a good WordPress starter kit, blind to which produced it. | 65% or higher across at least 40 tasks covering all three lanes. | +| Verified-first-pass rate | Tasks that reach review with all required checks passing and no human code edits. | 55% at MVP, 70% at V1. | +| Escaped defects | Defects found in production within 14 days of a release that the evidence bundle should have caught. | Under 5% of releases. | +| Time to approved change | Median time from task creation to approval for a standard change. | Under 45 minutes for Lane A and C standard changes. | +| Non-developer approval share | Share of approvals made by users with the Owner role. | 30% by V1, showing the evidence is understandable. | +| Rollback success | Rollbacks that restore the pre-release state, verified by checks. | 100% in drills; no unrecovered release. | +| Cost per verified change | Model, sandbox and verification cost for each approved change. | Tracked from MVP; target set after the first 200 tasks. | -**Mitigation:** Keep the UI visual. The agent already owes a plain-language change list (“I also removed your sidebar”). Make the no-surprise rule mechanical: block deploy on URL/slug changes, `blog_public`, payment/shipping, and user/role tables unless the user explicitly confirms that bullet. **Launch-blocking. Sprint 6.** +### 8.1 Measures added for new sites, hosting and moves -#### R13 — Page builders, managed hosts, and security plugins +| **Measure** | **Target (hypothesis)** | **Why it matters** | +|---|---|---| +| Share of sign-ups who reach a first preview in their first session | At least 60% on the Cloud path | The first-time owner has no site to fall back on; if the first preview does not arrive, they leave. | +| Median time from brief to first preview | Under 10 minutes | Speed is the first proof that the product works. | +| Share of new Cloud sites that go live on a connected domain within 14 days | At least 50% | A site on a temporary address is not yet a business asset. | +| Connect success without help | At least 80% | Carried from section 16, now measured per connection method. | +| Moves completed without support contact | At least 80%, with zero content loss | A move that loses content destroys the trust the exit exists to create. | +| Cloud site availability | Measured from day one; target published at V1 | Hosting is judged on uptime. | +| Share of Cloud customers who ask to move out in the first year | Tracked, no target | A high rate is a signal about the hosting, not a failure of the exit. | -Will cause more alpha failures than Grok quality. Partly covered by R6. +## 9. Shared risks -**Mitigation:** Connect-time detection + adapters + capability tiers (R6). Alpha recruitment must include at least one Elementor site and one managed host (WP Engine / Kinsta / SiteGround), not only Twenty Twenty-Four on a VPS. **Alpha plan, Sprint 2 detect, Sprint 4–5 adapters.** +| **Risk** | **Why it matters** | **Mitigation** | +|---|---|---| +| A general agent plus starter kit matches the results | The product would be an expensive wrapper. | Run the baseline gate early and publish the kill criteria. | +| Prompt injection through site content | An existing site can carry text that tries to steer the agent. | Content-as-data posture, policy checks at trust boundaries, no standing credentials in sandboxes. | +| Sandbox vendor lock-in and cost | Per-task micro-VMs can dominate costs. Vendor claims come largely from vendor material. | Provider interface, cost telemetry from week one, a second provider in V1. | +| Verification gives false confidence | Passing checks may not cover what matters to the customer. | Show coverage honestly in the evidence, let reviewers add checks, track escaped defects. | +| Platform churn | Abilities API, MCP Adapter and Connectors API are young and changing. | Thin adapters, canary builds against WordPress betas, no hard dependence on experimental features. | +| Ecosystem assumptions are wrong | Fleet connectors and Buzz integration have not been tested. | Verify each in a spike before any dependent feature is committed. | +| Trust and liability on production changes | A bad automated change can damage a customer's business. | Risk classes, mandatory backups, approvals bound to evidence, staged rollout and rollback. | -#### R14 — One bad live deploy kills trust +## 10. Pattern overview and design principles -A restaurant homepage going down on a Saturday is a tweet. Trust is the moat. +The Headless pattern has four deployables that people can see: the Next.js application (app.example.com), the Wursor API (api.example.com), the Conductor (stream.example.com) and the preview origin for generated sites. Customer sites are a fifth kind of place, owned by the customer and reached by the platform interface. A person's browser talks to the Next.js application for pages and actions and, for streaming and previews only, directly to the Conductor and the preview origin. -**Mitigation:** R3 journal + cloud snapshots + auto-rollback. First N deploys of a new account, and any theme/plugin install, take a slower “Wursor is watching this deploy” path with the stricter health contract. Dogfood on a sacrificial WordPress site before any stranger’s. **Launch-blocking process. Sprint 6 + Sprint 8 bug bash.** +### 10.1 Principles -### 13.3 Residual ratings (if the mitigations ship) +1. **Own what the product is made of.** Accounts, projects, approvals, policies and audit belong to Wursor. Sites belong to customers. Do not mix the two. -| ID | Residual impact | Launch-blocking? | -| :--- | :--- | :--- | -| R1 Sandbox self-heal | Low | Circuit breaker yes; full self-heal no | -| R2 Malicious plugin | Low if catalog + gate ship | **Yes** — tool allowlist | -| R3 Deploy / rollback | Medium (hosts are messy) | **Yes** | -| R4 Slow mirror | Medium (standby is Phase 2) | **Yes** — thin-slice + media proxy | -| R5 Intent UX | Medium | Chips + starters in Sprint 8 | -| R6 Compatibility | Medium | Matrix + tiers in Sprint 2 | -| R7 Model quality | Medium | Harness + allowlist in Phase 0 / Sprint 3 | -| R8 Cost | Low compute / Medium tokens | Token budget in Sprint 3 | -| R9 Plugin auth | High if skipped | **Yes** | -| R10 PII in sandbox | High if skipped | **Yes** — subset + redact | -| R11 Drift | Medium | Sprint 6 | -| R12 Silent damage | High if skipped | **Yes** — no-surprise gate | -| R13 Builders / hosts | Medium | Alpha plan, not just code | -| R14 Trust-ending deploy | High | Dogfood + watched first deploys | +2. **Tokens never reach the browser except the shortest-lived one.** Tokens are the digital keys that prove who a person is. Access and refresh tokens live in the server-side layer of the Next.js app, which sits between the browser and the APIs. The browser holds a session cookie and, while watching a run, a stream token that lasts two minutes. ---- +3. **The contract comes first.** The OpenAPI description is the source of truth. The typed client, the mock server and the contract tests are generated from it. -## 14. Decisions & Open Questions (Phase 0) +4. **A platform is a plugin to Wursor, not a part of it.** All platform-specific code lives in platform packages behind one interface. If a second implementation (even the fake one) cannot pass the same tests, the interface is wrong. -### Resolved (locked) +5. **The product degrades gracefully.** If a customer's site is unreachable, people can still read history and evidence. Actions that need the site wait. -1. **Shell:** Web app. No desktop app. No code editor. The chat interface is the entire product surface. -2. **Architecture:** Web app → API server → cloud sandbox → WordPress plugin on user's hosting. -3. **Sandbox hosting:** Wursor-hosted (cloud VPS with Docker). User installs nothing beyond the plugin. -4. **Model:** Grok (xAI). Wursor-hosted. Users do not need their own API key. -5. **Plugin connector:** Required for all users. Single install, one-time pairing code. -6. **Pricing:** Seat-based (free tier with limited tasks/month, paid tier for unlimited). Free tier supports the "try before you trust" loop. -7. **Non-technical first:** All features are designed for the person who has never seen a terminal. Advanced features are added later. +6. **Keep the footprint on customer sites small.** The connector plugin does the minimum needed, holds no product data and no model keys, and can be removed cleanly. -### Remaining (genuinely open) +7. **One codebase for web and CLI.** The CLI uses the same typed client as the web app, so features arrive in both at once. -1. **Free tier limits:** How many token-budgeted tasks per month before asking for payment? Unit is a task budget (R8), not sandbox hours. The number itself is set during Phase 3 beta. -2. **Pricing:** Final $X and free tier limits set during Phase 3 paid beta. +8. **Build in one place, live in another.** Wursor is always where a site is built and reviewed. Where it lives is the owner's choice and can change. -### Locked this revision (were open in v2.0) +9. **Leaving is a feature.** Every Cloud site can be exported and moved to the owner's WordPress at any time, and the product says so before the owner commits. -3. **Media library handling:** Remote media proxy is the default. Sandbox nginx rewrites `/wp-content/uploads/*` to the live origin (or a signed Wursor proxy). A file is copied into the sandbox only when the agent replaces it. Full-library copy is not a v1 path, including for 20GB+ libraries. Task-scoped DB/file mirrors (R4) plus this proxy are how the 5-minute exit criterion stays honest. -4. **Plugin compatibility:** P0 guarantee is WP 6.1+ and PHP 8.0+ for full playbooks. WP 5.8–6.0 and PHP 7.4 are **content-only** (REST edits, no theme file writes, no plugin installs). Older than that is unsupported with concierge copy to the host. Capability is tiered at connect (content-safe / design-safe / install-safe), not a binary block (R6). Page-builder detection (Elementor, Beaver, Divi, Gutenberg) is part of connect, not a later surprise. +### 10.2 What Wursor owns and what the target platform does ---- +| **Wursor does** | **A target platform (WordPress) does** | +|---|---| +| Own accounts, sign-in, organizations, projects, tasks, approvals, policies and the audit trail. | Hold the customer's site: content, theme, plugins, users and data. | +| Run agents, stream progress, call models and assemble evidence. | Run the live site and, through the connector plugin, answer a small set of signed requests: describe, back up, apply, check, roll back. | +| Decide whether a change may go ahead, based on policy and a human approval bound to evidence. | Never decide approvals and never hold model keys or Wursor data. | +| Keep a record of each site (the site dossier) and what was done to it. | Remain fully usable, with no Wursor code required, if the customer removes Wursor. | +| Provision, run and back up Cloud sites on WeOwn Cloud, and move sites in and out. | On a customer's own WordPress, the host remains the customer's: Wursor does not run it, bill for it or back it up beyond what a change needs. | -## 15. Appendices +| | +|---| +| **Contrarian note.** Owning the control plane is only worth its cost if it is actually exercised. If every customer is on WordPress for the next three years, the work spent on identity and the platform interface will not pay back in that period. The fake target and the contract suite (HL-11) exist so that the interface is tested now and does not become a claim nobody checks. | -### A. Glossary -- **Sandbox** — An ephemeral, isolated copy of the user's WordPress site running in Wursor's cloud -- **Playbook** — A structured, multi-step agent workflow for a specific task type -- **Plugin connector** — The WordPress plugin that connects the user's site to Wursor -- **Mirror** — The process of copying a site's theme, plugins, content, and settings into a sandbox -- **Deploy** — The process of applying sandbox changes to the live site -- **Warm pool** — Paused WordPress images plus a small number of hot spares, ready to accept a task-scoped mirror -- **Media proxy** — Sandbox nginx rewrite of `/wp-content/uploads/*` to the live origin so previews work without copying the library -- **Capability tier** — What Wursor can do on this site today: content-safe, design-safe, and/or install-safe -- **Changeset journal** — Numbered list of file, option, and WP-CLI operations that deploy walks forward and rollback walks backward -- **No-surprise gate** — Deploy blocker for slug, visibility, payment, and role changes until the user confirms that bullet +## 11. The platform interface and the WordPress target -### B. P0 playbook sketches -1. **Edit text** — parse user request → find content in DB → update → verify page loads → show preview -2. **Change layout** — parse user request → identify theme → modify template or page builder content → verify → preview -3. **Install plugin** — parse user request → search WP repo → install via WP-CLI → activate → configure defaults → verify → preview +### 11.1 Operations -### C. Non-goals (v1) -- A code editor or terminal -- Git integration or file diffs -- Local development workflows (Docker, wp-env, Local WP) -- AI content writing (blog posts, copywriting — Wursor is for *doing*, not writing) -- Replacing wp-admin entirely for users who want it (the plugin coexists) -- Hosting or infrastructure management (Wursor is not a hosting platform) -- Extension API or marketplace (Phase 4) -- Multi-user or team features (Phase 4) -- **Accessibility certification (WCAG) or i18n / localization** — v1 is English-only with no formal accessibility conformance target. The web app targets standard web accessibility practices but will not be audited until Phase 3. +Each target platform provides the operations below. A platform declares which ones it supports, and the interface of the product adapts to what is available. This is called capability discovery. -### D. Wursor's own test strategy -- **Unit tests** for the agent orchestrator, playbook runner, sandbox manager, and deploy manager -- **Integration tests** with real WordPress sandbox instances in CI (Docker on GitHub Actions, pre-baked image) -- **E2E tests** with Playwright against the web app, connected to a real sandbox + plugin -- **Release gates:** CI runs unit + integration on every PR; e2e before each release +| **Operation** | **What it does** | **WordPress implementation** | +|---|---|---| +| Connect | Pair Wursor with a site and verify that the pairing works. | Connector plugin and a one-time pairing code; per-site signing key. | +| Describe | Return an inventory: versions, theme, plugins, content types, health. | Plugin reads core, theme and plugin data; adds a fingerprint of the environment. | +| Back up | Create a restorable backup and report its freshness. | Uses the site's backup method or a fleet connector (CN-02); verified by a restore test. | +| Create a test copy | Produce an isolated, scrubbed copy of the site for the agent to work on. | Clone from backup into a sandbox runtime with data scrubbing (SB-06). | +| Apply a change | Run an approved change on the live site. | Replayable change script with backup first and a smoke test after (RL-02). | +| Run platform checks | Platform-specific verification such as the editor test. | Scripted editor session, block validation, plugin conflict check. | +| Roll back | Return the site to the state before a change. | Restore from the backup taken before the change, verified by checks. | +| Report health | Tell Wursor whether the site is reachable and healthy. | Signed health endpoint on the connector plugin plus outside uptime checks. | +| Provision | Create a new, empty, running site for a customer. Offered only by platforms Wursor can host. | Wursor Cloud creates an isolated WordPress site on WeOwn Cloud with a temporary address and certificate (SH-04). | +| Export | Produce a complete, portable package of a site: content, media, theme, plugins, settings and users. | Database export, uploads and a manifest; at Content only access, content and media only, with a list of what is left out. | +| Import | Load a portable package into a destination site and verify it. | Import into a Cloud site or a connected site, then page-by-page comparison against the source (SH-10). | -### E. One-liner -**Wursor is the agentic layer for WordPress — describe what you want, see it live, approve it.** +### 11.2 The connector plugin ---- +The connector plugin is the part of Wursor that lives on a customer's WordPress site, so it has to be small and careful. It exposes a handful of routes, protected by request signatures and replay protection, and it uses the Abilities API where possible so that each action is a declared, permission-checked ability and not a hidden endpoint. + +- **Pairing.** The site owner installs the plugin, which shows a one-time code. They enter the code in Wursor. Wursor and the plugin exchange keys, and the code expires after ten minutes. + +- **Requests.** Every request from Wursor carries a timestamp, a unique identifier and a signature. The plugin rejects old, repeated or unsigned requests. + +- **Least privilege.** The plugin acts as a dedicated service account with only the capabilities its abilities need. It does not hold model keys or Wursor user data. + +- **Revocation.** Either side can revoke the pairing. The plugin stops accepting requests immediately, and Wursor stops sending them. + +- **Clean removal.** Deactivating and deleting the plugin removes its tables, options and keys. + +- **Updates.** Releases are signed and can update automatically. A published security contact and a third-party review before beta cover the plugin as a security product (HL-18). + +### 11.3 Connecting a site, step by step + +This is the Connect my WordPress path. The other two starting paths are described in 11.5 and 11.7. + +1. The owner chooses Add a site, then Connect my WordPress. + +2. Wursor asks one question: is the site on WordPress.com, or somewhere else? WordPress.com sites sign in (11.5). Others see two simple instructions: install the Wursor connector from a link, then enter the code it shows. + +3. The owner enters the code. Wursor verifies the pairing and runs the Describe operation. + +4. Wursor determines the access level (11.6) and shows a plain-language summary of the site, its home and any concerns, such as no recent backup, and starts the adoption ladder (FL-03) at level 0, which is read-only. + +5. The owner decides whether to move up the ladder, with each step explained. + +Other connection methods, such as fleet connectors (Glow, InstaWP, WordPress.com), sit behind the same interface (CN-02). Their capabilities have not been tested end to end and are verified in Phase 0. + +### 11.4 Keeping the interface honest + +An interface designed from one example usually fits that example too closely. Three practices limit the damage. First, the fake target implements every operation, including provision, export and import, so the interface cannot quietly depend on WordPress behavior. Second, the contract suite runs against both implementations in CI (HL-11). Third, a dependency check prevents platform-specific code outside platform packages (HL-09). None of these proves the interface will fit a real second platform. Only building one does, which is why Appendix B treats other platforms as research and not as a commitment. + +### 11.5 Ways to connect a WordPress account + +| **Method** | **How it works** | **Access it can give** | **Best for** | +|---|---|---|---| +| WordPress.com sign-in | OAuth: the owner signs in to WordPress.com, picks a site and approves a clear list of permissions. Wursor holds the token in the secrets broker. | Content and, on plans that allow it, plugins and themes. Whatever WordPress.com grants to the account. | Owners with a WordPress.com site; the shortest path. | +| Connector plugin and code | The owner installs the plugin on a self-hosted site and enters a one-time code (11.2). | Full access: this is the method that supports describe, back up, test copy, apply and roll back. | Most self-hosted sites, on any host. | +| Application password (V1) | The owner creates a WordPress application password and gives it to Wursor. It is stored in the broker and can be revoked in WordPress. | Content only through the WordPress REST API. | Hosts or plans that disallow plugins. | + +WordPress.com tools and fleet connectors are outside parties, so their capabilities are verified in Phase 0 before the interface relies on them. The platform interface treats all three methods as one connection object with a capability list, so the rest of the product does not know which was used. + +### 11.6 Access levels and capability discovery + +At connection, Wursor tries each operation on the platform interface in a safe way and records the result. It then reduces the result to one of two labels the owner can understand, with the full capability list one level deeper. + +| **Level** | **What Wursor can do** | **What the owner sees when it cannot** | +|---|---|---| +| Full access | Describe, back up, make a test copy, change themes and plugins, change settings and content, apply, roll back. | Nothing is blocked by access. Other blocks, such as a missing backup, are shown on their own terms. | +| Content only | Read and change pages, posts, media and menus. Make a test copy of content. Roll back content changes. | A plain message at the task composer, such as: "Changing your theme needs Full access. Your host does not allow that on this plan. You can upgrade the plan, install the Wursor connector, or move the site to Wursor Cloud." No run starts. | + +The level is re-checked whenever a site is reconnected, whenever the host changes plan and before every move. A change from Full to Content only pauses open tasks that need Full and tells the owner why. + +### 11.7 Wursor Cloud as a target + +Wursor Cloud is a WordPress target in which Wursor also runs the host. It uses the same WordPress package as a connected site and adds the Provision operation. A Cloud site has Full access by construction. + +1. The owner approves the first build, or chooses Host on Wursor Cloud for a connected site (11.8). + +2. Wursor asks the hosting plane to provision a site. The plane creates an isolated runtime, a database, file storage and a temporary address with a certificate, then installs WordPress and the connector with a pairing already complete. + +3. The Conductor publishes the approved build to the new site as a release and runs the smoke test. The site is reachable at its temporary address, marked "Not on your domain yet". + +4. The owner connects a domain (11.9). Until then the temporary address works but is hidden from search engines. + +5. Daily backups, security updates and uptime monitoring begin at provisioning and are visible on the site page. + +### 11.8 Moving a site between homes + +Both directions are the same procedure with the roles of source and destination reversed, and both are first-release features (SH-08, SH-09). + +| **Step** | **Move to my own WordPress (exit)** | **Host on Wursor Cloud (entry)** | +|---|---|---| +| 1\. Choose the destination | Connect or pick a WordPress the owner owns. Wursor checks the access level (11.6). | Pick the hosted plan. Wursor provisions an empty Cloud site (11.7). | +| 2\. Report what will travel | A list of pages, posts, media, forms, users, plugins and theme, with anything that will not move and why (SH-11). | The same list, from the connected site. | +| 3\. Build a verified copy | Export from the Cloud site, import into the destination, run page-by-page checks. | Export from the connected site, import into the Cloud site, run the same checks. | +| 4\. Review and approve | Evidence: before-and-after pages, forms, media count, speed. An approval bound to the hashes (SH-10). | The same evidence and approval. | +| 5\. Switch the domain | Guided cutover: lower the DNS lifetime, change the record, check, then confirm. Reversible until confirmed. | The same cutover, pointing at Cloud. | +| 6\. Keep the origin | The Cloud site stays live and read-only for 30 days, then is archived for a further 30 before deletion. The owner can restore it. | The original site is not changed or deleted by Wursor. The owner decides when to cancel the old host. | + +Moves are releases (RL-01 to RL-04 apply): they have a rollback point at the origin, they appear in the audit log, and they cannot complete without an approval that matches the current evidence. Changes made at the source between evidence and cutover void the approval; Wursor re-syncs and asks again. Because a site can be edited while a move is under way, Wursor shows a freeze notice and, if the owner prefers, pauses editing during the cutover window. + +### 11.9 Domains and launch + +1. The owner enters the domain they own. Wursor shows the exact record to add, in the form the common registrars use, with a copy button. + +2. Wursor checks every 30 seconds and reports in words: waiting for the record, the record is wrong (and what it found), or connected. + +3. On connection Wursor requests a certificate and shows "Secure" once it is active. Until then the site stays on its temporary address. + +4. The owner confirms the switch. The temporary address then redirects to the domain. + +5. For a move, the same flow applies, with the extra step of lowering the record's lifetime in advance and a one-click undo until the owner confirms. + +Buying a domain inside the product, and managing email for it, are not in the MVP (section 1.4). The product links to registrar instructions and detects the common registrars. + +## 12. Authentication and request flows + +### 12.1 Sign-in with the authorization code flow and PKCE + +PKCE is a standard, secure sign-in method for browser apps. It protects the code that is exchanged during sign-in so that a stolen code cannot be used by someone else. + +1. The person selects Sign in. The Next.js server generates a code verifier and challenge, a state value and a nonce, stores them in a short-lived encrypted cookie and redirects the browser to the Wursor identity service. + +2. The identity service authenticates the person with a passkey or an emailed link. In V1 it also accepts single sign-on from a company identity provider. + +3. The identity service redirects back with a code. The Next.js server validates the state, exchanges the code and verifier for tokens, validates the identity token and creates a session record on the server. + +4. The browser receives only a session cookie that is Secure, HttpOnly and SameSite=Lax, with a rotating identifier. Refresh tokens are encrypted at rest on the server. + +5. On every request the server loads the session, refreshes the access token when it is near expiry, and calls the Wursor API or the Conductor on the person's behalf. + +Whether to build the identity service or buy a managed one is open decision D-HL-1. The recommendation is to use a mature, audited provider that supports passkeys, OIDC and later SAML, and not to write authentication from scratch. The requirement is the behavior, whoever supplies it: the identity belongs to Wursor and no WordPress account is needed. + +### 12.2 Loading a screen + +A Server Component on the Next.js server reads the session, calls the typed client for the Wursor API (for example, listing projects), and renders HTML that already contains the data. The browser then hydrates interactive parts. Because authenticated pages are rendered dynamically for each person, they are never cached at the edge; only static assets are. + +### 12.3 Taking an action + +Actions such as creating a task use server actions or route handlers. The handler checks the session and a CSRF token, validates the input against the contract schema, calls the Wursor API with the person's access token and returns the result. The Wursor API remains the authority and rechecks permissions; the Next.js server never makes authorization decisions on its own. + +### 12.4 Starting a task and streaming a run + +1. The person submits a task. The Wursor API validates it, writes the task and an outbox event in one database transaction, and returns the task identifier. + +2. The outbox dispatcher sends a signed event to the Conductor, which creates a run and requests a sandbox with a copy of the site, through the platform interface. + +3. The run view asks the Next.js server for a stream token. The Wursor API mints a token with claims for the person, organization, run and scope, valid for two minutes. + +4. The browser connects to https://stream.example.com/runs/{id} with the token in an Authorization header using a streaming fetch client, not a URL parameter, so tokens do not appear in logs. + +5. The Conductor validates the token, sends events with sequence numbers, and resumes from the last sequence on reconnect. + +6. Because the stream origin differs from the application origin, the Conductor sends strict CORS headers that allow only the application origin and only the required headers. + +### 12.5 Previewing a result + +The Conductor registers a preview and returns a one-time URL on the preview origin. The browser embeds it in a sandboxed iframe with no access to the parent. Preview traffic never touches the application origin, so a generated page cannot read the application cookie or call the Wursor API with the person's session. + +### 12.6 Approving a change + +1. The reviewer opens the evidence view. The browser shows the summary from the Wursor API and fetches the bundle from the evidence store through a signed, expiring link issued by the Conductor. + +2. The reviewer chooses Approve. The request carries the task, the diff hash and the evidence hash displayed on screen, plus an idempotency key so that a retry cannot record a second approval. + +3. The Wursor API checks that the person holds the reviewer role, that the hashes match the latest values recorded by the Conductor, and that separation of duties holds where policy requires it. + +4. The Wursor API records the approval and an outbox event. The Conductor verifies the hashes again and starts the release through the platform interface. + +### 12.7 Degraded modes + +The app watches the health of each connected site, each Cloud site and the Conductor. If a site is unreachable for more than 30 seconds, its tasks pause safely and releases to it are blocked, and the interface says so in plain words. For a connected site the message says the site seems to be down at their host; for a Cloud site it says Wursor is investigating and shows the status. A move in progress pauses at its next safe point and can resume. History and evidence stay readable because they live in Wursor. If the Conductor is unavailable, the app serves evidence and history from stored copies and disables new work with an explanation. Each mode ends automatically when health checks pass again. + +### 12.8 Starting a new site on Wursor Cloud + +1. The person signs up, chooses Start on Wursor Cloud and answers the brief. The Next.js server stores it as a draft project with no site yet. + +2. The Conductor generates three design directions in sandboxes, each a real preview of the homepage on the preview origin, and streams them as they finish. + +3. The person picks a direction. The Wursor API creates the task, records the choice and asks the hosting plane to reserve a Cloud site in parallel, so that provisioning does not wait for the build. + +4. The agent builds the full site on a safe copy. The person watches the run, answers business questions and reviews the preview and evidence. + +5. On approval, bound to hashes, the Conductor publishes to the reserved Cloud site, runs the smoke test and marks the site live at its temporary address. + +6. The Wursor API records the site with home set to Cloud and access level Full, and the audit log records every step. + +### 12.9 Connecting through WordPress.com + +1. The person chooses Connect my WordPress, then WordPress.com. The Next.js server starts an OAuth authorization with PKCE and a state value, as in 12.1, against WordPress.com. + +2. WordPress.com shows its own permission screen. On return, the server validates state, and the Wursor API sends the code to the Conductor, which exchanges it and stores the token in the secrets broker. The browser never sees it. + +3. The Conductor runs Describe, determines the access level and returns the summary. The site is recorded with home set to Connected and the connection method recorded. + +4. Revoking in WordPress.com or in Wursor deletes the token and stops all requests within 60 seconds. + +### 12.10 Moving a site + +1. The person starts a move from the site page. The Wursor API creates a move record in the Planned state and the Conductor runs Export on the source. + +2. Import runs in a sandbox first (a dry run against a copy of the destination), then against the real destination as a staged site that visitors do not see. + +3. The verification workers compare source and destination page by page and assemble the evidence bundle. The Wursor API shows the report and holds the move at In review. + +4. The reviewer approves with the hashes displayed, as in 12.6. The Conductor re-checks the hashes and the source's freshness, then starts the cutover. + +5. The person switches the domain (11.9) and confirms. The move record moves to Complete; the origin stays for the retention period. + +6. If any check fails, or the person cancels before confirming, the Conductor restores the pre-move state at the origin and the destination is discarded. The audit log records the reason. + +## 13. Data ownership and data model + +| **Data** | **System of record** | **Notes** | +|---|---|---| +| Users, sessions, organizations, memberships | Wursor API and identity service | Sessions and refresh tokens are held server-side, encrypted, with a short idle timeout. | +| Projects, sites, tasks, approvals, policies | Wursor API (PostgreSQL) | A site record holds the connection state and the latest Describe result, not the site itself. | +| Run detail, events, tool calls | Conductor | Authoritative; the Wursor API holds summaries. | +| Evidence bundles | Evidence store | The Wursor API holds hashes and summaries only. | +| Secrets and connector credentials | Secrets broker | Never in the browser, the Wursor database or customer sites. Customer sites hold only the pairing key. | +| Audit trail | Wursor API (hash-chained) with a copy in the Conductor | Two chains allow cross-checking. | +| The content and users of a connected site | The customer's site | Wursor reads what it needs through the platform interface and keeps copies only in sandboxes and backups. | +| The content and users of a Cloud site | The hosting plane (Wursor Cloud) | Wursor is the host, so it is responsible for the site's availability and backups. The customer can export it at any time. | +| Domains and certificates | Wursor API (records) and the hosting plane (certificates) | The customer owns the domain at their registrar; Wursor holds the connection state only. | +| Subscriptions and invoices | Billing provider, with a reference in the Wursor API | Hosting charge and work usage are recorded separately. | + +Every table that holds organization data has an organization_id column, and every query is scoped by it in a shared data-access layer, so a missing check cannot expose another tenant's rows. Row-level security in PostgreSQL provides a second barrier. + +| **Table** | **Key columns** | **Notes** | +|---|---|---| +| wu_orgs | id, name, plan, policy_id, created_at | The tenant. | +| wu_users, wu_memberships | user_id, email, org_id, role, status | Roles: owner, builder, reviewer, steward, admin. | +| wu_projects | id, org_id, lane, name, repo_ref, memory_ref, status | Lane is A, B or C. | +| wu_sites | id, project_id, platform, home, access_level, connection_id, cloud_site_ref, domain_id, pairing_state, last_describe_json, last_seen_at | Platform is wordpress in this scope. Home is cloud or connected; access level is full or content. | +| wu_connections | id, site_id, method, status, token_ref, scopes_json, created_at, revoked_at | Method is wpcom, plugin or app_password. Tokens stay in the broker. | +| wu_briefs | id, project_id, answers_json, chosen_direction, created_at | The new-site brief and the direction chosen. | +| wu_domains | id, site_id, name, state, dns_expected_json, certificate_state, checked_at | State: waiting, wrong_record, connected, live. | +| wu_moves | id, site_id, direction, state, source_ref, dest_ref, evidence_id, approval_id, retain_until | Direction is out or in. State follows the task states plus Cutover and Complete. | +| wu_subscriptions | id, org_id, plan, hosting_sites, work_allowance, billing_ref | References the billing provider. | +| wu_tasks | id, org_id, project_id, created_by, state, description, plan_ref | State machine from section 4.2. | +| wu_runs | id, task_id, conductor_run_id, state, cost_cents, started_at, ended_at | The Conductor holds run detail. | +| wu_evidence | id, run_id, diff_hash, bundle_hash, summary_json, signature, store_ref | Summary only. | +| wu_approvals | id, task_id, reviewer_id, diff_hash, bundle_hash, decision, comment, created_at | Hashes recorded at the time of the decision. | +| wu_policies | id, org_id, version, rules_json | Versioned; runs record the version used. | +| wu_connectors | id, org_id, kind, config_ref, status | References only; secrets stay in the broker. | +| wu_audit | id, org_id, actor, action, subject, data_json, prev_hash, hash, created_at | Append-only, hash-chained. | +| wu_outbox, wu_inbox | topic, payload_json, idempotency_key, attempts, delivered_at | Reliable delivery and de-duplication of events. | + +## 14. API contract, caching and cross-origin rules + +### 14.1 Contract-first workflow + +1. Change the OpenAPI description in the repository. + +2. Generate the TypeScript client, request validators and a mock server. + +3. Implement the Wursor API and Conductor endpoints to match. Contract tests call the real services with generated requests and validate real responses against the schemas. + +4. A breaking change requires a version bump and a deprecation window of at least one release. + +### 14.2 Route groups + +| **Group** | **Served by** | **Notes** | +|---|---|---| +| /v1/projects, /v1/tasks, /v1/sites | Wursor API | Core objects. Called by the Next.js server with the person's bearer token. | +| /v1/approvals, /v1/releases | Wursor API | Approvals carry hashes and an idempotency key. | +| /v1/policies, /v1/connectors, /v1/audit | Wursor API | Administration, with role checks. | +| /v1/briefs, /v1/directions | Wursor API | Create a brief and fetch the three design directions for a new site. | +| /v1/connections, /v1/connections/{id}/revoke | Wursor API | Start and complete a WordPress connection; the OAuth callback is handled by the Next.js server and passed to the API. | +| /v1/sites/{id}/moves, /v1/moves/{id} | Wursor API | Plan, approve, cut over, cancel and roll back a move. Approvals carry hashes. | +| /v1/sites/{id}/domains | Wursor API | Add a domain, read its status, confirm the switch. | +| /v1/sites/{id}/archive | Wursor API | Request a complete archive; returns a signed, expiring download link. | +| /v1/subscriptions | Wursor API | Plan, hosting and usage. Changes that affect a site's home start a move first. | +| /v1/runs/{id}/stream-token | Wursor API | Mints a two-minute stream token. | +| /runs/{id} (stream), /runs/{id}/answers | Conductor | Called by the browser with a stream token and by the Next.js server with a service token. | +| /platform/wordpress/\* (on customer sites) | Connector plugin | Signed requests from the Conductor only; never called by the browser. | +| /hosting/\* (Wursor Cloud) | Hosting plane | Provision, backup, restore and health for Cloud sites; called only by the Conductor with a service token. | +| /hooks/revalidate | Next.js | Receives signed events from the Wursor API to refresh cached public pages. | + +### 14.3 Caching rules + +- Authenticated pages and API responses are never stored in a shared cache. + +- Marketing and documentation pages are static and revalidated by signed event. + +- The Next.js server may keep per-request memoization and short per-session caches, with a maximum age of 30 seconds, keyed by organization and person. + +- Static assets are fingerprinted and cached for a year. + +### 14.4 Cross-origin and request-forgery rules + +| **Surface** | **Rule** | +|---|---| +| Browser to Next.js | Same origin. Session cookie, SameSite=Lax, CSRF token on non-idempotent requests. | +| Browser to Conductor | Cross-origin with a stream token only; no cookies are sent. CORS allows the application origin, the Authorization header and the GET and POST methods. | +| Next.js to Wursor API | Server to server over a private network where possible, with bearer tokens. | +| Wursor API and Conductor to each other | Signed events with timestamps and idempotency keys. | +| Conductor to customer sites | Signed requests with replay protection through the connector plugin. | +| Preview origin | No cookies, no API access, embedded in a sandboxed iframe. | + +## 15. Frontend architecture and screens + +### 15.1 Screens + +| **Screen** | **Contents** | **Primary personas and requirements** | +|---|---|---| +| Start (first run) | The three starting paths, in plain words, with the exit stated. | All; SH-01, SH-13 | +| New-site brief and directions | Five short questions, then three design directions shown as real previews. | Owner; SH-03 | +| Sites and projects | Project list; site cards that show where each site lives and its access level; add-a-site flow. | All; ID-01, FL-01, HL-10, SH-02, SH-06 | +| Connect a site | WordPress.com sign-in or plugin code, then the summary and access level. | Owner, steward; SH-05, SH-06 | +| Task composer | Plain-language description, lane suggestion, attachments, budget, plan preview. | Owner, builder; AG-01, AG-02 | +| Run view | Streaming timeline of agent steps, questions, file changes, live status, pause and cancel. | Builder; AG-03, UX-01, SB-02 | +| Preview | Embedded isolated preview with width presets and editor-mode toggle. | Owner, builder; SB-05, UX-02 | +| Evidence and review | Plain-language summary of checks and risk first, with visual diffs, the code diff and hashes one level deeper; approve or request changes. | Reviewer, owner; VR-01 to VR-07, RV-01 to RV-07 | +| Release and rollback | Release plan, backup status, rollback button, post-release monitoring. | Reviewer, steward; RL-01 to RL-04 | +| Site dossier | What Wursor knows about a site: environment, plugins, risk classes, history. | Steward; MM-01, FL-02 | +| Where this lives | On the site page: home, access level, domain, backups, and the moves (Move to my own WordPress, Host on Wursor Cloud). | Owner, steward; SH-02, SH-08, SH-09 | +| Move | Destination, report of what will travel, evidence, approval, cutover, completion. | Owner, reviewer; SH-08 to SH-11 | +| Domains and launch | Add a domain, live DNS status, certificate, switch and undo. | Owner; SH-12 | +| Settings | Members, policies, connectors, budgets, audit export, plan and billing with hosting and work usage shown separately. | Admin; ID-02, CN-01, AU-02, SH-15 | + +### 15.2 Rendering strategy + +| **Screen type** | **Rendering** | **Reason** | +|---|---|---| +| Marketing, docs, changelog | Static with revalidation | Public, fast, good for search. | +| Projects, settings, audit | Server Components, dynamic | Authenticated data; no shared cache. | +| Task composer | Server Component shell with client form | Needs interactivity; the submit uses a server action. | +| Run view | Client component with streaming fetch | Long-lived connection, incremental updates. | +| Preview | Client component with sandboxed iframe | Isolation from the application. | +| Evidence and review | Server-rendered summary with client diff viewer | The summary loads fast; the diff viewer is heavy. | +| Site dossier | Server Components | Mostly read-only text and tables. | +| Brief and directions | Client form, streamed previews | Directions arrive one at a time and each is a sandboxed preview. | +| Where this lives, Move, Domains | Server Components with client status panels | Mostly stored state; DNS and move progress poll or stream. | + +### 15.3 State and data fetching + +- Server data is fetched on the server where possible; client fetching uses a query library with the generated client and de-duplicates requests. + +- The streaming client keeps a local event buffer keyed by sequence number, applies events idempotently and exposes connection state to the interface (connected, reconnecting, behind). + +- Optimistic updates are limited to low-risk actions such as comments. Approvals and releases are never optimistic. + +### 15.4 Progressive web app behavior + +The manifest and service worker are served by Next.js at the root scope. The service worker caches the shell and static assets, shows an offline page, and never stores authenticated data. Because the application owns its own origin, push notifications and install prompts are straightforward, which matters for approving work from a phone. + +## 16. Designing for non-technical owners + +The goal is an interface that just works for someone who does not know what a plugin, a diff or a staging copy is. That is a product requirement with its own tests (HL-12), not a styling preference. The rules below apply to every screen. + +1. **Say what happened and what it means, not how it was done.** Write "Your homepage now loads in 1.8 seconds and the contact form still works", not "Lighthouse score 94, form test passed". + +2. **Make the safe path the default.** Work happens on a copy, backups come first, and the next step is always the safest one. + +3. **Show proof in the owner's terms.** Before-and-after pictures, a list of the pages checked, and an honest list of what was not checked. + +4. **Keep technical detail one tap away.** Diffs, hashes, logs and traces are available in an expandable section for those who want them. + +5. **Ask only what the owner can answer.** The agent asks about business intent, such as "Should the sale banner stay up?", not about implementation, such as "Should I use a block pattern or a shortcode?". + +6. **Make every action reversible, and say so.** The rollback button is always visible after a release. + +7. **Never make the owner choose a host.** The default for a first-time owner is Wursor Cloud with no settings to see. Anyone with a site connects it, and anyone can leave. + +8. **Say what a site's access means, not how it is granted.** Show "Full access" or "Content only" and what that allows, never scopes or capabilities. + +| **Moment** | **What the owner sees** | **How it is measured** | +|---|---|---| +| Starting a new site | Five short questions and three design directions to choose from. | Median time from brief to first preview under 10 minutes; at least 70% choose a direction without a restart. | +| Connecting a site | WordPress.com sign-in or two instructions and a code, then a plain-language summary and the access level. | Median time to a connected site under 5 minutes; 80% succeed unaided. | +| Connecting a domain | The exact record to add, live status in words, a certificate that appears by itself. | At least 8 of 10 owners connect unaided within 30 minutes of the DNS change. | +| Moving a site | A list of what will travel and what will not, a before-and-after comparison, a reversible switch. | At least 80% of moves complete without a support contact, with zero content loss. | +| Describing a change | A text box and a short confirmation of what Wursor understood. | Share of tasks needing a clarifying question the owner could not answer: under 10%. | +| Reviewing | Summary, risk in words, before-and-after pictures, what was not checked. | Share of Class 1 reviews completed without opening the diff: at least 80% (RV-01). | +| Approving | One clear button that names what will happen. | Approval error or regret rate (rollbacks within 24 hours): under 3%. | +| Rolling back | One button and a confirmation of what will be restored. | Time to a restored site in drills: under 10 minutes. | + +## 17. Command-line client + +The CLI is a Node program built from the same monorepo package as the web client. It signs in with the device authorization flow, stores tokens in the operating system keychain, and offers commands to create a task, follow a run, open a preview, show evidence, approve a change when the person has the right, and print a release plan. The CLI exists so that builders who prefer a terminal and outside clients such as Buzz can use the same API surface. It cannot do anything the web application cannot do, and it enforces the same server-side checks. + +| **Command** | **Behavior** | +|---|---| +| wursor login | Device authorization flow; opens the browser to confirm a code. | +| wursor task create "..." --project P | Creates a task and prints its identifier and plan. | +| wursor run follow T | Streams events to the terminal; resumes after a dropped connection. | +| wursor evidence show T | Prints the evidence summary and hashes. | +| wursor approve T --diff H1 --evidence H2 | Approves with explicit hashes; fails if they do not match the latest. | +| wursor release plan T | Shows what will be applied and where. | + +## 18. Security model and role matrix + +### 18.1 Trust boundaries + +| **Boundary** | **Threat** | **Control** | +|---|---|---| +| Browser to Next.js | Session theft, cross-site request forgery. | HttpOnly session cookie, rotation on sign-in, CSRF token, strict content security policy using nonces. | +| Next.js to Wursor API | Stolen service credentials, confused deputy. | User-bound access tokens (not a shared admin credential); short lifetimes; the Wursor API rechecks every permission. | +| Browser to Conductor | Stolen stream token, cross-origin abuse. | Two-minute run-scoped token in a header, strict CORS, no cookies. | +| Conductor to customer site | Forged or replayed requests; a stolen pairing key. | Per-site signing key, timestamps, unique request identifiers, revocation from either side, key rotation. | +| Connector plugin on customer sites | Vulnerability in the plugin exposes many sites at once. | Minimal footprint, abilities with permission checks, signed releases and automatic updates, third-party review, security contact (HL-18). | +| Cloud sites to one another | A vulnerable or malicious site reads or damages a neighbor. | Per-site isolation (container or microVM), separate database credentials, no shared file space, egress limits, and an isolation test in CI (SH-14). | +| Cloud sites to the control plane | A compromised Cloud site reaches Wursor internals. | Hosting plane on a separate network, no inbound path to the Wursor API, credentials per site and revocable. | +| WordPress.com and application-password credentials | Token theft or over-broad grants. | Tokens held only in the secrets broker, least-privilege scopes, revocation from either side, and a notice when scopes change. | +| Moves | A move copies a site to the wrong destination or leaks its data. | Destination ownership check, approval bound to hashes, signed expiring archive links, and deletion of staged copies after completion. | +| Public attack surface | Attacks on login and APIs. | Rate limits at the edge, passkey sign-in, web application firewall, private network between services. | +| Supply chain | Compromised npm dependency in the frontend. | Lockfile, provenance checks, dependency review, minimal dependencies, separate build credentials. | +| Generated code to application | Preview reads app state. | Different registrable domain, sandboxed iframe, no credentials. | +| Site content to agent | Prompt injection from existing site content. | Content-as-data posture, policy gate on tool calls after reading untrusted content. | + +### 18.2 Role matrix + +| **Action** | **Owner** | **Builder** | **Reviewer** | **Steward** | **Admin** | **Agent** | +|---|---|---|---|---|---|---| +| Create a task | Yes | Yes | No | Yes | Yes | No | +| Answer agent questions | Yes | Yes | No | Yes | Yes | No | +| Approve a change | Policy | No | Yes | Policy | No | Never | +| Release to production | Policy | No | Yes | Yes | No | Never | +| Change policy | No | No | No | No | Yes | Never | +| Manage connectors and sites | No | No | No | Yes | Yes | Never | +| Start or approve a move | Policy | No | Yes | Policy | No | Never | +| Connect or change a domain | Policy | No | No | Yes | Yes | Never | +| Change plan and hosting | Policy | No | No | No | Yes | Never | +| Download a site archive | Yes | No | No | Yes | Yes | No | +| Read audit log | Yes | No | Yes | Yes | Yes | No | +| Export evidence | Yes | Yes | Yes | Yes | Yes | No | + +"Policy" means the action is allowed only if the organization's policy grants it to that role, and never to the same account that started the run when separation of duties is on. The agent column is deliberately negative for every action that changes authority: the agent can propose, never approve or release. + +### 18.3 Known ecosystem risk + +Headless WordPress tooling has had security issues. The Faust plugin, a common bridge between WordPress and Next.js, was affected by a published vulnerability in version 1.8.0 and has since been updated (1.8.12 at the time of this research). Wursor does not depend on Faust or on any bridge plugin to run its own product. The lesson still applies to the connector plugin Wursor does ship: choose the smallest surface, pin versions and review advisories as part of every release. + +## 19. Performance and capacity + +| **Budget** | **Target (hypothesis)** | **Reason** | +|---|---|---| +| Authenticated page time to first byte | Under 250 ms at p95 for server-rendered screens, including the call to the Wursor API | Both services are Wursor's own and can be placed together. | +| Largest contentful paint on the projects screen | Under 2.0 s on a mid-range phone over 4G | Server rendering helps; keep client JavaScript small. | +| Client JavaScript on first load | Under 200 kB compressed for the main route | Server Components reduce the bundle. | +| Stream first event after connect | Under 500 ms | Direct connection to the Conductor. | +| Wursor API read latency | Under 100 ms p95 for list routes with 10,000 tasks per organization | Indexes begin with organization_id. | +| Request to a customer site | Under 1.5 s p95 for Describe and health calls | Customer sites vary widely; budgets are measured per site and shown to the owner when slow. | +| Cloud site provisioning | Live at a temporary address within 10 minutes of approval at p90 | The first-time owner is waiting; provisioning starts in parallel with the build (12.8). | +| Move of a typical site (up to 2 GB) | Verified copy ready for review within 30 minutes | Sets the expectation the interface gives the owner. | +| Domain status check | Updated every 30 seconds while waiting | Keeps the owner informed without refreshing. | +| Edge regions | Frontend in two or more regions; API and Conductor in one primary region at MVP | Reduces latency for static assets and page rendering; writes still go to the primary region. | + +Because the Wursor API is Wursor's own service, the extra network hop between the Next.js server and the control plane is short and under the team's control, which is an advantage over using WordPress as the control plane. The main performance unknown is customer sites, which Wursor does not control. The mitigation is to keep customer-site calls out of page loads: Wursor shows stored results and refreshes them in the background. + +## 20. Testing strategy + +| **Level** | **What is tested** | +|---|---| +| Unit | Platform packages, session handling, token exchange, stream client buffering, CSRF handling, policy evaluation, hash calculation. | +| Contract | Generated requests against the real Wursor API and Conductor in CI; responses validated against schemas. The platform contract suite runs against the WordPress target and the fake target. | +| Connector plugin | PHPUnit with WordPress for every route and ability, with replayed, expired and unsigned requests, and the pairing, revocation and removal flows on the oldest and newest supported WordPress versions. | +| Component and integration | Screens with the mock server, including degraded modes and reconnecting streams. | +| End-to-end (Playwright) | Sign-in with PKCE, connecting a site, creating a task, streaming with forced disconnects, preview, approval, release, rollback, PWA install and the offline page. | +| Usability | Moderated tests with non-technical owners for connect, review and approve journeys against the measures in section 16. | +| Security | Token handling review, cross-origin tests, cross-tenant access suite, dependency and secret scans, third-party penetration test before general availability. | +| Hosting | Provision and delete Cloud sites in a loop; cross-site isolation tests; restore drills from daily backups; certificate issuance and renewal; a patch-release drill. | +| Moves | Round trips (Cloud to connected to Cloud) on a set of 10 sites with different themes, plugins and forms; comparison of every page, post, media item and form; interruption and resume; cancel and rollback; Content-only destinations with the not-moving report. | +| Connection methods | WordPress.com sign-in, plugin and application password against test sites on each; revocation within 60 seconds; scope-change handling. | +| Resilience | Stop a connected site mid-run and verify degraded mode; stop the Conductor and verify evidence reading; stop a Cloud site and verify the status message. | +| Performance | Lighthouse budgets in CI for key screens and load tests for server rendering with latency injected. | + +## 21. Deployment and operations + +- **Monorepo.** Packages for the web app, the Wursor API, the Conductor, the CLI, the typed client, contracts, the platform interface, the WordPress package, the fake target and the connector plugin. One pull request can change a contract and every consumer. + +- **Deployables.** The Next.js application on a platform that supports server rendering and streaming responses; the Wursor API and Conductor (initially one service with two modules); the identity service (managed or self-run); PostgreSQL with point-in-time recovery; the preview router; the evidence store. + +- **Environments.** Local containers for everything, a staging environment, and production. Preview deployments of the frontend per pull request point at a shared staging backend. + +- **Configuration and secrets.** Each deployable receives only its own secrets. The frontend never receives model keys or site credentials. + +- **Connector plugin releases.** Built, signed and published through a release channel, with a staged rollout and the ability to halt it. + +- **Observability.** A trace identifier starts in the Next.js server and is propagated to the Wursor API, the Conductor and the connector plugin, so one slow screen can be followed across all of them. + +- **Hosting plane.** A separate environment on WeOwn Cloud for Cloud sites: per-site isolation, a provisioning service, a backup service with restore tests, certificate management, monitoring and an on-call rota. It has its own release process and is not deployed with the web app. + +- **Backups and recovery.** Database backups every 15 minutes with point-in-time recovery, evidence store versioning, and a quarterly restore drill. Session store backups can safely be lost, because people simply sign in again. + +- **Incident handling.** Runbooks for identity provider failure, stream origin failure, key rotation, a faulty connector plugin release, a customer-site outage, a Cloud host outage, a compromised Cloud site, an abuse report, a failed certificate renewal and a move that fails halfway. + +## 22. Rollout milestones + +| **Milestone** | **Estimate** | **Scope** | +|---|---|---| +| M0: Foundations | Weeks 1 to 5 | Monorepo, OpenAPI contract and generated client, Wursor API with PostgreSQL and migrations, identity with PKCE sign-in, session layer, Conductor stub with a fake stream, the platform interface with the fake target and contract suite, staging environment. Phase 0 spikes: Cloud provisioning on WeOwn Cloud versus a partner, WordPress.com connection capabilities. | +| M1: Core loop and ways to connect | Weeks 6 to 13 | WordPress target and connector plugin (pairing, describe, access levels, test copy), WordPress.com sign-in, task creation, real runs, streaming with resume, preview, evidence summary, approvals bound to hashes, degraded modes. First Cloud site provisioned by hand through the interface. | +| M2: New sites, Cloud and release | Weeks 14 to 22 | Brief and design directions, first build, Cloud provisioning and temporary address, domain connect, release to Cloud and to a connected empty site with rollback, move in both directions with evidence and approval, archive download, hosted and connect plans in billing, audit log, plain-language review screens and usability tests with first-time owners. Private beta begins. | +| M3: V1 features | Weeks 23 to 40 | Lane B app packs, Lane C adoption ladder and replayable scripts, fleet connectors, application-password connection, memory, budgets, CLI, PWA with push, single sign-on, second sandbox provider, Cloud availability target and status page, domain purchase, connector plugin security review. | +| M4: Hardening | Weeks 41 to 46 | Third-party penetration test including the hosting plane, load and resilience tests, move round-trip soak test, runbooks and the general availability decision. | + +This is about fourteen weeks longer than the Hybrid plan, which reaches hardening in about 32 weeks. About nine weeks of the difference is the work of owning identity, sessions and the control-plane API, plus the platform interface and its test double. About five more come from hosting and moves: provisioning, domains, export and import, and the hosting plane's operations. If provisioning goes through a partner for the first release (D-HL-7), most of those five weeks move later and the hosting plane work shrinks. These estimates are judgments, not measurements, and the Phase 0 spikes in the roadmap exist to test them. The Unified PRD has not yet been updated to match this revision, so its roadmap and decision matrix still describe the earlier Headless design. + +## 23. Pattern risks and exit ramps + +| **Risk** | **Early warning** | **Response** | +|---|---|---| +| Authentication bugs in the identity, token and session layers | Findings in the first security review; unexplained sign-outs. | Use a mature, audited authentication provider; keep custom logic minimal; review before beta. | +| The platform interface is designed from one example and does not fit the next platform | The fake target needs special cases; WordPress concepts leak into the interface. | Keep the contract suite and dependency check as release blockers; treat a second platform as research first. | +| The extra build cost is never repaid | Every customer in the first two years is on WordPress and none asks for another platform. | Review the case at Gate G2; keep the interface thin so it costs little to maintain. | +| The connector plugin becomes an attack surface | Vulnerability reports; slow update uptake. | Third-party review, signed releases, automatic updates, minimal capabilities, a way to halt a faulty release. | +| Onboarding friction lowers activation | Drop-off between account creation and the first connected site. | Guided connection, a sample project with a sandbox site, and measurement of connect time and success. | +| More moving parts than a small team can run | On-call pages from several deployables; slow incident response. | Deploy the API and Conductor together at MVP, buy managed services, reduce environments. | +| Hosting makes Wursor an operations business | Pages for Cloud sites outnumber pages for the product; patching falls behind; abuse reports pile up. | Decide staffing before launch (D-HL-7); start with partner provisioning if on-call cannot be staffed; cap Cloud sites per plan during beta. | +| A compromised or abusive Cloud site harms others or the brand | Spam, outbound attacks, takedown requests. | Isolation, egress limits, automated scanning, an acceptable-use policy and a fast suspend path. | +| Moves lose or alter content | Mismatch counts in the comparison; owner reports after a move. | Verified copy, page-by-page evidence, original kept for 30 days, and zero-loss as a release blocker (SH-08, SH-09). | +| Content-only access disappoints owners | Support contacts and cancellations after a task is blocked. | Show the level early, explain what changes it, and offer a move to Cloud as the clear next step. | +| WordPress.com or host rules limit what Wursor may do | API changes, plan restrictions, terms that forbid automated changes. | Verify in Phase 0, keep the plugin path as the full-access route, and treat WordPress.com as content-first. | +| Domain and DNS problems dominate support | Tickets about records and certificates. | Plain steps, live checks that name the exact error, detection of common registrars, and a guided undo. | +| Customer sites depend on front-end behavior of their plugins | Adoption checks fail on sites with unusual plugins. | Wursor works on a copy of the site, so this shows up in tests, not production; document supported setups. | + +### 23.1 Exit ramps + +If the cost of owning the control plane proves too high, there are two ways to reduce it without discarding the work. The first is to collapse deployables: the Wursor API and the Conductor already run as one service at MVP, and the identity service can be a managed product, which removes most operational burden. The second, more drastic, is to move the control-plane data into a WordPress-hosted plugin as in the Hybrid pattern. Because the web app talks to a contract and not to a database, that change would affect the Wursor API and the sign-in layer but not the screens. A further exit ramp applies to hosting: if running Cloud proves too heavy, Cloud provisioning can move to a partner behind the same interface (SH-16) and existing Cloud sites can be moved out with the same tools that customers use, so no customer is stranded. The signals that an exit is worth considering are low activation caused by the connection step, a team too small to operate the deployables, and no evidence by the second beta that customers outside WordPress are wanted. + +## 24. Headless requirements + +These requirements apply only to the Headless pattern in this revision. They replace HL-01 to HL-16 from the earlier version, and the numbers do not map one to one. The SH family, added in revision 3, covers where a site lives. The PX family, added in revision 4, covers the product surfaces as designed. Shared requirements are in section 6. + +**Headless requirements (HL)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| HL-01 | The frontend is a Next.js application (App Router, TypeScript) deployed on its own domain, separate from every target platform. | MVP | The full core journey (create task, watch run, preview, review, approve) works in an environment where no WordPress site is part of the application stack. | +| HL-02 | Wursor owns its control plane. Users, organizations, projects, tasks, approvals, policies and the audit log are stored in Wursor's own database (PostgreSQL) and served by the Wursor API. No product data is stored inside a customer's site. | MVP | Removing the connector plugin from a customer site deletes no Wursor records. A database restore drill recovers the control plane with no access to any customer site. | +| HL-03 | Identity is Wursor-owned. People sign in with passkeys or an emailed link. The Next.js server and the identity service use the authorization code flow with PKCE. Single sign-on (OIDC or SAML) is added in V1. | MVP | Sign-in works with no WordPress account. A test that submits a wrong code verifier is rejected, and a replayed authorization code is rejected. | +| HL-04 | A backend for frontend holds all access and refresh tokens on the server. The browser receives only an HttpOnly session cookie and, while watching a run, a stream token. | MVP | Scans of browser storage, page source and responses during an end-to-end run find no access or refresh token. | +| HL-05 | The API is contract-first. An OpenAPI description in the repository is the source of truth, and the typed client, request validators and mock server are generated from it. | MVP | Contract tests call the real Wursor API and Conductor with generated requests and validate responses. A breaking change without a version bump fails CI. | +| HL-06 | The browser opens event streams directly to the Conductor with a two-minute, run-scoped stream token sent in an Authorization header, and resumes after a drop from the last event number. | MVP | Across 50 forced disconnects, no event is lost or duplicated, and tokens never appear in access logs. | +| HL-07 | Authenticated screens (Task Room, Approvals, Sites) are rendered dynamically and never stored in a shared cache. Only marketing, documentation and fingerprinted assets are cached. | MVP | A cache audit shows no authenticated response with a shared cache header; a cross-tenant cache test fails to retrieve another user's page. | +| HL-08 | Cross-origin policy is strict: an explicit allowlist, no wildcards, no credentials on cross-origin requests, and CSRF protection on every state-changing request made through the Next.js server. | MVP | An automated cross-origin test suite passes. A forged request without a valid CSRF token is rejected. | +| HL-09 | A target platform interface defines the operations Wursor needs from any platform: connect, describe (inventory), back up, create a test copy, apply a change, run platform checks, roll back, report health, export and import, plus provision for platforms Wursor can host. Each platform declares which operations it supports and at what access level (full or content only). Every agent action on a customer site goes through this interface. | MVP | A dependency check shows no platform-specific code outside platform packages. The interface description is versioned, and capability discovery drives which options the interface shows. | +| HL-10 | The WordPress target is implemented by a small connector plugin installed on the customer's site. It pairs with a one-time code, signs and verifies every request with a per-site key, supports replay protection, exposes only the operations the interface needs, can be revoked from either side, and removes its data on uninstall. | MVP | In a usability test with five site owners at least four pair a site in under five minutes. A revoked key is rejected within 60 seconds. Uninstalling leaves no Wursor data in the site database. | +| HL-11 | A fake target platform exists for tests. The same contract test suite runs against the WordPress target and the fake target. | MVP | Both implementations pass the suite in CI, and a change to the interface that breaks either one fails the build. | +| HL-12 | The interface is written for non-technical owners. Primary screens use plain language, avoid unexplained technical terms, and put technical detail in an expandable section. | MVP | Primary copy scores at or below a grade 9 reading level in an automated check. In a usability test with five owners, at least four complete a connect-describe-review journey without help. | +| HL-13 | Degraded modes are explicit. If a connected site is unreachable, tasks for it pause safely and releases are blocked, but history and evidence stay readable. If the Conductor is unavailable, the app reads evidence and history from the stored copies and disables new work with an explanation. | V1 | Fault injection that stops a test site, and separately the Conductor, shows the expected banner, read-only behavior and automatic recovery within 60 seconds of restoration. | +| HL-14 | A monorepo holds the web app, the Wursor API, the Conductor, the typed client, shared UI, platform packages (WordPress, fake), the connector plugin and the infrastructure code. | V1 | One pull request can change a contract and all its consumers. CI builds and tests only the packages affected by a change. | +| HL-15 | The web app is a progressive web app: installable, caches the app shell, shows read-only copies of recent tasks offline, and sends push notifications for approvals and finished runs with the person's opt-in. | V1 | Lighthouse PWA checks pass. Push notifications arrive within 30 seconds on iOS and Android installs in a test. | +| HL-16 | Because the API is the product surface, a command-line client (device authorization flow) and outside clients such as Buzz use the same API and the same server-side checks as the web app. | V1 | Every CLI action is also available in the web app. A test shows that an outside client cannot do anything the person could not do in the app. | +| HL-17 | A trace identifier starts in the browser or the Next.js server and flows through the Wursor API, the Conductor and the connector plugin, and dashboards show latency per hop. | V1 | One slow screen can be followed across all hops in the tracing tool within five minutes in an on-call drill. | +| HL-18 | The connector plugin is treated as a security product: signed releases, an automatic-update option, a published security contact, a third-party review before beta, and a minimal footprint on customer sites. | V1 | The review finds no critical issue open at beta. An update released to the update channel reaches 90% of paired sites within 48 hours in a test fleet. | +| HL-19 | Regional edge deployment of the web app and regional streaming endpoints for read-heavy routes. | V2 | Median time to first byte for authenticated screens is under 300 ms in two target regions. | + +**Site origin and hosting requirements (SH)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| SH-01 | First run offers three starting paths: Start on Wursor Cloud, Connect my WordPress, and Build here and publish to my WordPress. Every path ends in the same safe change loop (safe copy, preview, approval, record), and the choice can be changed later. | MVP | In a usability test with five first-time owners at least four pick a path and reach a first preview without help. No path needs a developer account. | +| SH-02 | Where a site is built and where it lives are separate. Every site has a home (Wursor Cloud or a connected WordPress) and an access level. All work happens on a safe copy in Wursor whatever the home, and the home and access level are shown on every site. | MVP | A test with one Cloud site and one connected site runs the same task flow on both. Site card, site page and approval screen all show home and access level. | +| SH-03 | For a brand-new site Wursor asks for a short brief (what the business does, who it is for, the one thing visitors should do, the pages wanted, the tone) and offers three design directions before building. The first build happens on a safe copy. | MVP | Median time from brief to first preview is under 10 minutes. At least 70% of first-time owners choose a direction without asking for a restart. | +| SH-04 | Wursor Cloud provisions a WordPress site on WeOwn Cloud with a temporary address, SSL, daily verified backups, automatic security updates and uptime monitoring. No server settings are shown to the owner. | MVP | A site is live at a temporary address within 10 minutes of approval at p90. A restore drill from the daily backup succeeds. SSL is valid at provisioning. | +| SH-05 | People can connect an existing or empty WordPress site in three ways: WordPress.com sign-in (OAuth), the connector plugin with a one-time code (self-hosted, any host), or an application password where the plugin cannot be installed. Wursor detects which fits and explains the choice. | MVP (WordPress.com and plugin); V1 (application password) | Median connect time is under 5 minutes and 80% succeed unaided. A revoked connection stops working within 60 seconds from either side. | +| SH-06 | On connecting, Wursor determines whether it has Full access (theme, plugins, content, settings) or Content only (pages, posts, media, menus), shows the level on every site, and explains in plain words what cannot be done and what would change it. A task that needs more access is stopped before an agent starts. | MVP | On a Content-only site, a request to change the theme is stopped in the composer with a plain reason and a next step, and no run starts. | +| SH-07 | An empty connected WordPress site can be the publish target for a new site. Wursor builds on a safe copy and publishes the approved result to it as a release with a rollback point. | MVP | A site built from a brief publishes to a fresh WordPress.com site and to a self-hosted site with the plugin. Rollback restores the empty state. | +| SH-08 | An owner can move a Cloud site to a WordPress site they own, at any time and at no charge. Wursor transfers content, media, theme, plugins, settings and users, verifies the copy, and keeps the original live until the owner confirms. | MVP | On a test set of 10 sites every page, post, media item and form on the original is present and working on the destination. The original stays live until the owner confirms the switch. | +| SH-09 | An owner can move a connected site onto Wursor Cloud. Wursor imports it, verifies the copy at a temporary address, and guides the domain switch. The original site is untouched until the owner confirms. | MVP | The same 10-site test set passes in this direction. The original is unchanged after the move, byte for byte in the content database export. | +| SH-10 | A move is handled as a release: it has a plan, evidence (a page-by-page comparison, form and media checks), an approval bound to the evidence hashes, a rollback point at the origin and an audit entry. | MVP | A move cannot complete without a matching approval. A change to the source after the evidence is produced voids the approval. Rollback sends traffic back to the origin. | +| SH-11 | When the destination offers Content only access, Wursor says before the move which parts will not travel (for example custom code or plugins) and offers to carry them as content or leave them out. Nothing is dropped silently. | MVP | The pre-move report lists every item that will not move. A test that removes an item without listing it fails the build. | +| SH-12 | Owners can connect a domain to a Cloud site with plain-language DNS steps, live status checks and automatic SSL, and can switch a domain between homes with a checked, reversible cutover. Buying a domain inside the product comes later. | MVP (connect and cutover); V1 (buy a domain) | In a test, 8 of 10 owners connect a domain unaided within 30 minutes of the DNS change. A cutover can be undone and returns traffic within the DNS propagation window. | +| SH-13 | Owners can download a complete archive of any Cloud site at any time. The exit path is stated in plain words on the first-run fork and on the site page. | MVP | The archive restores into a clean WordPress install in a test. The exit path is present on both screens in a copy audit. | +| SH-14 | Cloud sites are isolated from one another, updated and scanned automatically, monitored for uptime, and covered by an abuse policy and a published availability target. | MVP (isolation, updates, backups); V1 (published availability target) | A cross-site isolation test passes. Critical WordPress security releases reach Cloud sites within 72 hours in a drill. The availability target is measured and published. | +| SH-15 | Plans separate hosting from agent work. A hosted plan covers a site on Wursor Cloud plus a work allowance; a connect plan covers sites hosted elsewhere plus a work allowance. Moving between homes changes the plan only with the owner's confirmation. | MVP (draft pricing) | The billing screen shows home, hosting charge and work usage separately. A downgrade from hosted to connect starts the move assistant first and never deletes a site. | +| SH-16 | Cloud provisioning sits behind an interface so that the underlying host (WeOwn Cloud, or a partner such as WordPress.com or InstaWP) can change without changing the product. | V2 | A second provisioning backend passes the same contract tests as the first. | + +**Product surface requirements (PX)** + +| **ID** | **Requirement** | **Phase** | **Acceptance criteria** | +|---|---|---|---| +| PX-01 | Sign-up and sign-in are separate paths. Sign-up: email, verify, name the workspace, then the starting-path choice. Sign-in: email, a "sending code" state, verify, then straight to Home. An email with no account gets a clear message and a route to sign up. Google sign-in is offered on both. | MVP | In a usability test, five returning users sign in and reach Home with no detour through onboarding. An unknown email shows the no-account state and never reveals whether another person has an account. | +| PX-02 | Email verification uses an 8-character code with separate states for empty, filled, wrong, expired and resent. The person can resend, and can go back to use a different email. Codes expire, are single use, and are rate limited. | MVP | A wrong code shows the error state without clearing the email. Ten wrong codes lock the attempt. A used or expired code is rejected in an automated test. | +| PX-03 | A visible Publish button sits in the workspace preview toolbar on desktop, in the conversation header and the preview toolbar on mobile, and the P key does the same on desktop. Publish never publishes directly. It opens the review and approval step for the current change. | MVP | From a finished change, Publish reaches the approval screen in one action on both layouts. No release exists without an approval bound to evidence (RV family). | +| PX-04 | Home shows what needs the owner first: approvals waiting, runs in progress, and site health. Sites lists every site with its home and access level. Activity is the full history. Board shows changes by status. | MVP | In a usability test, four of five owners find the change that needs their approval within 10 seconds of landing on Home. | +| PX-05 | Board has a list view and a calendar view. The calendar is a month grid of released, scheduled and planned changes, shows up to three per day with a count for the rest, and each item opens its change. Rescheduling by drag, an empty month state, and a day with more than three changes are designed next. | MVP (view); V1 (drag to reschedule) | A month with 40 changes renders without overlap at 1280 and 390 px wide. Selecting an item opens the matching change. Dragging a scheduled item to another day asks for confirmation before moving it. | +| PX-06 | A command palette (Cmd or Ctrl K) searches sites, changes and actions, and shows the shortcut beside each action. Shortcuts never bypass approval. | V1 | Every action in the palette is also reachable by clicking. Running Publish from the palette opens the approval step and does not release. | +| PX-07 | Settings covers account, workspace, team and access, billing, connected sites and notifications. Disconnecting a site shows what stops working and what stays, and asks for confirmation. Billing shows hosting and work usage separately (SH-15). | MVP | Disconnect cannot complete without the confirmation step. The billing screen shows hosting and work usage on separate lines. | +| PX-08 | System states exist for every long or failure-prone step: connecting, scanning, working, waiting, paused site, unreachable site, expired session, offline, and no results. Each says what happened, what is safe, and what to do next. | MVP | A screen-by-screen audit finds no state that shows a spinner for more than 10 seconds without text, or an error without a next step. | +| PX-09 | Every screen has a mobile layout built from the same components. On mobile the conversation and the preview are separate views, form fields are 44 px high, and primary actions stay reachable with one thumb. Icon buttons are 36 px today and move to 44 px or gain 44 px hit areas. | MVP | A touch-target audit finds every control at least 44 px or with a 44 px hit area. All journeys in 3.1 complete on a 390 px wide screen. | +| PX-10 | Light and dark themes are both complete and use the same named color variables. The theme follows the device setting. A manual override in Settings is proposed (D-HL-15). | MVP | Contrast checks pass WCAG 2.2 AA for text in both themes. A screenshot diff shows no screen using a fixed color outside the variable set. | +| PX-11 | All screens come from one component library with documented states: buttons, fields, selection and navigation, status labels, containers and feedback, onboarding, workspace, mobile, calendar and the command palette. A new screen may not introduce a one-off control. | MVP | A library audit finds no detached or overridden component on a shipped screen. Every component has its default, hover, focus, disabled and error states where they apply. | +| PX-12 | Focus is always visible and the product is fully usable by keyboard. Status never depends on color alone. | MVP | An automated accessibility scan reports no critical issue and a keyboard-only walk-through completes sign-in, a change and an approval. | +| PX-13 | The marketing site has six pages in the same four sets. It states the exit path and how approval works, links "Get started" to sign-up and "Sign in" to sign-in, and shows plan names and prices only after they are decided (D-HL-8). | MVP | Every call to action reaches the right first screen. A claims audit finds no price, allowance or uptime figure that is not approved. | +| PX-14 | The prototype is the reference for behavior. Every link works, every screen is reachable from the landing page, and a change to a screen in one set is made in all four. | MVP | A reachability check reports 100 percent of screens reachable, no dead links, and no link from one set to another. | + +## 25. Open decisions for this pattern + +| **ID** | **Decision** | **Needed by** | **Owner** | +|---|---|---|---| +| D-HL-1 | Buy a managed identity provider or build the identity service. Recommended: buy. | Phase 0 | Engineering lead | +| D-HL-2 | Which service mints stream tokens: the Wursor API (recommended) or the Next.js server with a delegated key. | M0 | Engineering lead | +| D-HL-3 | Deploy the Wursor API and Conductor as one service at MVP (recommended) or two. | M0 | Engineering lead | +| D-HL-4 | How the connector plugin is distributed: WordPress.org directory, direct download, or both. | M1 | Product | +| D-HL-5 | Which backup method the WordPress target relies on first, and whether a fleet connector supplies it. | Phase 0 | Product | +| D-HL-6 | Whether single sign-on arrives at V1 or earlier for design-partner customers. | M2 | Product | +| D-HL-7 | How Cloud sites are provisioned for the first release: on WeOwn Cloud infrastructure, or through a partner (WordPress.com, InstaWP, a managed host API) behind the same interface. Recommended: WeOwn Cloud only if on-call, patching and abuse handling are staffed from the first customer; otherwise a partner first. | Phase 0 | CTO | +| D-HL-8 | Plans and prices: hosted and connect-only plans, work allowances, backup retention beyond 30 days, and what a free trial includes. Draft numbers in the design are placeholders. | M2 | Product and finance | +| D-HL-9 | Whether WordPress.com sign-in is in the MVP or the connector plugin only. Recommended: both, because WordPress.com is the shortest path for non-technical owners; verify capabilities in Phase 0. | Phase 0 | Product | +| D-HL-10 | Retention after a move out: 30 days live and read-only, then 30 days archived (proposed). | M2 | Product and legal | +| D-HL-11 | Temporary address scheme and search-engine policy for Cloud sites before a domain is connected. | M2 | Engineering lead | +| D-HL-12 | Acceptable-use policy, abuse handling and availability target for Cloud sites. | M2 | Operations and legal | +| D-HL-13 | Whether sign-in uses an emailed 8-character code (as designed), an emailed link (as HL-03 says), or both. Recommended: the code, with the link as a fallback on mobile, and update HL-03. | M0 | Product and engineering | +| D-HL-14 | Cloud storage allowance per plan, and whether hosting is included in every plan. The billing screens show sample numbers only. | M2 | Product and finance | +| D-HL-15 | Whether the theme follows the device only, or also offers a manual light and dark switch in Settings. | M1 | Design | +| D-HL-16 | Whether the marketing pages move onto the product prototype so that landing page to onboarding can be walked as one flow, or stay separate and link by address. | Now | Design | +| D-HL-17 | Destination for Contact support, and the pages behind the footer items that have none yet (Blog, Changelog, About). | M1 | Product | + +The general open decisions (sandbox provider, model providers, pricing, data retention and others) are listed in the Unified PRD. + +## 26. Product surfaces as designed + +This section records what the screen-level design contains, so that engineering, content and test planning can work from the same picture. The design lives in one Figma file with five pages: Cover, Design system, Brand guideline, Product design and Marketing site. It is a prototype of behavior and layout, not a build. Where it and this document disagree, 26.4 lists the difference and a decision owner. + +### 26.1 What exists + +| **Area** | **State** | +|---|---| +| Product screens | About 650 frames in 90 sections, in four matching sets: light desktop, dark desktop, light mobile and dark mobile. Each set holds the same journeys, so a change is made four times. | +| Component library | About 94 component sets and 515 components on 22 boards (colors, type, spacing, elevation and focus, layout and motion, icons, buttons, status, fields, selection and navigation, containers and feedback, onboarding, workspace, app pages, marketing, command palette, hosting and moves, activity and board, mobile, calendar). 136 color and size variables in Light and Dark modes, and 16 text styles. | +| Marketing site | Six pages in light, dark, and two mobile sets. Navigation and footer links work. Get started and Choose plan open sign-up, and Sign in opens sign-in. | +| Prototype | Every screen reachable from the landing page, no dead links, no link crossing between sets. The prototype has not yet been played end to end with users. | +| Brand | Arch-and-dot mark and a short brand guideline page that needs filling out. | + +### 26.2 Journeys and the screens that carry them + +| **Journey** | **Screens and behavior** | **Requirements** | +|---|---|---| +| Arrive and choose | Landing, product, pricing, trust and docs pages. The trust page explains how approval works. Calls to action lead to sign-up or sign-in. | PX-13, SH-13 | +| Sign up | Email entry, verify with code states, name the workspace, then the fork between Wursor Cloud, Connect my WordPress, and Build here and publish. | PX-01, PX-02, SH-01 | +| Sign in | Email entry, no-account state, sending-code state, four verify states, then Home. Google sign-in on both paths. | PX-01, PX-02, HL-03 | +| Start on Wursor Cloud | Five-question brief, three design directions, build on a safe copy, preview, approval, temporary address. | SH-03, SH-04 | +| Connect my WordPress | WordPress.com sign-in or plugin code, scan, access level result (Full access or Content only), and a first change. | SH-05, SH-06 | +| Build here and publish | Build on a safe copy, then Publish to the connected WordPress as a release with a rollback point. | SH-07, PX-03 | +| Work on a change | Conversation beside a live preview. Tabs and device toggles on desktop. On mobile the conversation and preview are separate views, each with Publish. | PX-03, PX-09 | +| Review, approve, publish | Summary, risk in words, before-and-after, what was not checked, one button that names the action, rollback after release. | RV family, SH-10 | +| Domain | Exact record to add, live status in words, certificate, confirmed switch. | SH-12 | +| Move a site | Plan, dry run, page-by-page comparison, approval, domain switch, rollback. | SH-08 to SH-11 | +| Run the account | Home, Sites, Activity, Board and calendar, Settings (team, billing, connections), command palette. | PX-04 to PX-07 | +| When things go wrong | System states for scanning, waiting, paused or unreachable site, expired session, offline and empty results. | PX-08, HL-13 | + +### 26.3 Principles the design follows + +- **Components first.** A screen is assembled from library parts, and a new need becomes a new documented component before it appears on a screen. + +- **Everything starts at onboarding.** Every path begins at sign-up or sign-in and the fork, so a person is never dropped into an empty app. + +- **Two access levels, named plainly.** Full access and Content only appear wherever a site appears. + +- **Build in one place, live in another.** Hosting model is Wursor Cloud, connect my WordPress, or build here and publish, and a site can move both ways. + +- **Light and dark are equals.** No screen is designed in one theme and adapted later. + +### 26.4 Known gaps between the design and this document + +| **Gap** | **What is missing or different** | **Where decided** | +|---|---|---| +| Sign-in method | The design uses an emailed 8-character code. HL-03 says passkey or emailed link. | D-HL-13 | +| Calendar extras | Not yet designed: drag to reschedule, an empty month, and a day with more than three changes. | PX-05 | +| Mobile preview toolbar | Tag and device toggles are hidden on mobile to make room for Publish. | PX-09 | +| Touch size | Icon buttons are 36 px, below the 44 px target. | PX-09 | +| Pricing and billing | Plan names, numbers and the Cloud storage allowance are placeholders. | D-HL-8, D-HL-14 | +| Marketing copy | Pricing and trust copy are drafts. Contact support is unlinked, and Blog, Changelog and About have no pages. | D-HL-17 | +| Cross-page links | Figma cannot link between pages, so marketing opens product screens by address in a new tab. | D-HL-16 | +| Theme switch | No manual light and dark switch is designed. | D-HL-15 | +| Brand guideline | The brand page has three frames and needs the full guideline. | Design | +| Library tidy | Board numbering has two boards numbered 11, and the marketing board is wider than the rest. | Design | + +### 26.5 Next steps + +1. Play the prototype end to end with five first-time owners and five returning ones, and record time to first preview and sign-in success against the targets in section 16. + +2. Decide D-HL-13 (sign-in method) and D-HL-16 (marketing on the product prototype), because both change screens. + +3. Finish the calendar extras and mobile toolbar, then run the touch-target and contrast audits in PX-09 and PX-10. + +4. Settle plans and prices (D-HL-8, D-HL-14) before any pricing copy ships. + +**Glossary** + +| **Term** | **Meaning** | +|---|---| +| Abilities API | A WordPress API (introduced in 6.9) where plugins declare actions an agent or other client may perform. | +| BFF | Backend for frontend: server code that sits between a browser app and APIs, keeping tokens off the browser. | +| Block theme | A WordPress theme built from blocks and templates edited in the site editor. | +| Buzz | A workspace from Block for assigning work to agents and reviewing it. Treated here as an outside client. | +| Conductor | Wursor service that orchestrates agent runs, policy, streaming and evidence. | +| Content-only mode | A WordPress editing mode that lets editors change content but not layout. | +| CORS | Cross-origin resource sharing: browser rules that say which other web addresses may call a service. | +| CSRF | Cross-site request forgery: an attack where another website tricks a signed-in browser into sending a request. Defended with tokens or nonces. | +| DataViews | The table and list interface component used by the newer WordPress admin screens. | +| Edge proxy | A server in front of the application that terminates HTTPS and routes each web path to the right backend service. | +| Evidence bundle | The signed set of results that supports a review decision. | +| HMAC | A signature made with a shared secret key, used to prove a message came from the expected sender and was not altered. | +| JWT | JSON Web Token: a small signed token that carries claims such as who the user is and what they may do, usually for a short time. | +| Lane | A category of work: A (editable sites), B (web apps and PWAs), C (existing sites). | +| MCP | Model Context Protocol, a standard for exposing tools to agents. | +| Nonce (WordPress) | A short-lived token WordPress puts in a page so that requests made by that page can be recognized as genuine (a defence against CSRF). | +| Origin | The combination of protocol, domain and port of a web address. Browsers keep separate origins isolated from each other. | +| Outbox | A database table that records events in the same transaction as the change so they can be delivered reliably. | +| PKCE | Proof Key for Code Exchange, an OAuth extension that protects the authorization code flow for public clients. | +| Playwright, axe, Lighthouse | Tools that automatically drive a browser, check accessibility and measure page performance. | +| Preview origin | A different web domain used only to display generated sites, so generated code cannot touch the app's sign-in session. | +| PWA | Progressive web app: a website that can be installed on a phone or desktop and can work with limited connectivity. | +| REST API | The built-in web interface through which programs read and change WordPress data using web addresses. | +| Server Components | A Next.js feature that builds parts of a page on the server so less code is sent to the browser. | +| SITE.md | The dossier the agent maintains about an existing site. | +| SSE | Server-sent events, a one-way streaming protocol over HTTP. | +| wp-admin | WordPress's login-protected administration dashboard. | + +**Terms specific to this document** + +| **Term** | **Meaning** | +|---|---| +| Access level | What Wursor may do on a site: Full access (themes, plugins, settings, content) or Content only (pages, posts, media, menus). | +| Brief | Five short answers that describe a new site: what the business does, who it is for, what visitors should do, the pages and the tone. | +| Cloud site | A WordPress site that Wursor runs for a customer on WeOwn Cloud. | +| Design direction | One of three proposed looks for a new site, shown as a preview of the real homepage. | +| Home | Where a site lives: Wursor Cloud or a connected WordPress. | +| Hosting plane | The separate environment in which Wursor runs Cloud sites. | +| Move | A transfer of a site from one home to another, handled as a release with evidence and approval. | +| Prototype | The linked set of design screens that shows behavior and layout. It is not a build. | +| Wursor Cloud | Wursor's hosting for WordPress sites, run on WeOwn Cloud. | +| Connector plugin | The small WordPress plugin Wursor installs on a customer site so that Wursor can describe, back up, test, change and roll back that site through signed requests. | +| Control plane | The part of Wursor that records who is allowed to do what: accounts, projects, tasks, approvals, policies and the audit trail. | +| Fake target | A simple pretend platform used in tests so that the platform interface cannot quietly depend on WordPress. | +| Platform interface | The fixed set of operations Wursor uses to work on any kind of site. WordPress is its first implementation. | +| Target platform | A kind of site Wursor can connect to and work on. | + +## Appendix B. Future research: other platforms + +This appendix records research questions only. Nothing in the requirements above depends on the answers, and no work on other platforms is planned before the WordPress target has proven the core loop. + +The first platform of interest is Shopify. Before committing to it or any other platform, research the following and record the answers in a short findings document: + +- Whether a realistic, isolated copy of a store can be created for each task, and what verification can honestly be done on it. + +- How themes, apps and configuration changes are deployed, previewed and rolled back, and whether replayable change scripts are possible. + +- How a site owner would connect a store (the equivalent of the connector plugin), what permissions are available, and what review or approval the platform requires for such an app. + +- What the platform's rules and terms say about automated agents making changes on a merchant's behalf. + +- Which operations in the platform interface (section 11) would be unsupported or different, and what that implies for the interface design. + +- What non-technical owners on that platform expect, and how those expectations differ from WordPress owners. + +**Sources and verification status** + +This document draws on research done while preparing the earlier architecture document. The source links were not retained in this working session, so the list below names the material and says how far it should be trusted. Each item should be re-verified before it is used to justify a commitment. + +| **Material** | **Status** | +|---|---| +| WordPress 6.9 release notes (Abilities API) and the MCP Adapter repository (0.7.0) | Primary sources; version numbers may have moved on. | +| WordPress 7.0 release (May 20, 2026), Connectors API and DataViews admin | Primary sources; the finding that connector keys in the database are unencrypted and readable by plugins should be re-tested on the current version. | +| Faust plugin 1.8.12 and the advisory on 1.8.0 | Used only as evidence of headless ecosystem maturity and risk; check current versions. | +| WordPress Playground and my.WordPress.net | Described by their maintainers as experimental; not relied on. | +| Firecracker-based sandbox providers (E2B, Vercel Sandbox) | Much of the performance and isolation detail comes from vendor-authored material. Treat as unverified until benchmarked. | +| Buzz from Block | Early-stage; how agents attach to it is an assumption. | +| Glow, InstaWP and WordPress.com MCP capabilities | Based on tool listings available in this environment; end-to-end behavior is untested. | -*End of PRD v2.0 — Wursor* \ No newline at end of file diff --git a/docs/prd-assets/headless-architecture.png b/docs/prd-assets/headless-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..fba3feea14674ad0c3d4f1ca1134f9f27e3a1c60 GIT binary patch literal 269729 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 K&`;jBr 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 literal 0 HcmV?d00001