Commit Graph
100 Commits
Author SHA1 Message Date
SinachPat 060b181e71 feat: wire chat to the agent loop (POST /chat)
Mirror to GitHub / mirror (push) Canceled after 0s
- api: /chat route runs runAgent (session-required, 503 when unconfigured)
- api: index.ts builds OpenRouterLlmClient + WpRestExecutor from env; loads .env
- web: useChat calls /chat with mock fallback; proxy /chat+/sites+/health
- .env.example: DATABASE_URL empty by default (in-memory dev)
- 111 unit tests green; smoke-tested signup+chat
2026-08-17 17:19:33 +01:00
SinachPat 69287ebec0 feat: build the chat + preview + approve interface
Mirror to GitHub / mirror (push) Canceled after 0s
- web: two-pane app chrome (chat panel + browser-framed preview)
- ChatPanel, Preview, ApproveBar components + useChat (mock agent for now)
- Fluent/Figma design system (Inter, dark chrome, elevation, motion)
- 107 unit tests + Playwright e2e green; web typechecks + builds
2026-08-17 17:10:25 +01:00
SinachPat b61ff21710 feat: de-risk agent loop — semantic tool schema + agent loop + real-WP spike harness
Mirror to GitHub / mirror (push) Canceled after 0s
- api/agents: tool-schemas (semantic allowlist), agent-loop (multi-step + budget), circuit-breaker, llm-client/tool-executor interfaces
- api/agents: WpRestExecutor (real WP REST), OpenRouterLlmClient
- e2e/agent: multi-step prompts + run-agent-spike runner (scores rendered changes)
- ADR 0017; 101 unit tests green
2026-08-15 23:49:07 +01:00
SinachPat 69b2481299 feat: Sprint 2 — WordPress plugin (auth/api/site-info/admin) + web SiteConnector
Mirror to GitHub / mirror (push) Canceled after 0s
- plugin: Wursor_Auth (token hashing, HMAC, scoped tokens), Wursor_API (REST + auth), Wursor_Site_Info (builder/capabilities/preflight), Wursor_Admin
- plugin: test-auth.php (10 auth tests, run in a WP+PHP env)
- web: SiteConnector pairing UI (code + poll + states)
- api: PluginClient signs full REST route (matches WP get_route)
- 92 unit tests green
2026-08-15 23:17:16 +01:00
SinachPat 9801b9475b feat: Sprint 2 — Wursor-side pairing flow + signed plugin client
Mirror to GitHub / mirror (push) Canceled after 0s
- session store + requireSession middleware (signup persists session)
- PairingService (8-char code, 5-min TTL, 5-attempt lockout, single-use, https check)
- POST /sites/pair, /sites/redeem, /sites/:id/confirm, GET /sites/:id
- PluginClient signs HMAC (timestamp+method+path+body-hash), token in Authorization
- ADR 0016; 58 api tests green
2026-08-15 23:10:19 +01:00
SinachPat 02f55b4543 docs: DevOps/infrastructure handoff brief
Mirror to GitHub / mirror (push) Canceled after 0s
2026-08-15 20:31:56 +01:00
SinachPat df2315087d feat: Sprint 1 remainder — Postgres store, Docker client, warm pool, sessions route
Mirror to GitHub / mirror (push) Canceled after 0s
- PostgresUserStore (Queryable) + migration + env-gated wiring
- DockerodeClient behind injected DockerEngine
- ImageManager, WarmPool, Dockerfile.wordpress, docker-compose
- POST /sessions spins up sandbox (503 when unconfigured)
- ADRs 0014-0015; 68 unit tests green
2026-08-15 20:18:34 +01:00
SinachPat 97f31315bd docs: ADRs 0011-0013 for Sprint 1 stack, user store, and Docker boundary
Mirror to GitHub / mirror (push) Canceled after 0s
2026-08-15 20:07:44 +01:00
SinachPat a037b882e9 feat: Sprint 1 — Playwright e2e + sandbox orchestration (TDD)
Mirror to GitHub / mirror (push) Canceled after 0s
- e2e: Playwright chat-flow (sign up -> chat) with api/web webServer harness
- api: sandbox services subset/media-proxy/manifest/gc + DockerClient contract
- api: SandboxManager orchestrator (fake-Docker tested); /health route
- 53 unit tests green; Playwright e2e green
2026-08-15 20:01:58 +01:00
SinachPat 9733ba6e3c feat: Sprint 1 slice 1 — API signup + web signup/chat shell
Mirror to GitHub / mirror (push) Canceled after 0s
- api: Fastify POST /auth/signup (validation, scrypt hash, in-memory store)
- web: React+Vite SignUp form and chat shell with dev proxy
- 35 tests green (api 5, web 2, e2e 28)
2026-08-15 19:53:13 +01:00
SinachPat 2f53b1901b ci: reference GITEA secret by its actual name
Mirror to GitHub / mirror (push) Canceled after 0s
2026-08-15 18:57:40 +01:00
SinachPat 6eeac23719 chore: update repo references after transfer to Wursor org 2026-08-15 18:10:03 +01:00
SinachPat 9a7058c85b feat: auto-load .env in golden harness; scaffold CI workflow 2026-08-15 18:05:37 +01:00
SinachPat 0d6afab425 feat: add OpenRouter provider to golden harness, close Phase 0 gate
- provider-agnostic llm-client (grok + openrouter) with page-slug context
- live golden run scored and passing via x-ai/grok-4.6
- ADR 0010; spike docs flipped to done
2026-08-15 17:58:09 +01:00
SinachPat f42549c451 ci: grant contents write permission for mirror push 2026-08-15 14:59:51 +01:00
SinachPat ffe666f479 ci: point mirror at correct Gitea repo pat/wursor 2026-08-15 14:57:42 +01:00
SinachPat d34347b1d9 chore: expand gitignore to cover common secret files 2026-08-15 14:53:35 +01:00
SinachPat bb84ab5aef ci: bidirectional mirror between GitHub and Gitea 2026-08-15 14:08:45 +01:00
SinachPat 1f017cd9b0 docs: add decision records, changelog, and repo index links 2026-08-15 14:06:45 +01:00
SinachPat 6e59a8a36b feat: Phase 0 workspace, spikes, and golden harness
Stand up the monorepo skeleton and land the first Phase 0 artifacts:
pairing threat model, plugin catalog, builder detect, 20-prompt golden
harness, and synthetic 2GB mirror timing.
2026-08-15 09:44:43 +01:00
SinachPat 0dae13cfd3 feat: add pstack-style rigor skill family for Zed
- wursor-precheck: router skill, entry point for non-trivial tasks
- wursor-principles: 21 engineering principles adapted for Wursor
- wursor-tdd, wursor-bug-fix, wursor-feature, wursor-investigation,
  wursor-review, wursor-decision-log: playbook skills
