Commit Graph

761 Commits

Author SHA1 Message Date
Jeff Emmett fe3e3621af feat(canvas): rApplet Phase 2 — port chips, data flow, toolbar palette, 15 module applets
- Replace port-indicator dots with port-chip pills (colored border + dot + name)
- Add setPortValue override bridging FolkArrow piping to onInputReceived/emitOutput
- Add Applets toolbar group with dynamic palette + template section
- 15 new module applet files: rtasks, rtime, rcal, rchats, rdata, rdocs,
  rnotes, rphotos, rmaps, rnetwork, rchoices, rinbox, rsocials, rbooks, rexchange
- 20 total applet cards across 18 modules (was 5 across 3)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 13:08:49 -04:00
Jeff Emmett 184da55813 feat: brandedAppName helper, rData cloud refactor, branding color tweaks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 13:08:36 -04:00
Jeff Emmett adda731df1 feat(canvas): add rApplet circuit components + template system
Unified applet abstraction for canvas — compact dashboard cards with typed
I/O ports, expandable circuit editors, and save-able reusable templates.

New files: shared/applet-types.ts, lib/folk-applet.ts, lib/applet-circuit-canvas.ts,
lib/applet-template-manager.ts, lib/applet-defs.ts, plus applets for rGov (Signoff Gate,
Governance Circuit), rFlows (Flow Summary), rWallet (Balance Card, Token Balance).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:01:30 -04:00
Jeff Emmett 219fd45ad7 fix(rdata): use outputPaths instead of tabs for single sub-nav bar
Replaced dual-bar layout (subnav + tabbar) with standard outputPaths
so rData views (Content Tree, Cloud, Analytics) render in the unified
subnav pill bar like all other modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 11:46:19 -04:00
Jeff Emmett a2dbf4533a feat(rchats): add global chat widget + unread count endpoint
Persistent chat panel accessible from any page via header icon.
Sliding right panel (360px) with channel selector, message feed,
composer, and unread badge. REST polling with localStorage state
persistence. Includes unread-count API endpoint for badge updates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 11:15:33 -04:00
Jeff Emmett 0f6b5ecd8d fix: disable all feature tours — shell welcome tour, TourEngine, landing links
Tours were demoing stale features and auto-triggering annoyingly.
TourEngine.start() now returns immediately (no-ops). Shell welcome
tour JS/CSS/HTML removed. "Start Guided Tour" links stripped from
all 27 landing pages. Tour CSS selectors removed from info panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 11:12:00 -04:00
Jeff Emmett a5aeb9fef5 fix(rtime): remove empty shell subnav + compact mobile tab/stats bars
Shell subnav now skips rendering when module has no outputPaths/subPageInfos
(rTime uses internal tab-bar). Mobile CSS tightened: smaller tabs, condensed
stats-bar, skill legend hidden on narrow screens.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:30:29 -04:00
Jeff Emmett 9002e0ffb3 fix(rmeets): replace Jitsi MI button with custom toolbar link + serve favicon.ico
Jitsi's built-in meetingintelligence toolbar button hit their paid API
(404). Replaced with customToolbarButtons entry that opens our own MI
page. Also serve favicon.png for /favicon.ico requests (was 503).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 23:29:07 -04:00
Jeff Emmett 4c91ba4c6d fix(rtime): remove duplicate header tabs in sub-navigation
The shell's rapp-subnav rendered Canvas/Collaborate/Fulfillment pills
(from outputPaths) while the folk-timebank-app component also rendered
its own tab-bar with the same three views. Remove outputPaths and add
explicit routes for /canvas and /collaborate so URLs still work but
navigation only appears once via the component's internal tab-bar.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 00:27:34 +00:00
Jeff Emmett 2ba20fabbb feat(rtime): use rTasks as task source — WeavingDoc overlay integration
rTime now pulls tasks from rTasks boards instead of maintaining its own
Task type. New WeavingDoc stores canvas overlay data (needs, position,
notes, links) while rTasks BoardDoc remains source of truth for task
metadata. 6 new /api/weave routes, updated connections/exec-state to
WeavingDoc, compat shims on legacy endpoints, task picker for unplaced
rTasks items, MCP tools updated (rtime_list_woven_tasks, rtime_place_task),
migration script for existing data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 17:09:01 -04:00
Jeff Emmett 240131ae70 feat(rflows): outcome→rTasks integration + overflow pipe interactivity
- Add linkedTaskIds/linkedBoardId to OutcomeNodeData (schema v5)
- Enhanced outcome modal: linked tasks list, create/link/unlink actions, task picker, deep links to rTasks
- 5 new API endpoints for outcome-task CRUD + board task listing
- Bidirectional status sync: all linked tasks DONE → outcome completed; any IN_PROGRESS → outcome in-progress
- Overflow pipe click-to-configure: popover with allocation sliders per target
- Animated flow stripes on active overflow pipes (CSS keyframe + SVG dash)
- Single click outcome → modal (was inline edit); dblclick still opens inline edit
- Blue count badge on outcome basin when tasks linked
- Outcome basin hover glow + cursor pointer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 16:41:18 -04:00
Jeff Emmett 2e43b6aadc fix(rtime): pool circle resize + remove hex port dots + auto-weave + tooltip
- Fix pool circle not resizing: clear inline canvas dimensions before
  measuring, observe pool panel via ResizeObserver, use rAF for layout
