feat: Phase 3 — Emisso Factory company, agent skills, PR fixes - #2
Conversation
|
@claude review edge cases. |
|
Claude finished @cdotte's task in 2m 42s —— View job Edge Case Review
Findings🔴 P1 —
|
| Severity | Count | Key issues |
|---|---|---|
| 🔴 P1 | 2 | proc.stdin unhandled EPIPE crash in runner.mjs; SSH URL silently loses git credentials |
| 🟡 P2 | 4 | AbortError misclassified as sandbox timeout; edit-mode MCP servers saved to wrong key; seed non-idempotent/untransacted; UI result entry always shows 0 tokens |
| 🔵 P3 | 3 | Parallel clone loses secondary errors; stdout cap overshoot; sessions accumulate on re-auth |
The two P1s are worth fixing before merging since they cause silent failures that are hard to debug in production (the stdin EPIPE crash and the SSH URL credential loss both produce confusing non-zero exits with no actionable error message).
Seed the Emisso Factory company with 3 agents (Engineer, SDR, Marketing), all using emisso_sandbox adapter pointing to emisso-hq. Includes project, workspace, goal, sample issues, and budget policies. Port the SDR skill from emisso-hq and add a new Marketing content skill. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove dead process launch in emisso-sandbox execute (P1: spawned claude then immediately killed it, wasting sandbox compute) - Add missing "-" after --print in runner script (P1: stdin prompt was silently ignored without the positional arg) - Move emisso-specific fields out of shared CreateConfigValues into EmissoCreateConfigValues to avoid polluting upstream types - Fix MCP textarea stale state by always writing to mcpServersJson - Use higher-entropy session token (256-bit hex vs UUID) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Log warning when instructionsFilePath not found (was silently ignored) - Clamp cloneDepth to [1, 10000] (depth 0 caused full clones) - Skip additionalRepos with empty repoUrl (was causing cryptic git errors) - Broaden timeout detection to catch SDK-specific errors (TimeoutError, SandboxTimeoutError, 408, 504) - Cap fullStdout accumulation at 5 MB to prevent unbounded memory growth - Upgrade Vercel auth check from warn to error (missing auth blocks execution) - Collect all tool_result blocks per user message, not just the first Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
P1 fixes:
- Add proc.on('error') and proc.stdin.on('error') handlers in runner
script to prevent unhandled EPIPE crashes
- Throw on SSH/invalid URLs in embedGitCredentials instead of silently
returning the original URL without credentials
P2 fixes:
- Edit-mode MCP textarea now writes both mcpServersJson (display) and
mcpServers (parsed object the server reads)
- Seed is now idempotent (checks if company exists) and wrapped in a
transaction to prevent partial state on failure
- Parse-stdout result entry now extracts real token counts from
modelUsage/usage instead of hardcoding 0
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9eaf304 to
5005bfe
Compare
Code review3 issues found. Checked for bugs and CLAUDE.md compliance. 1. CLAUDE.md violation —
|
Summary
emisso_sandboxadapter, project + workspace, goal, 3 sample issues, 2 budget policies ($1,000/mo company, $500/mo engineer)Test plan
pnpm typecheckcleanpnpm buildpassespnpm dev→ run seed → verify company + 3 agents + project + workspace + issues + budget policies createdemisso_sandboxadapter🤖 Generated with Claude Code