update#367
Open
garethpaul wants to merge 10 commits into
Open
Conversation
Design doc covers architecture, 5 adversarial debate findings, risk matrix. Implementation plan has 30 bite-sized tasks across 5 phases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Synthesize a layered defense strategy for quality from a structured debate between ten philosophical positions (strict TDD, type-system-first, integration-first, pragmatic minimalist, property-based testing, mutation testing, contract/API-first, deployment safety, anti-mock realism, and CI guardrails). Each position attacked the others with codebase-specific evidence; the consensus is captured in docs/PHILOSOPHY.md. Adds: - CLAUDE.md with project instructions and philosophy summary - docs/PHILOSOPHY.md with the 6-layer defense strategy consensus - docs/philosophy/positions/*.md with all 10 original position papers Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transform single-tenant moltbot-sandbox into a multi-tenant platform
where users authenticate with their Poe API key and get their own
sandboxed OpenClaw instance.
- Auth: Poe API key validation, HMAC-SHA256 session tokens, AES-GCM
key encryption, login/logout/me routes, rate limiting (10/min/IP)
- Multi-tenant: per-user Durable Object sandbox resolution via
getSandbox(env.Sandbox, userHash), sleepAfter: 1h
- Poe provider: custom provider config in start-openclaw.sh, HTTP
chat completions enabled, device pairing skipped
- R2 persistence: per-user namespaced paths (users/{hash}/openclaw/)
- Frontend: dark-themed LoginPage, ChatPage with sidebar/model
selector/SSE streaming, session-based routing
- Security: CSP headers, cookie hardening, timing-safe crypto
- 113 tests passing, typecheck/lint clean
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrites README for multi-tenant Poe API key auth model, adds step-by-step quickstart guide, fixes hardcoded sleepAfter in auth route to respect SANDBOX_SLEEP_AFTER env var, and updates .dev.vars.example for PoeClaw use case. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…SSETS.fetch
DEV_MODE=true caused /api/auth/me to fake authentication, so the SPA
never rendered the login page. ASSETS.fetch('/') could also redirect or
throw silently, falling through to the container proxy.
- Remove DEV_MODE early-return from GET /api/auth/me (always check session)
- Request /index.html explicitly in ASSETS.fetch to avoid auto-trailing-slash redirects
- Add try-catch around ASSETS.fetch in public route and session middleware
- Remove debug console.log statements from session middleware
- Add 8 new tests for auth flow and SPA serving behavior
- Add bug report in docs/bugs/
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Not all Poe API keys start with "pb-". Remove the prefix check and keep only basic sanity validation (minimum length, no whitespace). The actual key validation happens via the Poe API call. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Implement asymmetric split login page with floating model tags and frosted glass form panel (Instrument Serif + Martian Mono fonts) - Add design tokens (Midnight Gold palette) in index.css with WCAG AA accessibility: focus-visible rings, prefers-reduced-motion, aria-live - Add Makefile as primary dev interface (make check/dev/build/deploy) - Move /api/status into session-protected API routes with boot trigger - Update all docs (README, CLAUDE.md, CONTRIBUTING, GETTING_STARTED) to reference make targets instead of raw npm scripts - Minor formatting cleanups from oxfmt across session/useChat Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cloudflare Sandbox IDs are limited to 1-63 characters. The SHA-256 hex digest is 64 chars, causing failures when used as a sandbox identifier. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three issues prevented the HTTP chat completions endpoint from working: 1. The endpoint was only enabled inside the POE_API_KEY config block in start-openclaw.sh — moved it to always-on since PoeClaw is an HTTP API. 2. buildEnvVars never forwarded POE_API_KEY from the worker env to the container, so the Poe provider was never configured in dev mode. 3. Gateway token was only injected for WebSocket requests, not HTTP — added token injection for HTTP proxy requests too. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The OpenAI-compatible HTTP endpoint expects the gateway token via Authorization: Bearer header, not query params. Query params only work for WebSocket connections. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.