- Remove visible port dot on hexagon commitment nodes — lines connect
  directly to hex edge, invisible hit area preserved
- Auto-weave: dropping commitment on canvas auto-connects to nearest
  unfulfilled task (was showing suggestion preview requiring confirmation)
- Add SVG tooltip on proposed connections: "{name} has been notified of
  this proposed commitment, and can approve/deny for 48 hours"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 11:49:06 -04:00
Jeff Emmett 70cb919541 fix(rnetwork): add auth headers to graph viewer API calls; add Blender multi-user
- Fix 401 errors on rNetwork by passing encryptid-token as Bearer auth
  on /api/info, /api/graph, /api/workspaces fetch calls
- Add blender-multiuser replication server (multi-user-server:0.5.8)
  to docker-compose with health check and resource limits
- Add Multiplayer tab to folk-blender shape with connection info,
  server status check, and setup instructions
- Add /api/blender-multiuser/status endpoint for TCP health probe

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 23:32:33 -04:00
Jeff Emmett dc30b8f2e6 feat(rdocs): auto-scaffold "New Documents" notebook with blank note on first use
- Real spaces: if no notebooks exist after loadNotebooks(), auto-creates
  a "New Documents" notebook via API with a blank "Untitled" note inside
  it, expanded and opened for editing
- Demo mode: prepends "New Documents" notebook with blank starter note
  as the first item; auto-opens it on both fresh load and localStorage
  restore so rDocs always starts with a ready-to-edit blank document

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 13:37:47 -04:00
Jeff Emmett 6e9de87074 fix(rdocs): persist demo notebook state in localStorage
Demo mode edits were lost on page reload — now debounce-saved to
localStorage and restored on next visit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 13:26:11 -04:00
Jeff Emmett 93d75aba81 fix(rtime): split pool and weaving as interactive 50/50 on mobile
Replace scrollable stacked layout with flex: 1 split so both
visualizations are visible and interactive simultaneously without
scrolling. Sidebar capped at 80px to save vertical space.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:51:47 +00:00
Jeff Emmett 18a688bade feat(rauctions): add rAuctions module with hub page and external app embed
Registers rauctions as an embedded rSpace module that proxies the
standalone rauctions.online Next.js app. Includes hub page with active
auction listings, landing page, and MODULE_META entry for canvas display.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:51:10 +00:00
Jeff Emmett 195b42eb3b feat(collab): scope SVG cursors by active sub-document view
Remote cursor arrows and focus rings from peers viewing a different
note in rDocs are now suppressed. A generic viewId concept on the
collab overlay lets any rApp with sub-views opt in via a
rspace-view-change CustomEvent. Peers on a different view appear
dimmed in the people panel with a document icon hint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 11:17:29 -04:00
Jeff Emmett 698a630b8b feat(rdocs+mi): add MarkItDown integration for PDF/DOCX/PPTX/XLSX conversion
Office documents dropped onto canvas or imported via rDocs are now converted
to Markdown using Microsoft's markitdown CLI. Canvas drops trigger triage;
rDocs imports create rich notes with the original file kept as an attachment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 10:17:49 -04:00
Jeff Emmett 48c7f15de4 feat(app-switcher): add badges for all rApps, sort toggle, and pin favorites
- Add r<emoji> badges for rDocs, rDesign, rSheets, rTime, rGov, rAgents,
  rExchange to both MODULE_BADGES and FAVICON_BADGE_MAP
- Add MODULE_CATEGORIES entries for all new modules
- Add "Govern" category for rGov
- Sort modules alphabetically within each function category
- Add sort toggle (By Function / A-Z) at bottom of sidebar, persisted
  in localStorage
- Add star/pin button on each rApp — pinned items appear in a "Pinned"
  section above "Recent", persisted in localStorage
- Fix rAuctions module ID: 'auctions' → 'rauctions' for consistency,
  with alias in MODULE_ALIASES for backward compat
- Change rAuctions emoji from 🏛 to 🎭

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 08:49:52 -04:00
Jeff Emmett 75fd5cf4be feat(mi): per-space knowledge index with ranked context injection
Replace the 265-line data dump (35 modules × 3 items) in MI system prompts
with a trigram-ranked knowledge index that surfaces only the top-18 most
relevant entries per query. Adds per-space conversation memory persisted
to disk for cross-session context.

New files:
- server/mi-trigrams.ts — trigram + Jaccard similarity utilities
- server/space-knowledge.ts — SpaceKnowledgeIndex with 5-min TTL cache
- server/space-memory.ts — SpaceMemory with debounced disk persistence

Changes:
- mi-routes.ts: ~280 lines removed, replaced with ranked index call
- sync-instance.ts: cache invalidation on doc changes
- rauctions/mod.ts: fix ModuleScoping type (defaultScope, userConfigurable)
- mcp-tools/ragents.ts: fix AccessResult property access (claims.username, claims.sub)