- AGENTS.md: repo guide wiring the skill routing table
- Fix: double-quote YAML frontmatter descriptions (colon-space in
  plain scalars broke Zed's skill loader)
2026-08-14 14:23:06 +01:00
SinachPat dfb3c9372b docs: PRD v2.0, IMPLEMENTATION v2.0 — non-technical-first pivot
Complete rewrite of both documents from engineer-first to non-technical-first:

Architecture changed:
- Desktop app (Tauri + Monaco) → Web app (React + Node.js)
- Local Docker runtime → Cloud-hosted sandboxes (Wursor-hosted, VPS)
- Code editor + terminal + diff panels → Chat interface + live preview + approve/reject
- Tools for engineers (fs, git, wp-cli) → Playbooks for everyone (content, design, plugins)
- BYO API key → Wursor-hosted model (Grok)

Product changed:
- Primary user: WordPress engineer → WordPress site owner (non-technical)
- Interface: code editor with panels → single chat input + live preview
- Safety model: permission tiers + file diffs → cloud sandbox + approve/reject
- Deploy: Git-based → plugin-based with one-click rollback
- Competitive frame: dev tools → WP management layer

Key new sections:
- Cloud sandbox orchestration with warm pool, mirroring, lazy media sync
- WordPress plugin connector (REST API, deploy receiver, rollback)
- Deploy mechanism (diff engine, pusher, verifier, rollback)
- New playbook system (content, design, plugin, site build)
- Error states for the web app + plugin paradigm
- Non-technical personas, principles, and UX
2026-08-13 18:57:12 +01:00
SinachPat 4403c8c5e8 docs: PRD v1.3 — Tauri/Monaco shell, Grok model
- Shell decision changed from Electron + Code-OSS to Tauri (Rust) + Monaco Editor
  - Fast startup (~0.3-0.8s), low memory (100-200MB) via system webview
  - Rust backend for tool bus, knowledge graph parser, permission engine, runtime manager
  - Rationale documented vs Electron and Zed
- Model changed from Claude to Grok (xAI), BYO API key
- IMPLEMENTATION.md rewritten for Rust/Tauri stack: crates layout, Rust TDD tests, cargo-based CI
- Phase 1 roadmap, test strategy, decisions section updated to match
2026-08-13 13:12:04 +01:00
SinachPat 6b878dbb14 docs: PRD v1.2 — Wursor rename, key decisions locked, all gaps addressed
- Renamed product from Wordbench to Wursor across all touchpoints
- Locked key decisions: Electron + Code-OSS shell, Claude BYO key, wp-env only v1
- Added first-run experience (§7.1.8), error states (§8.5), agent substrate (§8.1.1)
- Expanded State Diff lifecycle (§6.4), Knowledge Graph strategy (§6.2)
- Strengthened verify-as-proof principle (§5, §7.1.6)
- Added metrics baselines + owners (§11), exit criteria for Phases 1-2 (§12)
- Added test strategy (§C.1), accessibility/i18n as non-goal (§C)
- Created IMPLEMENTATION.md — TDD-driven 8-sprint build guide
2026-08-13 12:49:23 +01:00
Osinachi Patrick 0f08ccea07 docs: PRD v1.1 — WordPress-native voice, drop editor-clone framing 2026-08-12 11:54:09 +01:00
Osinachi Patrick 702ce4e9c1 chore: pivot to Wordbench — remove Originmain codebase, add PRD
Clears the prior AI design-engineering product and replaces the repo with the Wordbench (agentic WordPress development environment) PRD.
2026-08-12 11:43:10 +01:00
SinachPat 65a9051bf5 updated stuff 2026-05-13 15:20:54 +01:00
SinachPat 7bf43fc481 updated stuff 2026-05-13 15:12:51 +01:00
SinachPat 8356e6278c updated stuff 2026-05-10 20:52:34 +01:00
SinachPat f51dfa5e4d updated stuff 2026-05-10 01:19:20 +01:00
SinachPat a2ab1c5dc6 updated stuff 2026-05-10 01:16:09 +01:00
SinachPat 4b7f14564a updated stuff 2026-05-10 00:45:55 +01:00
SinachPat c53db55209 updated stuff 2026-05-09 20:37:27 +01:00
SinachPat 3c5bbaea0b updated stuff 2026-05-09 20:23:34 +01:00
SinachPatandClaude Sonnet 4.6 1a5d84cb58 fix: make hook.inject robust against React Refresh timing race
Root cause: the React DevTools browser extension injects a hook stub at
document_start (before HTML parsing), so hook.inject can be undefined
when React Fast Refresh runs. React Refresh destructures inject as
undefined and later calls undefined.apply() -> TypeError. This prevents
React from ever setting injectedHook, so onCommitFiberRoot is never called.

Fix: unconditionally replace hook.inject with a wrapper that tries the
captured previous inject (with try/catch) then falls back to our own
renderer ID allocation. Works regardless of script execution order.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 17:11:01 +01:00
SinachPatandClaude Sonnet 4.6 b59a3dddd3 debug: add console diagnostics to fiber hook to trace React detection failure
Logs at: script activation, React inject() call, onCommitFiberRoot fire,
and captureExistingTree DOM scan result. Temporary — remove after diagnosis.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 10:29:06 +01:00
SinachPatandClaude Sonnet 4.6 14e4db6468 fix: externalize typescript in CLI esbuild bundle
indexer.ts imports typescript directly. Bundling it into an ESM output
causes 'Dynamic require of fs is not supported' because typescript uses
CJS require() for Node built-ins internally.

Marking typescript as external drops the CLI bundle from 9.9 MB to 417 KB
and fixes the startup crash on Node 22.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:32:43 +01:00
SinachPatandClaude Sonnet 4.6 8af7dacacc fix: add inject() to legacy buildFiberHookScript hook as well
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:10:23 +01:00
SinachPatandClaude Sonnet 4.6 d1d5e352c8 fix: add inject() to DevTools hook so React actually calls onCommitFiberRoot
React's injectInternals() calls hook.inject(renderer) before it will ever
invoke onCommitFiberRoot. When inject is missing, React's try/catch silently
bails and injectedHook stays null — our handler is never reached regardless
of how correctly onCommitFiberRoot is set up.

Fix: define inject() on the hook we create (returns a renderer ID and stores
the renderer in hook.renderers, matching the React DevTools spec). Also
patches inject onto any existing stub hook that lacks it, so third-party
minimal hooks don't silently block registration.

This is the root cause of the 'Static HTML page' false positive on apps
that don't have the React DevTools browser extension installed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:04:29 +01:00
SinachPat 3fcfa20b32 made design updates 2026-05-07 11:05:58 +01:00
SinachPatandClaude Sonnet 4.6 f707ecd7b3 fix: broaden captureExistingTree to find React root in Next.js App Router
Next.js 13+ App Router calls hydrateRoot on <html> or <body> directly
(not on a #__next div), so __reactFiber$ annotations land on
document.documentElement or document.body.

Changes:
- Add document.documentElement to the candidate list (covers App Router)
- Extract getFiber() helper to remove repeated key-scan loop
- Add DOM-wide fallback scan (querySelectorAll('*')) so any React app
  is found regardless of its root container convention
- Remove the early !tree bail-out — post FIBER_TREE_UPDATE even with a
  sparse tree, matching onCommitFiberRoot's behaviour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 10:52:27 +01:00
SinachPatandClaude Sonnet 4.6 8bbee987ff fix: resolve false 'static page' detection and missing route discovery on CLI-proxied apps
Three related fixes for the canvas live-render panel:

1. captureExistingTree() in fiber-hook — retroactively walks the already-
   mounted React fiber tree via __reactFiber$ DOM annotations. Called
   immediately on READY (handles post-hydration race) and again at 2 s
   (handles deferred hydration / Suspense). Prevents the 'Static HTML page'
   false positive on React apps that mounted before the hook script ran.

2. Static-page timer bumped from 4 s → 8 s in LiveArtboard to give the
   2-second captureExistingTree safety-net enough headroom before the
   no-React verdict fires.

3. Route discovery same-origin fix applied to both renderer/fiber-hook.ts
   and live-sdk/hook.ts — root-relative hrefs (starting with '/') are now
   accepted regardless of origin so CLI-proxied pages (where links still
   point to the original domain) expose their navigation routes correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 08:36:20 +01:00
SinachPat 3f1fd802bf made tiny updates 2026-05-07 07:30:07 +01:00
SinachPatandClaude Sonnet 4.6 df6accb600 feat: apply canvas dot-grid background to sign-in and sign-up pages
Replace the plain body background on auth pages with the product's canvas
aesthetic — the same canvasBg colour and radial dot-grid used by the
canvas editor, toggling correctly between dark and light themes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 07:27:24 +01:00
SinachPat 0f757b7d53 made tiny updates 2026-05-07 07:21:37 +01:00
SinachPatandClaude Sonnet 4.6 f73c7f83d6 fix: validate renderUrl as absolute http/https before loading in artboard iframe
EmptyArtboardContent.save() accepted any string as renderUrl — a relative
path or the Originmain app URL would cause the artboard iframe to resolve
against the Originmain origin, loading the app inside itself.

- Added URL validation (same as UrlOnboardingOverlay) with inline error UI
- toCanvasArtboard now validates renderUrl at read time so stale bad data
  already in the DB is also guarded against
- CanvasArtboard now carries artboard_type, isolation_component,
  isolation_file, isolation_props so phase-3 isolation artboards render
  correctly; previously these fields were silently dropped by the hook

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 07:10:27 +01:00
SinachPatandClaude Sonnet 4.6 cdf6f8caf3 fix: use dot notation for NEXT_PUBLIC env vars in browserClient
Next.js only statically inlines NEXT_PUBLIC_* variables when accessed via
dot notation (process.env.NEXT_PUBLIC_SUPABASE_URL). The generic requireEnv
helper used bracket notation (process.env[name]) which Next.js cannot
replace at build time, causing the browser bundle to always see undefined
regardless of what is set in the Vercel dashboard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 23:24:43 +01:00
SinachPatandClaude Sonnet 4.6 bbef7d73f8 fix: replace stale userId reference in invite button opacity
One userId reference survived the rename to email in WorkspaceSettingsForm,
causing a TypeScript build failure on Vercel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 22:19:12 +01:00
SinachPatandClaude Sonnet 4.6 233a117f5b fix: update useDiffs Omit key from author_id to author_email
InsertIntentDiff.author_id was renamed to author_email in the email
identity migration. useDiffs.ts still referenced the old field name in
its Omit<> types, causing the Next.js build to fail on Vercel and Render.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 22:17:04 +01:00
SinachPat 1fc2702a4b made tiny updates 2026-05-06 22:11:40 +01:00
SinachPat f21969f018 made tiny updates 2026-05-06 18:51:17 +01:00
SinachPat fdf64ee72c made tiny updates 2026-05-05 22:06:31 +01:00
SinachPatandClaude Sonnet 4.6 19b8f29523 fix: sync integrations page logos with landing page
Replace all mismatched SVG icons in integrations.html (both the card grid
and the status section) with the exact paths from page.tsx:

- GitHub: correct octocat path (M12 2C6.477, not M12 0C5.37)
- Figma: 24×24 5-segment logo (was stretched 38×57 viewBox)
- Linear: official brand mark fill=#5e6ad2 (was 100×100 white diagonal)
- Cursor: actual prism brand logo (was a generic hexagon outline)
- TypeScript: clean T+S letterform on #3178c6 bg (was noisy stripe overlay)
- React: centred atom cx/cy=12 with r=2 dot (was off-centre cy=11)
- Status section: same fixes applied to the second logo set

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 18:22:25 +01:00
SinachPatandClaude Sonnet 4.6 ddbb505b23 fix: resolve button text invisible bug — CSS specificity collision
.mkt-root a { color: inherit } had higher specificity than .mkt-btn-primary
{ color: var(--bg) }, causing all Link-based buttons to inherit body text
color (#0A0A0A in light mode) instead of the intended inverted color.

- Split anchor reset: text-decoration applies to all <a>, color:inherit only
  to non-.mkt-btn anchors via :not(.mkt-btn) selector
- Switch .mkt-btn-primary text color to var(--fg-inv) which is always
  guaranteed to contrast against a var(--fg) background in both themes
  (rgba(255,255,255,0.92) in light, #09090B in dark)
- Fix CSS token violations: nav background, shadows, border-radius, mono font

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 13:32:12 +01:00
SinachPat 278da04bde made tiny updates 2026-05-04 13:18:29 +01:00
SinachPat 3c02e7fc01 made tiny updates 2026-05-04 12:59:36 +01:00
SinachPat 5b2d918c13 made tiny updates 2026-05-04 12:30:56 +01:00
SinachPat 3f029e15c2 made tiny updates 2026-05-03 20:34:18 +01:00
SinachPat 4dca0f1bac made tiny updates 2026-05-02 17:33:03 +01:00
SinachPat ed485b1a15 made tiny updates 2026-05-02 16:28:08 +01:00
SinachPat e3ee12d63b made tiny updates 2026-05-01 15:30:13 +01:00
SinachPat 20e0c4b4aa made tiny updates 2026-05-01 10:41:55 +01:00
SinachPat 548cd11719 made tiny updates 2026-05-01 09:54:14 +01:00
SinachPat 84ddd2e248 made some updates 2026-05-01 07:30:29 +01:00
SinachPat b9bc234d1d made tiny updates 2026-05-01 06:28:49 +01:00
SinachPat 3c0c55862a made some updates 2026-05-01 01:21:01 +01:00
SinachPatandClaude Sonnet 4.6 898dfad1d9 docs: update changelog with Figma-parity design panel details
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 01:19:27 +01:00
SinachPatandClaude Sonnet 4.6 82dddb1801 feat: Figma-parity design editing — visual panel, live resize, route grid
Inspector:
- Design tab rebuilt with semantic Figma-style layout: W/H stepper inputs
  at top, Fill with colour-picker swatch, Typography row (size/weight/
  line-height), text-align toggle group, Layout section with flex controls
  + padding 4-corner grid, Appearance (radius/opacity/border/shadow)
- All fields fire patchStyleEdit on every keystroke / arrow-key step
- Sections conditionally render: Fill hidden when bg is transparent, etc.
- NumInput: strips/restores CSS unit, Shift+↑↓ for ×10 step
- ColorInput: native colour picker behind swatch + hex text input

SelectionOverlay:
- Resize handles call patchStyleEdit on every mousemove → live iframe preview
- 8 handles: 4 corners (nwse/nesw) + 4 edge midpoints (ns/ew)
- Delete button in label bar + Delete/Backspace keyboard shortcut
- Dimension tooltip: ComponentName W × H

Canvas / Artboard:
- ROUTES_DISCOVERED handler: auto-creates artboards in a row for every
  undiscovered route, pendingRouteCreation ref prevents duplicates
- buildSrc() helper resolves route-aware iframe src

live-sdk / hook:
- discoverRoutes(): scans <a href> + fiber tree for Link/NavLink components
- removeElement(), patchElementStyle(), respondWithStyles() handlers
- Route re-discovery on popstate

protocol: REQUEST_ELEMENT_STYLES, PATCH_ELEMENT_STYLE, REMOVE_ELEMENT host
messages; ELEMENT_STYLES, ROUTES_DISCOVERED renderer messages

canvas store: styleEditEvent + removeElementEvent mailboxes (Zustand v5
compatible — useEffect selectors, no 2-arg subscribe)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 01:05:16 +01:00
SinachPatandClaude Sonnet 4.6 edada3091e feat: Design tab, live style editing, route-aware artboards, canvas onboarding
Design tab (4-tab inspector: Design / Props / Diff / Graph)
- Click any component in a live artboard to inspect computed CSS
- Typography, Layout, Visual sections auto-populated from getComputedStyle
- Every property is inline-editable; changes apply live via PATCH_ELEMENT_STYLE
- Zero source-code modifications — purely in-browser style overrides

Protocol additions (packages/renderer)
- REQUEST_ELEMENT_STYLES / ELEMENT_STYLES round-trip for CSS inspection
- PATCH_ELEMENT_STYLE for live style patching

Live SDK (packages/live-sdk)
- respondWithStyles(): reads 30 curated computed CSS properties
- patchElementStyle(): applies inline style override to fiber's DOM element

Canvas store
- selectedComponentStyles: current element's CSS map
- styleEditEvent mailbox: Design tab → LiveArtboard style dispatch (Zustand v5 compatible)

Route-aware artboards
- Each artboard now has an optional route (e.g. /dashboard)
- buildSrc(base, route) helper in Artboard.tsx
- Route field editable in Inspector Props tab, persisted to metadata_jsonb

On-canvas onboarding
- Empty canvas now shows 3-step guide: press A → CLI command → paste URL
- CLI command shown inline in a highlighted code block

Changelog and Handoff updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 22:04:37 +01:00
SinachPatandClaude Sonnet 4.6 8514ffdc1a fix: restore artboard creation and drag on canvas
Canvas.tsx: removed the `e.target === e.currentTarget` guard on the
artboard-creation click handler. The canvas has a full-size
position:absolute transform layer that intercepts all events, making
`e.target` never equal to `e.currentTarget`. Artboard creation was
silently broken for every click.

Artboard.tsx: added `onMouseDown` stopPropagation to the artboard root
div so clicks on an existing artboard don't bubble up and trigger the
creation path now that the guard is gone.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 21:33:32 +01:00
SinachPatandClaude Sonnet 4.6 7ff343c5a1 chore: sync pnpm lockfile with cli package.json devDependency changes
@originmain/renderer was added as a devDependency during the CLI refactor
but pnpm-lock.yaml was not regenerated, causing Vercel frozen-lockfile CI failures.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:26:48 +01:00
SinachPat 1b2967d206 made tiny updates 2026-04-30 20:18:31 +01:00
SinachPat 1c81b21e35 made some updates 2026-04-30 20:06:27 +01:00
SinachPat 83dc795f89 made some updates 2026-04-30 19:50:14 +01:00
SinachPat 33846ceef7 improved a lot of things 2026-04-30 19:03:13 +01:00
SinachPat e98fbb31f7 improved a lot of things 2026-04-30 16:56:27 +01:00
SinachPat 42ba668399 improved a lot of things 2026-04-30 16:47:26 +01:00
SinachPat 0c3ac48a3b improved a lot of things 2026-04-30 01:21:48 +01:00
SinachPat 1edf7b8a94 improved a lot of things 2026-04-29 13:59:04 +01:00
SinachPat bfdc187e65 improved a lot of things 2026-04-29 12:53:58 +01:00
SinachPat 45be1b935d improved a lot of things 2026-04-29 12:09:18 +01:00
SinachPat dca0aa5768 improved a lot of things 2026-04-29 10:36:05 +01:00
SinachPat 993e3ae911 improved a lot of things 2026-04-29 05:09:44 +01:00
SinachPat 6624a63d3b improved a lot of things 2026-04-29 05:00:17 +01:00
SinachPat 957bb9e0e7 improved a lot of things 2026-04-29 04:43:29 +01:00
SinachPat 8d07d97cdc improved a lot of things 2026-04-29 04:22:43 +01:00
SinachPat 050c4ce7fe improved a lot of things 2026-04-29 04:07:16 +01:00
SinachPat 960646fee3 improved a lot of things 2026-04-27 20:16:12 +01:00
SinachPat 7afb0cc43c improved a lot of things 2026-04-27 05:11:21 +01:00
SinachPat 48e1ba115e improved a lot of things 2026-04-27 05:00:38 +01:00
SinachPat 9d9d7d7a37 improved a lot of things 2026-04-27 04:52:15 +01:00
SinachPat 197313c0ef improved a lot of things 2026-04-26 21:33:59 +01:00
SinachPat 9c0af31751 improved a lot of things 2026-04-26 21:03:46 +01:00
SinachPat 3d75fbe09d improved a lot of things 2026-04-26 19:57:18 +01:00
SinachPat bea934d124 improved a lot of things 2026-04-26 19:41:26 +01:00
SinachPat 4166ffd3c1 improved a lot of things 2026-04-26 18:11:59 +01:00
SinachPat ca4c0ee09a improved a lot of things 2026-04-26 17:36:05 +01:00
SinachPat 7c160e853e improved a lot of things 2026-04-26 16:53:56 +01:00
SinachPat 855ca56f5a improved a lot of things 2026-04-26 16:45:57 +01:00
SinachPat 7a4c1d3147 improved a lot of things 2026-04-26 12:31:31 +01:00