Commit Graph

1799 Commits

Author SHA1 Message Date
Jeff Emmett 2d6226630a Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m43s Details
2026-04-12 18:48:05 -04:00
Jeff Emmett 7db4171ddd feat(video-gen): add Seedance 2.0 model support + fix data port wiring
Add Seedance 2.0 / 2.0 Fast to video gen with model selector UI,
duration/resolution/aspect-ratio/audio controls. Fix broken port
outputs on both video-gen and image-gen shapes so arrow connections
propagate generated content to downstream shapes. Add input port
listeners for prompt and image data flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 18:47:52 -04:00
Jeff Emmett b90f095f47 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m56s Details
2026-04-12 16:36:39 -04:00
Jeff Emmett 09c06692b0 feat(rphotos): per-space Immich isolation with RBAC permissions
Each space now gets its own Immich album with role-gated CRUD:
- Admin: enable/disable rPhotos, access Immich embed
- Member+: upload photos, create sub-albums
- Moderator+: delete photos, manage any sub-album
- Viewer: browse gallery (read-only)

New immich-client.ts centralizes all Immich API calls. Schema v2 adds
enabled, spaceAlbumId, and subAlbums fields with migration. Frontend
sends auth headers on all API calls and shows role-appropriate UI
(setup prompt, upload button, delete in lightbox).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 16:35:48 -04:00
Jeff Emmett 01ffe5fef2 Merge branch 'dev'
CI/CD / deploy (push) Successful in 3m39s Details
2026-04-12 16:19:10 -04:00
Jeff Emmett 58586334bf feat(landing): overhaul homepage — interop messaging, flow cards, reduced dashboard flash
- Remove "Try Demo" header button for consistency with other pages
- Reduce hero top padding (136px → 88px)
- Replace nostalgia copy with interop-focused messaging
- Replace 6-card feature grid with 4 interop flow cards (rCal→rTasks→rChats, etc.)
- Promote ecosystem grid from section 6 to section 2
- Remove ASCII interop diagram (replaced by flow cards)
- Trim philosophy section
- Redirect non-demo unauth subdomain visitors to rspace.online/ (eliminates dashboard flash)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 16:18:38 -04:00
Jeff Emmett fa3d66981a Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m42s Details
2026-04-12 11:54:27 -04:00
Jeff Emmett f06852dd3b fix(oidc): handle literal \n in PEM key from .env files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:54:24 -04:00
Jeff Emmett f711ce50c6 Merge branch 'dev'
CI/CD / deploy (push) Has been cancelled Details
2026-04-12 11:54:01 -04:00
Jeff Emmett 086ac02205 fix(auth): add missing same-origin proxy routes for EncryptID session APIs
The auth proxy only covered /api/auth/*, /api/register/*, /api/account/*
but the identity component also calls /api/session/verify, /api/session/refresh,
/api/guardians, /api/user/*, /api/device-link/*, /api/recovery/* — all of which
were hitting 404 on the rspace server. The session verify 404 was interpreted
as "session revoked", clearing localStorage and logging users out on every page
load after the 5-minute validation interval.

Also fix profile/recovery links in header that opened empty string (same-origin
root) instead of auth.rspace.online.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:53:45 -04:00
Jeff Emmett bc32a90597 Merge branch 'dev'
CI/CD / deploy (push) Successful in 3m10s Details
2026-04-12 11:49:47 -04:00
Jeff Emmett 0ba9ea272e feat(oidc): switch from HS256 to RS256 token signing
- Generate or load RSA keypair for OIDC token signing (OIDC_RSA_PRIVATE_KEY env)
- Add /oidc/jwks endpoint exposing public key in JWK format
- Update discovery document with jwks_uri and RS256 algorithm
- Sign ID tokens and access tokens with RS256 private key
- Verify access tokens with RS256 public key in userinfo
- Fix OIDC_ISSUER default to auth.rspace.online (was auth.ridentity.online)
- Add POST handler for /oidc/userinfo (RFC compliance)
- Add error logging to userinfo endpoint for debugging

Fixes Cloudflare Access OIDC integration which requires asymmetric
token signing via JWKS for ID token verification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:49:36 -04:00
Jeff Emmett 07f525436f feat: object visibility membrane — per-object access filtering
CI/CD / deploy (push) Failing after 2m2s Details
Add per-object visibility levels (viewer/member/moderator/admin) across
all rSpace modules. Objects default to 'viewer' (open), so existing data
remains visible. Server-side GET handlers resolve caller role and filter;
MCP tools filter lists and check single-item access; frontend components
do defense-in-depth filtering with visibility picker (mod+) and lock badges.

- shared/membrane.ts: types + isVisibleTo, filterByVisibility, filterArrayByVisibility
- 9 schema files: visibility field on TaskItem, NoteItem, CalendarEvent, etc.
- 8 module routes: GET handlers filter by caller role
- 6 MCP tool files: list filtering + single-item visibility checks
- 4 frontend components: client filtering, picker, lock badges
- 18 unit tests (all passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:10:07 -04:00
Jeff Emmett 0eb721d12e feat: object visibility membrane — per-object access filtering
Add per-object visibility levels (viewer/member/moderator/admin) across
all rSpace modules. Objects default to 'viewer' (open), so existing data
remains visible. Server-side GET handlers resolve caller role and filter;
MCP tools filter lists and check single-item access; frontend components
do defense-in-depth filtering with visibility picker (mod+) and lock badges.

- shared/membrane.ts: types + isVisibleTo, filterByVisibility, filterArrayByVisibility
- 9 schema files: visibility field on TaskItem, NoteItem, CalendarEvent, etc.
- 8 module routes: GET handlers filter by caller role
- 6 MCP tool files: list filtering + single-item visibility checks
- 4 frontend components: client filtering, picker, lock badges
- 18 unit tests (all passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:09:44 -04:00
Jeff Emmett d2019b6732 Merge branch 'dev'
CI/CD / deploy (push) Failing after 1m42s Details
2026-04-11 23:18:01 +00:00
Jeff Emmett 5c88922b13 fix: MI bar z-index, SW force-update, rtime mobile layout
- MI bar z-index lowered to 1 so dropdowns render above it; panel
  gets z-index 10001 only when open
- SW registration URL bumped to v=8 to match cache version
- rtime: pool and weaving are now two separate scrollable sections
  on mobile (50vh/60vh min-heights) with a "Commitment Weaving"
  section header visible on constrained screens

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:17:53 +00:00
Jeff Emmett 9f592ec189 merge: passkey Safari fix — same-origin auth proxy + PRF fallback
CI/CD / deploy (push) Failing after 1m43s Details
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:32:11 +00:00
Jeff Emmett 44cc47ecf1 fix(auth): same-origin passkey proxy + PRF fallback for Safari
- Add /api/auth/*, /api/register/*, /api/account/* proxy routes to
  rspace-online server, forwarding to encryptid container internally.
  This eliminates cross-origin requests that Safari blocks via ITP or
  Cloudflare security challenges.
- Change client auth URLs from https://auth.rspace.online to same-origin
  in rstack-identity, rspace-header, login-button, and session modules.
- Add PRF extension try/catch fallback in webauthn.ts — Safari throws
  TypeError on the unsupported PRF extension, now retries without it.
- Bump SW cache version v7→v8 to bust stale cached bundles.

Fixes passkey login for Safari/macOS users (e.g. christina) who were
getting "Network error when attempting to reach resource".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:31:59 +00:00
Jeff Emmett 848b39b198 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m36s Details
2026-04-11 13:07:41 -04:00
Jeff Emmett 843c8ad682 feat(holons): dual view toggle for Holon Explorer (holon + graph)
Add switchable Holon/Graph views within the same shape instance.
Holon view retains the orbital 220° arc layout; Graph view renders
children as hexagons in a full 360° ring with radial labels. View
preference persists via serialization.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 13:07:32 -04:00
Jeff Emmett 7b827c7a70 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m16s Details
2026-04-11 13:04:24 -04:00
Jeff Emmett 9e4f24ecd2 fix(rnetwork): bump JS cache versions for CRM delegation components
Bust Cloudflare CDN cache after Sankey visualization overhaul.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 13:04:11 -04:00
Jeff Emmett 06327f07e1 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m46s Details
2026-04-11 12:46:49 -04:00
Jeff Emmett 8535ab24a2 feat(rtime): commitment pooling + weaving split-pane redesign
Resizable divider (20-65% drag, localStorage persist), pool UX upgrade
(labels, woven % badge, drag-to-weave button), multi-strand woven
connection rendering, project frames with drag/resize/auto-assign,
task dependency arrows with diamond dep-ports, mobile responsive layout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 12:46:39 -04:00
Jeff Emmett 9b05134ae5 Merge branch 'dev'
CI/CD / deploy (push) Failing after 3m5s Details
2026-04-11 12:41:45 -04:00
Jeff Emmett 4f8cddaaf7 feat(holons): add Holon Explorer canvas shape with hex hierarchy + appreciation
New folk-holon-explorer shape unifying H3 geospatial holons and nested
rSpace spaces into a zoomable circular navigator with appreciation weight
normalization and MetatronGrid sacred geometry background. Endorsements
logged to trust engine via new POST /api/trust/endorse endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 12:41:35 -04:00
Jeff Emmett bc2b6ba23c Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m58s Details
2026-04-11 10:49:10 -04:00
Jeff Emmett cdb62e2ee8 feat(encryptid): social recovery guardian UX enhancements
- Red pulsing alert dot on avatar when social recovery not configured
- SVG puzzle piece visualization for guardian slots (empty/pending/accepted)
- Key assembly animation when 2+ guardians accepted
- Recovery drill system: test the full guardian approval flow without actual recovery
  - POST /api/recovery/drill/initiate, GET .../status, POST .../complete
  - Drill-specific emails with "TEST ONLY" branding
  - Live polling UI with puzzle pieces filling in as guardians approve
  - Drill timestamp tracking (last_drill_at on users table)
- Solo walkthrough modal: 5-step animated preview of how recovery works
- Approval page detects drill flag, shows DRILL badge
- Account status now returns acceptedGuardianCount and lastDrillAt
- Recovery section shows emergency override messaging

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 10:48:55 -04:00
Jeff Emmett 5fc7b4d6b1 Merge branch 'dev'
CI/CD / deploy (push) Successful in 3m6s Details
2026-04-11 10:14:36 -04:00
Jeff Emmett 98d3ce4d2f fix(canvas): per-user forgotten shape filtering + lazy loading for perf
Shapes deleted (forgotten) by a user no longer reappear on reload —
forgottenBy[localDID] filtering in #applyDocToDOM and #applyPatchesToDOM
means one delete = gone permanently for that user while preserving CRDT
data for others.

IntersectionObserver on FolkShape base class defers heavy init (API calls,
iframes, feed polling) until shapes enter viewport (+500px margin),
reducing initial load from 100+ concurrent requests to ~5-10 visible.

Also: folk-rapp #getModulePath always uses subdomain routing (no subpath
fallback), and DID re-syncs on auth-change events.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 10:14:24 -04:00
Jeff Emmett dda0492dbf feat(encryptid): add email login (magic link) and optional email on registration
- Sign-in modal: detect email input and send as { email } to auth/start
- Add "Send Magic Link" button alongside passkey sign-in
- Registration: optional email field sent with register/complete
- Enter on username field tabs to email; Enter on email submits

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 10:01:06 -04:00
Jeff Emmett 40df4468d4 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m6s Details
2026-04-11 09:06:08 -04:00
Jeff Emmett e9b2a9314b fix(rflows): bump JS cache versions to bust Cloudflare CDN
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 09:05:56 -04:00
Jeff Emmett ca6d5402b8 Merge branch 'dev'
CI/CD / deploy (push) Has been cancelled Details
2026-04-11 09:05:51 -04:00
Jeff Emmett c8622bd82b fix: show sign-in gate on private spaces instead of redirecting away
Previously, visiting a private space on *.rspace.online without a session
redirected to rspace.online, causing a redirect loop after login. Now shows
the sign-in gate in-place so the user logs in and stays on the same page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 09:05:44 -04:00
Jeff Emmett 25aedbbb94 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m1s Details
2026-04-11 08:33:20 -04:00
Jeff Emmett 928867a9e2 fix(encryptid): show all known usernames at login, reduce post-auth redirects
- getAllKnownUsernames() now pulls from 4 sources: current session,
  rspace-username cache, known-personas list, and encryptid-known-accounts
- On specific space: stay on that page (reload only, no redirect away)
- On landing: go straight to dashboard (hardcode "rspace" module)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 08:33:08 -04:00
Jeff Emmett d68f01e2b0 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m22s Details
2026-04-11 08:03:35 -04:00
Jeff Emmett 70c162b4e1 chore: add backlog tasks 142-143, fix task-120 filename encoding
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 08:03:13 -04:00
Jeff Emmett 590cb67e02 feat(rflows): improve flow visualization with distinct edge colors and overflow glow
Differentiate spending (blue) and overflow (amber) edges from inflow (green),
increase fill opacity, add approaching-overflow pulse animation and status badge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 08:03:00 -04:00
Jeff Emmett c3457cf98f feat(encryptid): show registered usernames in login modal instead of text input
Display known accounts as clickable buttons in the sign-in modal so users
pick their username rather than typing it — prevents accidental new passkey
creation from typos. Falls back to manual input via "Use a different account".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 08:02:36 -04:00
Jeff Emmett d78b7fdb14 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m15s Details
2026-04-10 23:21:44 -04:00
Jeff Emmett c2c0dadebe fix: move shape-add toolbar next to bottom toolbar instead of bottom-right corner
Repositions the vertical shape-add toolbar (Write, Embed, AI, etc.) from
the fixed bottom-right corner to sit immediately right of the centered
bottom drawing toolbar. Prevents overlap with the bug report button.
JS dynamically positions on load/resize; mobile retains bottom-right.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 23:21:33 -04:00
Jeff Emmett ad218e72ad Merge branch 'dev'
CI/CD / deploy (push) Successful in 5m41s Details
2026-04-10 23:10:39 -04:00
Jeff Emmett e6328581a7 feat: customizable dashboard with persistent home icon and widget system
Adds always-visible home button in tab bar, toggleable dashboard overlay,
widget card system with 8 widgets (tasks, calendar, activity, members,
tools, quick actions, wallet, flows), customize mode with toggle/reorder,
and dashboard summary API endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 23:10:27 -04:00
Jeff Emmett fa6c7da419 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m47s Details
2026-04-10 22:31:10 -04:00
Jeff Emmett 2f4258aa32 feat: refresh landing page with glow animation, SVG icons, interop diagram
Restore personality from old Next.js landing: animated hero glow, playful
"MySpace → (you)rSpace" copy, SVG feature cards with teal/indigo accents,
shield graphic for EncryptID, interoperability ASCII diagram, sharper
philosophy copy, ecosystem grid with r*.online domains, richer footer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 22:30:55 -04:00
Jeff Emmett 0641a3189f Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m34s Details
2026-04-10 22:26:34 -04:00
Jeff Emmett 53c757e68e fix: comprehensive memory leak and performance fixes across 44 files
Browser-side:
- Fix switchSpace() to LRU-evict idle space WebSocket connections (cap: 3)
- Add runtime.unsubscribe() to disconnectedCallback in 24 components
- Fix DocSyncManager.unsubscribe() to clean up syncStates, timers, listeners
- Fix 14 components leaking RAF loops, ResizeObservers, MutationObservers,
  document/window listeners, setIntervals, MapLibre WebGL contexts, and
  AbortControllers on disconnect
- Deduplicate Automerge WASM: module builds now use global shim from
  shell-offline instead of bundling ~2.5MB each (8 modules affected)

Server-side:
- Add LRU eviction to SyncServer.#docs (cap: 500, evicts idle docs with
  no subscribers, persists to disk before eviction)
- registerWatcher() now returns unsubscribe function

Data:
- Cap unbounded CRDT arrays: rexchange chatMessages (200), rcart events (200)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 22:26:24 -04:00
Jeff Emmett e3298ca7f1 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m53s Details
2026-04-10 19:58:10 -04:00