~80% token reduction per MI request (~6,300 → ~1,320 tokens).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 22:19:07 -04:00
Jeff Emmett 04cb381e3c chore(rnotes): bump folk-notes-app.js cache version to v=10
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 22:09:32 -04:00
Jeff Emmett 79d24a327e fix(rnotes): fix vault upload — field name mismatch and missing auth header
The upload form sent the file as "vault" but the server expected "file",
causing all uploads to fail with 400. Also added the encryptid JWT token
to the upload request so authenticated routes don't return 401.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 22:06:22 -04:00
Jeff Emmett d4877abff9 fix: add rAuctions module stub to fix missing import crash
The server imported rauctions/mod but the module was never committed,
causing a crash loop on startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 20:14:22 -04:00
Jeff Emmett c682bc7076 feat(ragents): add agent-to-agent exchange module
Moltbook-inspired agent exchange where members' MI agents can:
- Register with name, capabilities, and avatar per space
- Post to topic-based channels (general, packages, custom)
- Reply in threaded discussions
- Share structured JSON data packages alongside posts
- Upvote/downvote to surface the best contributions

Includes Automerge CRDT schemas, 9 REST API endpoints,
6 MCP tools, MI data query integration, and landing page.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:27:29 +00: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 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 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 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 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 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 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 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 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 76df746e15 feat: cross-browser/cross-device compatibility sweep
Browser compat gate (WASM/ESM check + structuredClone polyfill),
structured WebAuthn error handling with user-facing messages,
email-only login mode when passkeys unavailable, Firefox passphrase
fallback for document encryption (salt storage, modal UI, key
derivation bridge), CSS flex gap fallbacks for Safari <14.1,
MapLibre CDN load error handling, and server-side auth error
improvements with proper HTTP status codes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 19:57:59 -04:00
Jeff Emmett c6cb875ba4 feat(rcal): add Google Calendar sync integration with connectors menu
- Google Calendar API client (server/google-calendar.ts): token auto-refresh,
  list calendars, fetch events with incremental sync, create events, mapping
- OAuth scopes: added calendar.readonly + calendar.events, returnTo param
- rCal routes: subscribe, sync, sync-all, unsubscribe, push-to-Google endpoints
- Background sync loop: 10-minute interval with incremental sync tokens
- Frontend: calendar picker modal, sync button, per-event Google export
- MCP: source_type filter on rcal_list_events, new rcal_sync_google tool
- Connectors menu: Google shows services (Docs/Drive/Calendar) + calendar count,
  added Obsidian & Logseq as file-based connectors, Notion shows services
- Fix: import-export dialog API base corrected from rnotes to rdocs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 19:45:52 -04:00
Jeff Emmett 885f0baeb1 feat: add Linea chain support and WalletAdapter abstraction
TASK-120 Phases 1-2: Add Linea mainnet (59144) and Linea Sepolia (59141)
to all chain maps (CHAIN_MAP, RPC, env names, native tokens, popular tokens,
CoinGecko, Zerion, chain colors/names, Safe prefixes). New WalletAdapter
class provides chain-parameterized abstraction over Safe/EOA/UP wallets
with immutable withUniversalProfile() and fromSafe/fromEOA/fromUP factories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 19:14:31 -04:00
Jeff Emmett 8d859b87bf feat(rmeets): add Meeting Intelligence page, space-scoped rooms, toolbar buttons
- Add /meeting-intelligence route with aggregate knowledge (action items,
  decisions, topics) and space-scoped meeting cards
- Add Meeting Intelligence link to hub page and in-room MI dropdown
- Prefix Jitsi room names with space slug for conference_id scoping
- Add shareaudio and meetingintelligence to embed toolbar buttons
- Recordings route now filters by conference_prefix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 18:37:35 -04:00
Jeff Emmett 18b61fa5e6 feat: rebuild rNotes as vault browser, editor code now in rDocs
Phase 2-3 of the rNotes/rDocs split. Rewrites rNotes from a full TipTap
editor (~1800 lines) into a lightweight Obsidian/Logseq vault sync and
browse module (~560 lines). Rich editing features remain in rDocs.

rNotes vault browser:
- VaultDoc schema: metadata-only in Automerge (title, tags, hash, wikilinks)
- ZIP vault uploads stored on disk at /data/files/uploads/vaults/
- File tree browser, search, read-only markdown preview
- Wikilink graph data endpoint for visualization
- 5 MCP tools: list_vaults, browse_vault, search_vault, get_vault_note, sync_status
- Browser extension compat shim redirects old API calls to rDocs

Cleanup:
- Removed dead editor files from rnotes (converters, components, local-first-client)
- Updated MI integration to use getRecentVaultNotesForMI
- Updated ONTOLOGY.md with new module descriptions
- Bumped JS cache versions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 18:05:35 -04:00
Jeff Emmett 99492cc532 feat: extend browser back button support to all rApp modules with view navigation
Adds ViewHistory integration to 9 additional modules (rtime, rswag, rwallet,
rbnb, rvnb, rnetwork, crowdsurf, rtube, rflows-mortgage), bringing the total
to 17 modules. Browser back now navigates within the current rApp tab before
falling through to tab switching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 17:48:31 -04:00
Jeff Emmett de9cc21301 feat(rmeets): require username on join, fix settings/background, add MI toolbar
- Enable prejoin page so users must enter a display name before joining
- Add requireDisplayName, SETTINGS_SECTIONS, disableVirtualBackground config
- Add floating Meeting Intelligence button with recordings/search links
- Add chat, settings, participants-pane to folk-jitsi-room toolbar
- Also includes: rDocs module expansion, tab-cache/view-history updates,
  converter rewrites, MCP tool additions, OAuth fixes, backlog tasks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 14:06:47 -04:00
Jeff Emmett 8887e18dda fix: rename rsheet module to rsheets (fixes missing module crash)
The rsheet→rsheets rename was partially applied - server/index.ts
imported rsheets/mod but the files still lived at rsheet/. This
caused a crash on startup: "Cannot find module '../modules/rsheets/mod'".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:19:32 -04:00
Jeff Emmett 1de038eeab feat(comments): spatial comment pins on all rApp module pages
Adds Figma-style threaded comment markers anchored to data-collab-id
elements across all module pages. Comments stored in per-space Automerge
doc, synced via existing local-first stack. Bell is now context-aware
(canvas pins on canvas, module pins on module pages). Notifications
route through existing WS/push/email system with new module_comment
and module_mention event types.

New files: module-comment-types, module-comment-schemas,
rstack-module-comments component. Updated: shell, comment bell,
notification routes. Added data-collab-id to crowdsurf, rtime, rmeets.
Fixed pre-existing SKILL_LABELS import error in rtime/mod.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:15:05 -04:00
Jeff Emmett f0039bcb7c fix(mcp): add untracked rchats + rsheet schema files
These schemas are imported by the MCP tool files and module mod.ts
but were never committed, causing a crash on deploy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 10:34:12 -04:00
Jeff Emmett 2e8e702d75 feat(mcp): 101 MCP tools across all 35 rApps + security hardening + MI integration
- Add centralized auth helper (_auth.ts) with resolveAccess() enforcing
  space visibility (public/permissioned/private) and role-based access
- Retrofit 5 existing tool groups (rcal, rnotes, rtasks, rwallet, spaces)
  with resolveAccess gates
- Add 30 new MCP tool files covering all remaining rApps:
  rsocials, rnetwork, rinbox, rtime, rfiles, rschedule, rvote, rchoices,
  rtrips, rcart, rexchange, rbnb, rvnb, crowdsurf, rbooks, rpubs, rmeets,
  rtube, rswag, rdesign, rsplat, rphotos, rflows, rdocs, rdata, rforum,
  rchats, rmaps, rsheet, rgov
- Add ForMI data exports to all module mod.ts files
- Wire 6 core modules into MI context (mi-data-queries.ts, mi-routes.ts)
- forceAuth for sensitive modules (rinbox, rchats)
- Omit sensitive fields (storagePath, fileHash, bodyHtml) from responses

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 10:25:17 -04:00
Jeff Emmett 69da9b0ee7 feat(rdata): add data membrane visualization to landing page
Add interactive concentric zone visualization showing Personal (encrypted/local),
Permissioned, and Public data membranes. Drag-and-drop objects between zones
triggers permission change confirmations. Mobile-optimized with tap-to-select,
responsive node sizing, and scroll prevention.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 00:02:04 +00:00
Jeff Emmett de698a2aa3 feat(comments): notify all space members on new comments and replies
Broadcasts in-app, push, and email notifications to all space members
when a comment pin is created or replied to. @mentioned users get their
specific mention notification instead (no double-notify). Fixes pre-existing
TS error in rtasks local-first-client (missing dueDate default).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 14:12:09 -04:00
Jeff Emmett 5ddde13b0d feat: magic link responses for polls and RSVPs
HMAC-signed stateless tokens let external respondents vote on rChoices
polls or RSVP to rCal events via a single tap — no account required.
Routes mounted at /respond/:token bypass space auth. Typed EventAttendee
schema replaces unknown[] on CalendarEvent.attendees. Invite endpoints
on both modules generate tokens and optionally send email invitations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 13:41:17 -04:00
Jeff Emmett 17a5922a44 feat(rcal): semantic zoom on overlapping day cell events
When 3+ events land on the same day in month view, individual event
labels collapse into spatial summary chips showing where the user
needs to be (e.g. "Berlin 3", "Amsterdam 2"). Chip granularity
auto-adapts: city → country → continent as location diversity grows.
Virtual events shown separately. ≤2 events still show full labels.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 12:44:01 -04:00
Jeff Emmett 65b72ed7ac feat(rcal): map shows routes with booking status, calendar keeps semantic zoom
Map always shows individual event markers (no clustering). Transit
lines now colored by booking status: green solid = booked, red dashed
= not yet booked. New bookingStatus field on CalendarEvent as
placeholder for the forthcoming booking pipeline. Calendar views
retain semantic zoom (country/city chips at year/season/month levels).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:28:08 -04:00
Jeff Emmett 883f4b5f2c feat(rtasks): assignee dropdown from space members + drag guard
- Load space members via /api/spaces/:slug/members for assignee dropdown
- Detail panel shows <select> with space members when available, falls
  back to text input when unauthenticated or no members loaded
- Assignee badge shown on task cards with resolved display names
- Assignee selectable on task creation form
- Server accepts assignee_id on POST /api/spaces/:slug/tasks
- Add _justDragged guard to prevent column click-to-create from
  firing after a drag operation ends (100ms debounce)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 22:32:20 -04:00
