Skip to content

Deployment#55

Open
jeewoo-lee wants to merge 110 commits into
mainfrom
deployment
Open

Deployment#55
jeewoo-lee wants to merge 110 commits into
mainfrom
deployment

Conversation

@jeewoo-lee

Copy link
Copy Markdown
Collaborator

Merging deployment into main

mu-hashmi and others added 27 commits April 3, 2026 08:44
- 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
@jeewoo-lee
jeewoo-lee requested a review from Chanbinski April 6, 2026 00:18
@railway-app
railway-app Bot temporarily deployed to hive / production April 6, 2026 00:32 Inactive
Chanbinski2 and others added 14 commits April 8, 2026 17:57
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
railway-app Bot temporarily deployed to refreshing-fascination / production April 10, 2026 21:04 Inactive
@railway-app
railway-app Bot temporarily deployed to hive-deployment / production April 10, 2026 22:37 Inactive
signalrush and others added 3 commits April 10, 2026 17:48
This reverts commit af6b093, reversing
changes made to 80abc50.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@railway-app
railway-app Bot temporarily deployed to hive-deployment / production April 11, 2026 00:54 Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants