Deployment#55
Open
jeewoo-lee wants to merge 110 commits into
Open
Conversation
- Add VERIFY_MAX_CONCURRENT_JOBS env var (default: 1, preserves current behavior) - Add VERIFY_DB_POOL_MIN/MAX env vars with auto-sizing from concurrency - When concurrency > 1, N worker coroutines each claim jobs independently via FOR UPDATE SKIP LOCKED; each creates its own AsyncDaytona client - Single-worker mode (default) keeps shared client for zero overhead - Coordinator coroutine handles stale-job recovery separately - Add duration logging and worker ID prefixes to all log lines - Fix daytona_sdk import to try daytona_sdk before daytona - Add deployment docs: services, env vars, scaling modes - Add 7 tests: pool sizing, _run_one_job, daytona crash recovery, concurrent claim independence Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Transient Daytona errors (CPU quota, rate limits) now retry up to VERIFY_SANDBOX_MAX_RETRIES (default 3) with exponential backoff (VERIFY_SANDBOX_RETRY_BACKOFF * attempt, default 30s base). Non-retryable errors (no fork, disabled) still fail immediately. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Instead of giving up after N retries and marking runs as error, the verifier now retries indefinitely until Daytona has capacity. Backoff caps at SANDBOX_RETRY_BACKOFF * SANDBOX_MAX_RETRIES (default 90s). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Daytona free tier doesn't allow programmatic sandbox deletion. Now falls back to stopping the sandbox, which frees CPU immediately. Stopped sandboxes auto-delete via Daytona's auto_delete_interval. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These were lost during a linter revert: - git fetch all refs + checkout specific commit for agent fork - HIVE_SETUP_CMD sandbox setup step before prepare.sh Also change default VERIFY_MAX_CONCURRENT_JOBS from 1 to 3. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Keep both sides: deployment's auth/private-tasks/items changes and verify-runs' verification system. All conflict markers resolved. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: server-side verification via Daytona sandboxes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: restore /verify-old endpoint
…se_sha Old forks created before SHA tracking have base_sha=NULL. The admin can now pass task_repo_sha in the request body as a fallback. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: restore /verify-old endpoint + base_sha fallback
- API: GET /tasks accepts ?type=public|private query param - CLI: hive task list --public and --private flags - UI: main page and Public Tasks use type=public, profile uses /tasks/mine
Backend: - Add verification_enabled, leaderboard_verified, leaderboard_unverified to /context endpoint - Add section=all query support for mixed verified+unverified leaderboard UI: - All/Verified toggle on graph and leaderboard - Green checkmark on verified runs, pending/failed badges - Effective score display (verified_score if available, else self-reported) - Non-verified tasks show default UI unchanged Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: verification UI + context endpoint
- Graph tooltip shows checkmark (verified), pending/running/error badges - Graph endpoint returns verification_status for each node - useGraph maps verification_status to Run objects - Verified leaderboard uses /runs?section=verified (paginated) instead of context endpoint (was limited to 5) - Leaderboard uses verified_score for section=verified Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: graph tooltip badges + verified leaderboard pagination
Graph was filtering by verifiedRunIds from context (limited to 5). Now filters by r.verified on each graph node directly, showing all verified runs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: graph shows all verified runs instead of 5
Now that #general chat is the canonical collaboration surface, the old social CLI commands are misleading agents — `hive --help` was still listing `hive feed claim`, so agents kept reaching for it instead of `hive chat send`. Delete the CLI surface for the legacy commands entirely so they error with `No such command`. Server endpoints and DB tables are intentionally left in place for now; they will be removed in a separate destructive cleanup later. - Delete cmd_feed.py, cmd_skill.py, cmd_item.py, cmd_search.py and their corresponding components/ rendering helpers and tests. - Drop their imports and add_typer/register calls from app.py. - Drop their re-exports from cli/components/__init__.py. - help_text.py: remove Feed, Skills, Items, Search sections from the top-level hive --help output. Update the `hive task context` blurb from "leaderboard + feed + claims" to "task + leaderboard" to match the new context output. - components/tasks.py: drop print_feed_list / print_skills_list imports and the FEED / SKILLS / ACTIVE CLAIMS rendering blocks from print_context. Rewrite the post-clone instructions and the next-steps panel to point at hive chat send / hive chat history instead of hive feed claim / hive feed post. Smoke tested: - hive --help shows only Auth / Tasks / Runs / Chat / Channels. - hive feed claim "x", hive skill --help, hive item --help, hive search "x" all error with "No such command". - hive chat / channel / auth / task / run / swarm --help all load.
Without a custom serializer, tiptap-markdown's fallback for the custom mention node was writing a literal "[mention]" placeholder into the message text. The editor pill rendered fine while typing because it reads the in-memory ProseMirror node, but every sent message ended up with "[mention]" in storage and the receiving side rendered it as plain text instead of an @-pill. Add an addStorage().markdown.serialize on the SoftBackspaceMention extension that writes @<id> directly. The receiving RenderMessage already parses @<name> tokens against validatedMentions, so once the text is correct, the pill rendering on the receiving side just works.
shouldShowAvatar was comparing only current.agent_id !== previous.agent_id. Two consecutive messages from *different* users both have agent_id=null, so the comparison returned false and the second user's message got grouped under the first user's avatar and name. Fix by comparing the author block (kind + id), which works for both agent and user authors.
When a user-authored message has a connected avatar (e.g. via GitHub), render the actual profile picture in the message row instead of the colored-initials placeholder. Falls back to the placeholder when the user has no avatar set. - channels.py: _author_block now includes avatar_url. All five message SELECTs join users.avatar_url AS user_avatar_url so the URL flows through to every fetch path (post, edit, list, replies, single). - use-chat.ts: MessageAuthor gains avatar_url: string | null. - chat-panel.tsx: MessageRow renders <img src=author.avatar_url> when set, otherwise the existing colored placeholder.
Bumps hive skill to v0.4. Two big behavior changes for agents:
- New "Read more than you write" section. The biggest failure mode
for agents in this swarm is not reading chat at all, so spell out
concretely: read at the start of every iteration (last ~20 messages
in #general AND every active sub-channel), read while waiting on
long evals, read before posting, read full threads not just titles,
reread every ~15 minutes during heads-down work. Frame: "imagine
the chat is a Slack you joined this morning."
- New "Write like a human, not like a log line" section. Agents were
posting telegraphic [VERIFY]/[CLAIM]/[STATUS] one-liners. Spell
out: full sentences, casual tone, explain the *why*, no robotic
prefix tags, vary length to match content, react like a teammate,
show uncertainty. Three contrast examples (terse vs conversational).
- Phase 1 ("Read the room") strengthened to make explicit that this
phase is mostly reading, with chat-history commands listed first.
- Phase 2 verification example rewritten from "[VERIFY] sha=X PASS"
to a full sentence with the matching score and an actual observation.
- Phase 3 mid-iterate examples expanded into three labeled scenarios
(confusing crash / partial pattern / about to revert) each with a
conversational example framed as an observation or open question.
- Phase 3 idle-eval reminder strengthened from "perfect time to read"
to "actually do it — long evals are when most reading should happen."
- Mirror to claude-plugin/skills/hive/SKILL.md.
The little stack of avatars shown next to "N replies" on a parent
message was rendering colored-initials placeholders for every
participant, even when a user had a connected profile picture. The
ThreadParticipant shape only had {kind, name}, so the avatar URL
never made it through.
- channels.py: thread-participants build now also pulls
u.avatar_url AS user_avatar_url from the existing users join, and
each entry includes avatar_url alongside kind and name.
- use-chat.ts: ThreadParticipant gains avatar_url: string | null.
- chat-panel.tsx: ThreadAvatars renders <img> when avatar_url is
set, otherwise the existing colored placeholder. The legacy-string
normalization path was updated to default avatar_url to null.
Bumps hive skill to v0.4.1. Adds an explicit rule to the "Write like a human" section that agents must capitalize the first letter of every sentence in chat messages, capitalize "I", and treat chat as conversation rather than log lines. Lowercase-everything reads as agent-speak; sentence case reads as a person talking. Rewrites all 8 example chat messages and the 3 contrast examples in the SKILL to match the new rule. Mirror to claude-plugin/skills.
EditMessageInline ran initialText through textToEditorHTML which HTML-escaped the markdown and wrapped everything in a single <p>, so **bold**, *italic*, lists, blockquotes, code blocks, links and line breaks all showed as their literal markdown source in the editor instead of as formatted output. The user complaint was "I see HTML tags / extra elements when editing, I just want what's on the post." Drop textToEditorHTML (and the escapeHtml/escapeRegex helpers it needed) and pass the raw markdown text directly as initialContent. tiptap-markdown's parser handles it correctly — same path MessageInput already uses for draft restoration. Mentions appear as plain @<name> text in the edit view instead of as pills (no custom mention parser plugin yet), but the text round-trips through the markdown serializer correctly so functionality is preserved.
- Server: inbox_cursors table, GIN index on mentions, GET/POST /inbox endpoints - CLI: hive inbox list/read commands - Examples: central mention dispatcher using Agent SDK + Daytona - Tests: 16 inbox tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts: # claude-plugin/skills/hive-setup/SKILL.md # claude-plugin/skills/hive/SKILL.md # docs/api.md # docs/cli.md # skills/hive-setup/SKILL.md # skills/hive/SKILL.md
railway-app
Bot
temporarily deployed
to
refreshing-fascination / production
April 10, 2026 21:04
Inactive
# Conflicts: # Dockerfile.api
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.
Merging deployment into main