Jeff Emmett 64ba4c1f1f feat(rmeets): enable shared video & music toolbar buttons
Add sharedvideo and sharedmusic to Jitsi toolbar config in both
the full-screen view and folk-jitsi-room component. Also set
disableThirdPartyRequests to false so the features aren't blocked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 15:29:13 -04:00
Jeff Emmett a4a800a498 fix(rmeets): remove loading spinner after Jitsi iframe injection
The "Connecting to meeting..." loading div remained visible on top of
the Jitsi iframe in the minimal view. The iframe is created by the
JitsiMeetExternalAPI constructor, so remove the spinner immediately after.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 14:55:11 -04:00
Jeff Emmett a3ec58a4c5 fix(rmeets): correct Jitsi external API script path
The Jitsi server at jeffsi.localvibe.live serves the external API at
/libs/external_api.min.js, not /external_api.min.js (which returns HTML
due to SPA routing). Fixed in both the inline minimal view and the
folk-jitsi-room component's dynamic script loader.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 14:50:44 -04:00
Jeff Emmett 4918787bb5 fix(rtasks): enable public writes + click-to-create in any column
- Add publicWrite to rtasks module so unauthenticated task creation works
  (was blocked by space auth middleware returning 403)
- Click empty column space or "+ Add task" to open create form in that column
- Tasks created in clicked column get that column's status automatically
- Show error message when task creation fails instead of silent failure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 21:26:18 -04:00
Jeff Emmett ab5129d7dc refactor(rtasks): remove workspace list, single board per space
Load kanban board directly on page load instead of showing a workspace
picker first. ClickUp connect button moved into board nav.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 20:27:44 -04:00
Jeff Emmett ac332468ba fix(rflows): mortgage simulator perf + basic/advanced toggle
Fix event listener accumulation (duplicate handlers on every render),
add partial DOM updates for playback/scrubbing/interactions, debounce
config slider recompute via rAF, and add Basic/Advanced mode toggle
that hides advanced controls (tranches, interest, terms, overpayment,
reinvestment) by default. Also fix pre-existing TS Map iteration errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 18:31:04 -04:00
Jeff Emmett 1dc6de7759 fix(rtasks): make all endpoints auth-optional, handle stale tokens
- POST /api/spaces, POST /api/spaces/:slug/tasks, PATCH /api/spaces/:slug
  now work without auth (like PATCH /api/tasks/:id already does)
- Frontend retries without auth headers on 401 (stale token recovery)
- Bump JS cache to v6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 18:05:34 -04:00
Jeff Emmett c00221c1e5 fix(rtasks): replace browser prompt/confirm with inline forms
- Workspace creation uses inline text input instead of prompt()
- Task deletion uses inline confirmation bar instead of confirm()
- Better error display when workspace creation fails (shows server error)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 17:21:52 -04:00
Jeff Emmett 4822f0858a fix(rtasks): bump JS cache version to v5 for new frontend features
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:53:25 -04:00
Jeff Emmett eeab84e588 feat(rtasks): add detail panel, column management, search/filter, drag polish
- Task detail slide-out panel with inline editing of all fields
- Column/status management via gear icon (add, remove, rename, reorder)
- Search & filter bar with text search, priority dropdown, label click filter
- Enhanced task cards with description preview, due date badge, delete hover
- Drag polish with rotation/scale transform on dragging cards
- Empty drop zones always visible with green highlight on drag-over
- Escape key closes detail panel and column editor
- Individual field saves on blur/change (no full re-render flicker)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:49:58 -04:00
Jeff Emmett c590bacc40 fix(rtasks): add auth headers to all API calls + canvas toolbar to bottom-right
rtasks fetch calls were missing Authorization Bearer headers, causing 401s
on private/permissioned spaces. Added authHeaders() helper using encryptid-token
from localStorage (matching pattern in folk-feed, folk-multisig-email, etc.).

Also includes: due date field, task detail panel, search/filter, column editor,
board PATCH endpoint, and canvas toolbar repositioned to bottom-right corner
(collapsed wrench icon on all screen sizes, panel opens leftward).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:42:16 -04:00
Jeff Emmett a76a6a9f6e feat(rcal): add semantic zoom for map and calendar views
Map markers now aggregate by continent/country/city based on spatial
zoom level instead of always showing individual dots. Calendar views
(year, season, multi-year, month) show zoom-aware spatial labels.
New geo-hierarchy.ts provides offline continent/country lookup from
coordinates with breadcrumb generation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:40:08 -04:00
Jeff Emmett 75c230eabe fix(rmeets): correct Jitsi API config and auto-join room from URL slug
Fix configOverwrite/interfaceConfigOverwrite property names (were
configOverrides/interfaceConfigOverrides — silently ignored by Jitsi).
Disable pre-join lobby so rooms render immediately. Add error handling
for script load failures. Use external_api.min.js to match component.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:24:15 -04:00
Jeff Emmett 13410dd3e7 fix(rmeets): default room view to clean full-screen Jitsi without shell
Swap default /:room route to serve minimal full-screen Jitsi (previously
required ?minimal=1). Shell mode now opt-in via ?shell=1 or director mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:11:05 -04:00
Jeff Emmett 391d3a0cb6 feat(rflows): port distributed mortgage simulator from rfunds-online
Replaces the simple lending pool dashboard at /mortgage with the full
rfunds-online mortgage simulator. Models community-funded mortgages with
80+ tranches, variable terms, reinvestment loops, secondary markets,
and 5 visualization modes (Network, Flow, Grid, Lender calc, Borrower calc).

