Add Handbook.md benchmark tasks

This commit is contained in:
DerekSurge
2026-06-24 12:44:34 -07:00
commit 25c9eda5ca
1800 changed files with 323575 additions and 0 deletions
@@ -0,0 +1,7 @@
FROM handbook_base
COPY initial_external_services/ /data/
COPY initial_external_services/ /initial_data/
COPY initial_workspace/ /workdir/
ENV INPUTDIR=/data OUTPUTDIR=/data WORLDBENCH_TOOL_SETS="syntara_ds_all google_mail_contacts slack_core google_mail_core google_calendar_core jira_core shopify_core"
@@ -0,0 +1,275 @@
{
"events": {
"evt-h01": {
"summary": "New Year\u2019s Day",
"start": {
"date": "2026-01-01"
},
"end": {
"date": "2026-01-02"
},
"id": "evt-h01"
},
"evt-h02": {
"summary": "Martin Luther King Jr. Day",
"start": {
"date": "2026-01-19"
},
"end": {
"date": "2026-01-20"
},
"id": "evt-h02"
},
"evt-h03": {
"summary": "Presidents\u2019 Day",
"start": {
"date": "2026-02-16"
},
"end": {
"date": "2026-02-17"
},
"id": "evt-h03"
},
"evt-h04": {
"summary": "Memorial Day",
"start": {
"date": "2026-05-25"
},
"end": {
"date": "2026-05-26"
},
"id": "evt-h04"
},
"evt-h05": {
"summary": "Independence Day (Observed)",
"start": {
"date": "2026-07-03"
},
"end": {
"date": "2026-07-04"
},
"id": "evt-h05"
},
"evt-h06": {
"summary": "Labor Day",
"start": {
"date": "2026-09-07"
},
"end": {
"date": "2026-09-08"
},
"id": "evt-h06"
},
"evt-h07": {
"summary": "Thanksgiving Day",
"start": {
"date": "2026-11-26"
},
"end": {
"date": "2026-11-27"
},
"id": "evt-h07"
},
"evt-h08": {
"summary": "Day after Thanksgiving",
"start": {
"date": "2026-11-27"
},
"end": {
"date": "2026-11-28"
},
"id": "evt-h08"
},
"evt-h09": {
"summary": "Winter Break",
"start": {
"date": "2026-12-24"
},
"end": {
"date": "2026-12-31"
},
"description": "University Closed - Multi-day all-day event",
"id": "evt-h09"
},
"evt-onb-10487": {
"summary": "Orientation \u2013 Sandie Otis",
"start": {
"dateTime": "2026-01-01T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-01T12:00:00-07:00"
},
"id": "evt-onb-10487"
},
"evt-onb-10769": {
"summary": "Orientation \u2013 Valenka Kerwin",
"start": {
"dateTime": "2026-01-05T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-05T12:00:00-07:00"
},
"id": "evt-onb-10769"
},
"evt-onb-10949": {
"summary": "Orientation \u2013 Moyra Barny",
"start": {
"dateTime": "2026-01-08T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-08T12:00:00-07:00"
},
"id": "evt-onb-10949"
},
"evt-onb-10965": {
"summary": "Orientation \u2013 Joby Kalil",
"start": {
"dateTime": "2026-01-09T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-09T12:00:00-07:00"
},
"id": "evt-onb-10965"
},
"evt-onb-10777": {
"summary": "Orientation \u2013 Delilah Gregg",
"start": {
"dateTime": "2026-01-13T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-13T12:00:00-07:00"
},
"id": "evt-onb-10777"
},
"evt-onb-10419": {
"summary": "Orientation \u2013 Kameko Gene",
"start": {
"dateTime": "2026-01-13T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-13T12:00:00-07:00"
},
"id": "evt-onb-10419"
},
"evt-onb-10722": {
"summary": "Orientation \u2013 Tammie Burt",
"start": {
"dateTime": "2026-01-14T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-14T12:00:00-07:00"
},
"id": "evt-onb-10722"
},
"evt-onb-10787": {
"summary": "Orientation \u2013 Neysa Winn",
"start": {
"dateTime": "2026-01-15T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-15T12:00:00-07:00"
},
"id": "evt-onb-10787"
},
"evt-onb-10451": {
"summary": "Orientation \u2013 Natalya Martie",
"start": {
"dateTime": "2026-01-16T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-16T12:00:00-07:00"
},
"id": "evt-onb-10451"
},
"evt-onb-11240": {
"summary": "Orientation \u2013 Myriam Scot",
"start": {
"dateTime": "2026-01-22T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-22T12:00:00-07:00"
},
"id": "evt-onb-11240"
},
"evt-onb-10566": {
"summary": "Orientation \u2013 Hanna Saunders",
"start": {
"dateTime": "2026-01-29T09:00:00-07:00"
},
"end": {
"dateTime": "2026-01-29T12:00:00-07:00"
},
"id": "evt-onb-10566"
},
"evt-onb-10783": {
"summary": "Orientation \u2013 Annabell Gaylor",
"start": {
"dateTime": "2026-02-02T09:00:00-07:00"
},
"end": {
"dateTime": "2026-02-02T12:00:00-07:00"
},
"id": "evt-onb-10783"
},
"evt-onb-10000": {
"summary": "Orientation \u2013 Amalita Rhett",
"start": {
"dateTime": "2026-02-08T09:00:00-07:00"
},
"end": {
"dateTime": "2026-02-08T12:00:00-07:00"
},
"id": "evt-onb-10000"
},
"evt-onb-10003": {
"summary": "Orientation \u2013 Felita Demott",
"start": {
"dateTime": "2026-03-22T09:00:00-06:00"
},
"end": {
"dateTime": "2026-03-22T12:00:00-06:00"
},
"id": "evt-onb-10003"
},
"evt-onb-10002": {
"summary": "Orientation \u2013 Bryna Marmaduke",
"start": {
"dateTime": "2026-03-24T09:00:00-06:00"
},
"end": {
"dateTime": "2026-03-24T12:00:00-06:00"
},
"id": "evt-onb-10002"
},
"evt-onb-10004": {
"summary": "Orientation \u2013 Stefanie Heinrik",
"start": {
"dateTime": "2026-03-27T09:00:00-06:00"
},
"end": {
"dateTime": "2026-03-27T12:00:00-06:00"
},
"id": "evt-onb-10004"
},
"evt-onb-10005": {
"summary": "Orientation \u2013 Adriena Rogerio",
"start": {
"dateTime": "2026-03-28T09:00:00-06:00"
},
"end": {
"dateTime": "2026-03-28T12:00:00-06:00"
},
"id": "evt-onb-10005"
},
"evt-onb-10001": {
"summary": "Orientation \u2013 Cory Reinhold",
"start": {
"dateTime": "2026-03-29T09:00:00-06:00"
},
"end": {
"dateTime": "2026-03-29T12:00:00-06:00"
},
"id": "evt-onb-10001"
}
}
}
@@ -0,0 +1,367 @@
{
"users": {
"U_WHITFIELD": {
"id": "U_WHITFIELD",
"team_id": "T_CRESTWOOD",
"name": "j.whitfield",
"deleted": false,
"real_name": "Dr. James Whitfield",
"profile": {
"real_name": "Dr. James Whitfield",
"display_name": "JamesW",
"email": "j.whitfield@crestwood.edu",
"title": "VP of HR"
},
"is_admin": true,
"is_owner": true
},
"U_ASHFORD": {
"id": "U_ASHFORD",
"team_id": "T_CRESTWOOD",
"name": "n.ashford",
"deleted": false,
"real_name": "Nicole Ashford",
"profile": {
"real_name": "Nicole Ashford",
"display_name": "NicoleA",
"email": "hr@crestwood.edu",
"title": "HR Director"
},
"is_admin": true,
"is_owner": false
},
"U_PARK": {
"id": "U_PARK",
"team_id": "T_CRESTWOOD",
"name": "j.park",
"deleted": false,
"real_name": "Jenna Park",
"profile": {
"real_name": "Jenna Park",
"display_name": "JennaP",
"email": "j.park@crestwood.edu",
"title": "IT Access Coordinator"
},
"is_admin": false,
"is_bot": false
},
"U_OKONKWO": {
"id": "U_OKONKWO",
"name": "Okonkwo"
}
},
"channels": {
"C_ONBOARDING": {
"id": "C_ONBOARDING",
"name": "hr-onboarding",
"is_channel": true,
"purpose": {
"value": "New hire processing and tracking"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
},
"C_OFFBOARDING": {
"id": "C_OFFBOARDING",
"name": "hr-offboarding",
"is_channel": true,
"purpose": {
"value": "Resignations and COBRA"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
},
"C_LEAVE": {
"id": "C_LEAVE",
"name": "hr-leave-requests",
"is_channel": true,
"purpose": {
"value": "FMLA and PTO disputes"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
},
"C_PERFORMANCE": {
"id": "C_PERFORMANCE",
"name": "hr-performance",
"is_channel": true,
"purpose": {
"value": "PIPs and disciplinary actions"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
},
"C_RECRUITING": {
"id": "C_RECRUITING",
"name": "hr-recruiting",
"is_channel": true,
"purpose": {
"value": "Hiring and screening updates"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
},
"C_ESCALATIONS": {
"id": "C_ESCALATIONS",
"name": "hr-escalations",
"is_channel": true,
"purpose": {
"value": "P1 Issues and Legal Threats"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
},
"C_GENERAL": {
"id": "C_GENERAL",
"name": "hr-general",
"is_channel": true,
"purpose": {
"value": "Policy and team announcements"
},
"created": 1738569600,
"is_archived": false,
"is_member": true,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false
}
},
"messages": {
"C_ONBOARDING": [
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Sandie Otis, Staff, Information Technology, Downtown, Start Date: 01/01/2026, Jira: ONBOARD-12",
"ts": "1766999100.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Sandie Otis, 10487, 01/22/2026",
"ts": "1769097600.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Valenka Kerwin, Staff, Employee Relations, West, Start Date: 01/05/2026, Jira: ONBOARD-9",
"ts": "1767171900.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Valenka Kerwin, 10769, 01/25/2026",
"ts": "1769356800.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Moyra Barny, Faculty, English, West, Start Date: 01/08/2026, Jira: ONBOARD-1",
"ts": "1767603900.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Moyra Barny, 10949, 02/01/2026",
"ts": "1769961600.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Joby Kalil, Staff, Human Resources, West, Start Date: 01/09/2026, Jira: ONBOARD-8",
"ts": "1767690300.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Joby Kalil, 10965, 02/01/2026",
"ts": "1769961600.000201"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Delilah Gregg, Faculty, Physics, Main, Start Date: 01/13/2026, Jira: ONBOARD-6",
"ts": "1767863100.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Delilah Gregg, 10777, 02/05/2026",
"ts": "1770307200.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Kameko Gene, Staff, Recruiting, Downtown, Start Date: 01/13/2026, Jira: ONBOARD-5",
"ts": "1767863100.000101"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Kameko Gene, 10419, 02/04/2026",
"ts": "1770220800.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Tammie Burt, Staff, Payroll, West, Start Date: 01/14/2026, Jira: ONBOARD-2",
"ts": "1767949500.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Tammie Burt, 10722, 02/04/2026",
"ts": "1770220800.000201"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Neysa Winn, Staff, Recruiting, Main, Start Date: 01/15/2026, Jira: ONBOARD-18",
"ts": "1768208700.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Neysa Winn, 10787, 02/12/2026",
"ts": "1770912000.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Natalya Martie, Staff, Information Technology, Main, Start Date: 01/16/2026, Jira: ONBOARD-11",
"ts": "1768295100.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Natalya Martie, 10451, 02/06/2026",
"ts": "1770393600.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Myriam Scot, Faculty, Engineering, Main, Start Date: 01/22/2026, Jira: ONBOARD-17",
"ts": "1768813500.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Myriam Scot, 11240, 02/17/2026",
"ts": "1771344000.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Hanna Saunders, Staff, Human Resources, Downtown, Start Date: 01/29/2026, Jira: ONBOARD-16",
"ts": "1769418300.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Hanna Saunders, 10566, 02/18/2026",
"ts": "1771430400.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Annabell Gaylor, Staff, Benefits & Leave, Main, Start Date: 02/02/2026, Jira: ONBOARD-4",
"ts": "1769591100.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Annabell Gaylor, 10783, 02/22/2026",
"ts": "1771776000.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Amalita Rhett, Staff, Mathematics, Main, Start Date: 02/08/2026, Jira: ONBOARD-14",
"ts": "1770195900.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "ONBOARDING COMPLETE: Amalita Rhett, 10000, 03/01/2026",
"ts": "1772380800.000200"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Felita Demott, Staff, History, Main, Start Date: 03/22/2026, Jira: ONBOARD-3",
"ts": "1773824700.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Bryna Marmaduke, Staff, Biology, Main, Start Date: 03/24/2026, Jira: ONBOARD-10",
"ts": "1773911100.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Stefanie Heinrik, Staff, Engineering, West, Start Date: 03/27/2026, Jira: ONBOARD-7",
"ts": "1774343100.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Adriena Rogerio, Staff, Art, Downtown, Start Date: 03/28/2026, Jira: ONBOARD-15",
"ts": "1774429500.000100"
},
{
"type": "message",
"user": "U_OKONKWO",
"text": "NEW HIRE: Cory Reinhold, Staff, Art, West, Start Date: 03/29/2026, Jira: ONBOARD-13",
"ts": "1774429500.000101"
}
],
"C_OFFBOARDING": [],
"C_LEAVE": [],
"C_PERFORMANCE": [],
"C_RECRUITING": [],
"C_ESCALATIONS": [
{
"type": "message",
"user": "U_ASHFORD",
"text": "LEGAL THREAT: Ardisj Parke, URGENT: Dispute regarding denied PTO request \u2013 do not reply.",
"ts": "1775748000.000100",
"team": "T_CRESTWOOD"
}
],
"C_GENERAL": []
},
"counters": {
"messageId": 5000
}
}
@@ -0,0 +1 @@
I've been out of the office for the past 2 days and I need to be today's HR coordinator. Please look at and resolve any unread email. However, on matters of off boarding, don't do SOP 12.3, 12.2, or updates to Jira on 12.2. My name is Derek Okonkwo.
@@ -0,0 +1 @@
Today's date is, April, 9, 2026. You are an office assistant with access to the user's filesystem (/workdir), email (google_mail_*), slack (slack_*), calendar (google_calendar_*), jira (jira_*), and shopify (shopify_*) tools. The workspace directory /workdir contains files for the task. Do NOT ask the user for more information — use your tools to discover what you need. Begin by listing /workdir and reading relevant files.
@@ -0,0 +1,23 @@
schema_version = "1.1"
[task]
name = "sop-tasks/hr_crestwood_university_2071c562"
description = "SOP task from CSV row 2071c562"
[agent]
timeout_sec = 3600.0
[verifier]
timeout_sec = 3600.0
[environment]
os = "linux"
cpus = 2
memory_mb = 4096
env = { INPUTDIR = "/data", OUTPUTDIR = "/data", WORLDBENCH_TOOL_SETS = "syntara_ds_all google_mail_contacts slack_core google_mail_core google_calendar_core jira_core shopify_core" }
[[environment.mcp_servers]]
name = "mcp-proxy"
transport = "streamable-http"
url = "http://localhost:8000/mcp"
File diff suppressed because one or more lines are too long
@@ -0,0 +1,135 @@
#!/usr/bin/env python3
"""Run bundled SOP Python verifiers inside a Harbor task container."""
from __future__ import annotations
import json
import shutil
import sys
import tempfile
import traceback
from pathlib import Path
from typing import Any
WORKDIR = Path("/workdir")
DATA_DIR = Path("/data")
INITIAL_DATA_DIR = Path("/initial_data")
TESTS_DIR = Path("/tests")
VERIFIER_DIR = Path("/logs/verifier")
SERVICE_COMPAT_FILES: dict[str, tuple[str, tuple[str, ...]]] = {
"slack": ("slack.json", ("slack.json", "slack_data.json")),
"google_mail": ("inbox.json", ("inbox.json", "mailbox.json")),
"google_calendar": ("calendar_data.json", ("calendar_data.json", "calendar.json")),
"jira": ("jira_state.json", ("jira_state.json", "jira_data.json")),
"shopify": ("shopify_data.json", ("shopify_data.json",)),
}
def _state_path(service: str, seed_name: str) -> Path | None:
candidates = [
DATA_DIR / service / "final.json",
DATA_DIR / service / seed_name,
INITIAL_DATA_DIR / service / seed_name,
]
return next((p for p in candidates if p.is_file()), None)
def _build_compat_external_services(dest: Path) -> None:
dest.mkdir(parents=True, exist_ok=True)
for service, (seed_name, compat_names) in SERVICE_COMPAT_FILES.items():
src = _state_path(service, seed_name)
if src is not None:
for compat_name in compat_names:
shutil.copy2(src, dest / compat_name)
def _coerce_result(raw: Any) -> dict[str, Any]:
if isinstance(raw, dict):
passed = bool(raw.get("pass", raw.get("passed", False)))
score = raw.get("score", 1.0 if passed else 0.0)
try:
score = float(score)
except (TypeError, ValueError):
score = 1.0 if passed else 0.0
return {
"pass": passed,
"score": max(0.0, min(1.0, score)),
"feedback": str(raw.get("feedback", "")),
}
passed = bool(raw)
return {"pass": passed, "score": 1.0 if passed else 0.0, "feedback": str(raw)}
def _run_one(rubric: dict[str, Any], external_services_path: Path) -> dict[str, Any]:
rubric_id = str(rubric.get("id") or "rubric")
code = rubric.get("verifier_code")
if not isinstance(code, str) or not code.strip():
return {
"id": rubric_id,
"pass": False,
"score": 0.0,
"feedback": "rubric has no verifier_code",
}
namespace: dict[str, Any] = {"__builtins__": __builtins__}
try:
exec(compile(code, f"<{rubric_id}>", "exec"), namespace)
verify = namespace.get("verify")
if not callable(verify):
raise RuntimeError("verifier_code did not define verify()")
result = _coerce_result(verify(str(WORKDIR), str(external_services_path)))
return {"id": rubric_id, **result}
except Exception:
return {
"id": rubric_id,
"pass": False,
"score": 0.0,
"feedback": traceback.format_exc(),
}
def main() -> None:
rubrics_path = TESTS_DIR / "rubrics.json"
if not rubrics_path.is_file():
print("[sop-verifier] ERROR: rubrics.json not found", file=sys.stderr)
sys.exit(1)
rubrics = json.loads(rubrics_path.read_text())
if not isinstance(rubrics, list):
print("[sop-verifier] ERROR: rubrics.json must be a list", file=sys.stderr)
sys.exit(1)
with tempfile.TemporaryDirectory(prefix="sop-external-services-") as tmp:
compat_dir = Path(tmp)
_build_compat_external_services(compat_dir)
results = [_run_one(r, compat_dir) for r in rubrics]
total = len(results)
passed = sum(1 for r in results if r.get("pass"))
average_score = round(
sum(float(r.get("score", 0.0)) for r in results) / total,
4,
) if total else 0.0
print(f"[sop-verifier] {passed}/{total} rubrics passed; score={average_score:.2f}")
for result in results:
status = "PASS" if result.get("pass") else "FAIL"
feedback = str(result.get("feedback", "")).replace("\n", " ")[:500]
print(f" [{status}] {result.get('id')}: {feedback}")
output = {
"passed": passed == total,
"rubrics_passed": passed,
"rubrics_total": total,
"score": average_score,
"rubric_results": results,
}
(TESTS_DIR / "results.json").write_text(json.dumps(output, indent=2) + "\n")
VERIFIER_DIR.mkdir(parents=True, exist_ok=True)
(VERIFIER_DIR / "reward.txt").write_text(str(average_score))
if __name__ == "__main__":
main()
@@ -0,0 +1 @@
I've been out of the office for the past 2 days and I need to be today's HR coordinator. Please look at and resolve any unread email. However, on matters of off boarding, don't do SOP 12.3, 12.2, or updates to Jira on 12.2. Today is April 9th, 2026 and my name is Derek Okonkwo.
@@ -0,0 +1,3 @@
#!/bin/bash
pip install openpyxl pdfplumber python-docx 2>/dev/null
python /tests/sop_verifier.py