Product UI components are built once at design size from the Figma file and reused by the marketing mockups and, later, the app. Text contrast tokens now meet WCAG AA in both themes, with a test. Pricing stays hidden until decided. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
3.6 KiB
3.6 KiB
Architecture Decision Records
Wursor records significant technical and product decisions as ADRs. This directory is the source of truth; PRD §14 holds the product-level "locked decisions", while these records capture the engineering choices and tradeoffs behind them.
Each ADR is a single file following the Nygard format: Status, Context, Decision, Consequences. "Options considered" and "Rejected" are kept explicit to honor the wursor-decision-log skill.
Status legend
- Accepted — agreed; in force.
- Proposed — under discussion, not yet binding.
- Superseded — replaced by a later ADR; see the link.
Index
| ADR | Title | Status |
|---|---|---|
| 0001 | MVP is the content-change loop, not the full P0 feature list | Accepted |
| 0002 | Phase 0 spikes gate the scaffold | Accepted |
| 0003 | Wursor generates the pairing code, not the plugin | Accepted |
| 0004 | Plugin install is a 40-slug allowlist, fail-closed | Accepted |
| 0005 | Golden harness scores slot-fill tool calls against JSON fixtures | Accepted |
| 0006 | Builder detection uses slugs + post meta with a priority order | Accepted |
| 0007 | Sandboxes proxy uploads; never copy the media library | Accepted |
| 0008 | Workspace ships empty packages, not placeholder source | Accepted |
| 0009 | Repository renamed originmain → wursor | Accepted |
| 0010 | Golden harness scores live runs through a provider-agnostic LLM client (OpenRouter first) | Accepted |
| 0011 | Fastify is the API server; React + Vite is the web shell | Partially superseded by 0018 (web half) |
| 0012 | In-memory user store behind a UserStore interface; Postgres deferred | Accepted |
| 0013 | Sandbox orchestration mocks the Docker boundary; real daemon client deferred | Accepted |
| 0014 | Postgres user store via a Queryable boundary; schema in SQL migrations | Accepted |
| 0015 | Docker daemon client via dockerode behind an injected engine; sandbox gated by env | Accepted |
| 0016 | Pairing-code TTL/lockout lives on the Wursor API; the plugin enforces token/HMAC/scope | Accepted |
| 0017 | The agent is given a semantic, allowlisted tool schema — not a raw wp_cli surface | Accepted |
| 0018 | The web app is Next.js (App Router); Fastify stays as the Wursor API | Accepted |
| 0019 | Sign-in supports an emailed code, an emailed link and passkeys | Accepted |
| 0020 | Cloud sites are provisioned on WeOwn Cloud | Accepted |
| 0021 | Keep the "never sees a diff" rule in AGENTS.md as written | Accepted |
| 0022 | Wursor and WeOwn Cloud run on DigitalOcean | Accepted (service picks to confirm) |
| 0023 | Product UI is built once at design size and reused; text contrast tokens meet AA | Accepted |
How to add one
- Copy the previous number + 1.
- Write Status / Context / Decision (with options + rejected) / Consequences.
- Add a row to this index.