New files:
- mortgage-types.ts & mortgage-engine.ts (pure TS, copied verbatim)
- folk-mortgage-simulator.ts (1639-line web component, all views)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:10:59 -04:00
Jeff Emmett c037e13423 feat(rmeets): minimal mode for clean meeting links without rSpace shell
Add ?minimal=1 query param that renders a full-screen Jitsi meeting
page without the rSpace header, tab bar, or module chrome. Used by
scheduled meeting links so guests get a clean, direct video call
experience. Includes prejoin screen, all standard Jitsi controls,
and auto-closes the tab when the meeting ends.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 01:24:31 +00:00
Jeff Emmett 15ca1868b0 fix(rcal): fix calendar view layout bugs — uneven day widths, event overlap, duplicate detail
- Change grid-template-columns from repeat(7, 1fr) to repeat(7, minmax(0, 1fr)) to prevent
  content from stretching day cells unevenly
- Add computeEventColumns() helper using greedy interval-coloring algorithm with per-cluster
  column counts for tiling overlapping events side-by-side
- Apply sub-column layout to day view, week view, and horizontal day view so concurrent events
  no longer render on top of each other
- Guard duplicate day detail rendering when expanded day is at end-of-row or last day of month

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 15:24:30 -04:00
Jeff Emmett e4a0ccd80b feat(rtime): add gas tank fuel gauge and mycelial auto-connect suggestion
Replace thin 4px progress bar on task nodes with a prominent 12px fuel
gauge showing committed (green) + proposed (amber) hours vs total needed.
When an orb is dropped on open canvas, auto-find nearest unfulfilled task
and show a pulsing preview wire with confirm/dismiss buttons — human
approval required before creating the connection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 15:13:54 -04:00
Jeff Emmett 9897bf6517 fix(rcal): revert standaloneDomain to rcal.online — rspace.online hijacked all traffic
Setting standaloneDomain to "rspace.online" caused the domain→module redirect
system to treat ALL rspace.online traffic as rcal, redirecting / to /rcal.
The correct value is "rcal.online" which redirects old rcal.online → rspace.online/rcal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 19:25:14 -04:00
Jeff Emmett b1c54a6e66 fix: update rCal landing, de-spam info popups, fix stale URLs & banner persistence
- rCal landing: strip inline style overrides, use standard rl-* CSS classes
- rCal mod: update standaloneDomain from rcal.online to rspace.online
- Info popup: change from per-rApp auto-show to global one-time auto-show
- Update banner: track dismissal in sessionStorage so it stops re-showing
  on every page load within the same session (likely the "persistent banner")
- rpubs landing: fix stale rcart.online URLs → demo.rspace.online/rcart

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 19:14:27 -04:00
Jeff Emmett efb7ee5600 fix(rexchange): add demo seeding and server-rendered order book page
Replace missing folk-exchange-app.js with server-rendered HTML order book.
Seed 8 demo intents, 2 trades, and 5 reputation records on startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 18:57:59 -04:00
Jeff Emmett bf8e11d426 feat(rexchange): add P2P crypto/fiat exchange module with escrow & reputation
Community members post buy/sell intents for CRDT tokens (cUSDC, $MYCO, fUSDC)
against 8 fiat currencies. Bipartite solver matches intents every 60s. Escrow
via token-service burn/mint trio. Reputation scoring with badges. 14 API routes,
canvas shape with physics orbs, and landing page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 18:32:16 -04:00
Jeff Emmett df8901c975 feat(rgov): clickable signoff gates with authority check + project recalc
Binary signoff nodes now have a clickable checkbox that toggles
satisfied state. Checks EncryptID JWT for authority (assignee match),
falls back to allowing anyone in demo mode. Toggling a signoff
auto-recalculates connected project aggregator gate counts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 02:07:13 +00:00
Jeff Emmett ba7a5733b8 fix(rgov): mobile-friendly canvas with collapsible sidebars and touch support
- Collapsible palette sidebar (hamburger toggle, hidden by default on mobile)
- Pinch-to-zoom and two-finger pan for touch/pen
- Larger touch targets for ports and zoom controls
- Responsive text sizing and compact toolbar on small screens
- Detail panel goes full-width on very small screens
- touch-action: none on SVG to prevent browser gesture conflicts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 02:04:52 +00:00
Jeff Emmett 2e2fbae8bf feat(rgov): standalone n8n-style GovMod circuit canvas
Add <folk-gov-circuit> component with interactive SVG canvas pre-loaded
with 3 demo governance circuits. 8 node types (signoff, threshold, knob,
project, quadratic, conviction, multisig, sankey) with pan/zoom, node
dragging, Bezier wiring, palette sidebar, and detail panel. Compatible
with rspace canvas shape types for rapplet integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:55:52 +00:00
Jeff Emmett 5b4ab00a2d fix(rgov): render canvas directly instead of redirecting to /rspace
The rgov module page was showing a static description with a link to
/rspace. Now it renders the actual canvas (same as rspace module) with
moduleId="rgov" so GovMod shapes display inline at /rgov.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:41:08 +00:00
Jeff Emmett d1a9fc338d feat(rtime): add external time logs API and fulfillment dashboard
Add ExternalTimeLog schema and REST endpoints for ingesting time entries
from backlog-md CLI. Auto-creates commitments, links to existing tasks,
and supports solo settlement with reputation/skill curve updates.

New Fulfillment dashboard tab shows time logs, skill totals with progress
bars, and inline settle buttons. Export-to-backlog endpoint enables
importing rTime tasks into local backlog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 17:38:08 -07:00
Jeff Emmett b3d6f2eba8 feat(rgov): add quadratic, conviction, multisig & sankey GovMods
Four new governance circuit shapes for delegated democracy:
- folk-gov-quadratic: weight transformer (sqrt/log/linear dampening)
- folk-gov-conviction: time-weighted conviction accumulator (gate/tuner modes)
- folk-gov-multisig: M-of-N multiplexor gate with signer management
- folk-gov-sankey: auto-discovered governance flow visualizer with animated SVG

Registered in canvas-tools (4 AI tool declarations), index exports,
mod.ts (shapes, tools, types, seed Circuit 3), folk-gov-project
(recognizes new types), and landing page (Advanced GovMods section).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 17:03:39 -07:00
Jeff Emmett 5f2b3fd8d1 fix(rcart): streamline Transak widget — skip exchange screen, auto-fill user data
Added hideExchangeScreen, isAutoFillUserData, and paymentMethod params
to both Transak endpoints. This skips the initial exchange screen (we
already provide all required fields) and auto-fills email for Lite KYC,
reducing friction for small transactions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:04:59 -07:00
Jeff Emmett 42546c9a63 fix: use internal mailcow relay (port 25) for all SMTP transports
SMTP auth on port 587 was broken across all modules due to stale
credentials. Since rspace is on the mailcow Docker network, all 6
SMTP transports now use unauthenticated relay on port 25 when the
host is the internal postfix container. Fixes emails for: payment
receipts, space invitations, inbox approvals, agent notifications,
scheduled emails, and publication sharing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 15:12:42 -07:00
Jeff Emmett 4919ca1021 fix(rcart): use port 25 internal relay for payment emails
SMTP auth credentials were stale, causing all payment confirmation
emails to silently fail. Since rspace is on the mailcow Docker network,
use unauthenticated relay on port 25 instead of port 587 with auth.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 15:06:57 -07:00
Jeff Emmett 55067729b1 fix(rcart): graceful server-side page for paid/expired/cancelled payments
When a payment request is in a terminal state (paid, confirmed, expired,
cancelled, filled), the /pay/:id route now renders a static HTML page
with a clear message instead of loading the full JS component. Prevents
"corrupted content error" and shows a friendly "already paid" message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:58:35 -07:00
Jeff Emmett f9dc06394c fix(rcart): force Transak dark mode with colorMode param
Text inputs were rendering in light mode making text invisible against
the dark background. Added colorMode: 'DARK' to both Transak widget
endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:52:28 -07:00
Jeff Emmett 15990cc147 fix(rcart): infer Transak fiat amount from crypto amount for stablecoins
When fiatAmount wasn't explicitly set on a payment request, Transak
defaulted to 300 USD. Now for USDC/USDT/DAI/cUSDC, the fiat amount
is inferred from the crypto amount (1:1 peg) so the widget opens with
the correct payment amount.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:48:48 -07:00
Jeff Emmett 46c326278a feat: ASCII art canvas tool, video gen fixes, scribus/notebook sidecars
- Add folk-ascii-gen canvas shape with pattern/palette selectors
- Add POST /api/ascii-gen proxy to ascii-art service
- Register create_ascii_art in canvas tools + triage panel
- Fix WAN 2.1 t2v endpoint URL (fal-ai/wan/v2.1 → fal-ai/wan-t2v)
- Convert video gen to async job queue (avoids Cloudflare timeouts)
- Fix Docker API Content-Type bug in sidecar-manager
- Convert scribus-novnc and open-notebook to on-demand sidecars
- Add ensureSidecar("scribus-novnc") to rDesign bridge proxy
- Fix Hono ContextVariableMap and handleTransakMessage type errors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:25:48 -07:00
Jeff Emmett 801de38b4a feat(rtime): commitment splitting, pool removal & approval workflow
When dragging a commitment to a task, hours are now split (min of
available, needed), the pool orb shrinks or disappears, and
connections track proposed/committed status with approve/decline UI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:20:48 -07:00
Jeff Emmett 4a54e6af16 fix: enforce subdomain routing — spaces are subdomains, never path segments
Audit and fix ~60 violations across 47 files where URLs were constructed
as /{space}/moduleId instead of /moduleId (subdomain provides the space).

- Add getModuleApiBase() helper to shared/url-helpers.ts
- Fix client components: use getModuleApiBase() for fetch URLs,
  rspaceNavUrl() for navigation
- Fix server routes: use c.get("isSubdomain") for redirects and
  JSON response URLs
- Fix OAuth callbacks (notion, google, clickup): subdomain-aware redirects
- Fix email notification URLs (rvote): use {space}.rspace.online format
- Fix webhook registration (rtasks/clickup): subdomain-aware endpoint URL
- Replace broken #getSpaceSlug() methods in folk-feed, folk-splat
- Replace NODE_ENV checks with proper isSubdomain checks (rdata, rnetwork)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:09:53 -07:00
Jeff Emmett d262eff097 fix(rgov): use path-only href instead of /${space}/ prefix
Spaces are subdomains, not path segments. /rspace is correct since
the space context comes from the subdomain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 13:32:04 -07:00
Jeff Emmett 16f224f065 feat(rgov): add seed template with two example governance circuits
Seeds demo spaces with a "Build a Climbing Wall" circuit (labor threshold +
capital threshold + proprietor signoff → project) and a "Community Potluck"
circuit (budget knob + RSVPs threshold + venue signoff → project), each
pre-wired with arrows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 13:15:25 -07:00
Jeff Emmett 559d146099 feat(rgov): add GovMods landing page and onboarding
Rich landing page with do-ocratic framing, SVG circuit diagram,
"GovMods" branding, modular governance vs monolithic comparison,
and onboarding action. Module now has landingPage function for
bare-domain rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 13:07:02 -07:00
Jeff Emmett f375eb1b43 feat(rgov): add rGov governance decision circuit module
Implements 5 new FolkShape web components for visual governance:
- folk-gov-binary: Yes/No signoff gates
- folk-gov-threshold: Numeric progress gates with contributions
- folk-gov-knob: SVG rotary parameter knobs with temporal viscosity
- folk-gov-project: Circuit aggregators (walks arrow graph backward)
- folk-gov-amendment: Modification proposals with approval voting

Also adds "satisfied" gate condition to folk-arrow, 5 AI canvas
tools, module registration, and all canvas.html wiring.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 13:01:08 -07:00
Jeff Emmett 5f45014226 feat(rtime): unified Canvas view — merge Pool + Weave with pan/zoom
Replace 3-tab layout (Pool/Weave/Collaborate) with 2-tab Canvas + Collaborate.
Canvas tab has collapsible left pool panel with orbs alongside infinite SVG
canvas with pan/zoom (ctrl+wheel zoom, wheel pan, space+drag, touch pinch).

- Long-press orb in pool → drag onto canvas to create commitment node
- Drop on matching task port auto-creates wire connection
- Gold glow highlights unfulfilled task ports matching dragged skill
- "Frame as Tasks" button on solver results creates task nodes with
  dashed intent frame on canvas
- Add intentFrameId to Task schema for solver-to-task linkage
- Zoom controls overlay (+/−/reset)
- Light/dark theme support for all new elements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 12:06:58 -07:00
Jeff Emmett fab155b411 feat(rcart): add MoonPay integration with Transak fallback
Add MoonPay as the primary card payment provider for rCart. MoonPay
uses HMAC-SHA256 signed URLs (no session API needed, no IP whitelisting).
Falls back to Transak if MoonPay keys aren't configured.

- shared/moonpay.ts: URL builder with HMAC signing, currency mapping
- New /api/payments/:id/card-session endpoint picks provider automatically
- Frontend uses unified startCardPayment() with multi-provider message handling
- Set MOONPAY_API_KEY + MOONPAY_SECRET_KEY to activate

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 06:23:14 +00:00
Jeff Emmett e61da960ea feat: migrate to Transak Secure Widget URL API
Transak now requires widget URLs to be generated server-side via their
gateway session API. Direct query-parameter URLs are deprecated.

- Add getAccessToken() with 7-day caching for partner access tokens
- Add createSecureWidgetUrl() that calls the gateway session endpoint
- Falls back to legacy direct URL if gateway returns an error (e.g.
  production IP not yet whitelisted)
- Update rCart and rFlows to use the secure API

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:17:18 +00:00
Jeff Emmett 4f87807438 fix(rcart): use defaultCryptoAmount for Transak widget
Transak rejects `cryptoAmount` when combined with fiatCurrency params.
Use `defaultCryptoAmount` which pre-fills the amount without conflicting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:02:19 +00:00
Jeff Emmett f469f3f40d fix(rcart): ensure Generate QR button is reachable on mobile
The payment request form button was cut off on mobile because the shell
uses height:100vh with overflow:hidden on #app. Add padding-bottom to
the .page container so the button scrolls into view within the flex
overflow:auto content area.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:56:53 +00:00
Jeff Emmett 19885c98e6 fix(rcart): make payment pages publicly accessible
Payment request URLs (e.g. /rcart/pay/:id) should be accessible without
authentication, even in private spaces. The API endpoints were already
exempted from auth, but the client-side shell gate was redirecting
unauthenticated visitors to the module landing page. Set
spaceVisibility="public" on the payment page render to bypass this.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:33:53 +00:00
Jeff Emmett 3c801aecaf fix(rcart): use popup for Transak in all environments
Transak production also sends X-Frame-Options: SAMEORIGIN, blocking
iframe embeds. Switch to popup window for all environments, not just
staging. Show "payment opened in new window" status with re-open button.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:26:30 +00:00
Jeff Emmett 8c349d2003 fix(rflows): align Openfort wallet label with flow-service
Use `user-${email}` instead of raw `email` as the Openfort player label,
matching the flow-service convention. Openfort rejects colons in labels,
and both codepaths must use the same format so users get the same wallet
regardless of whether they on-ramp via rfunds.online or rspace.online.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:59:24 +00:00