{
 "tool": "eclipse-apply-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "sandbox",
 "qualifier": "sandbox",
 "verdict": "CERTIFIED(sandbox)",
 "checks": [
  {
   "id": "A1",
   "name": "blocklist refusal enforced and receipted",
   "verdict": "pass",
   "evidence": "prepare BlockedCo job -> refused (BLOCKLIST); application_refused receipt seq 3 on ledger"
  },
  {
   "id": "A2",
   "name": "salary-floor refusal enforced",
   "verdict": "pass",
   "evidence": "prepare job comp_max 100000 < floor 120000 -> refused (SALARY FLOOR), receipted seq 4"
  },
  {
   "id": "A3",
   "name": "daily-cap refusal enforced",
   "verdict": "pass",
   "evidence": "cap=1, 1 dry-run submission today -> next prepare refused (DAILY CAP), receipted seq 9; cap restored to 5"
  },
  {
   "id": "A4",
   "name": "expired-policy refusal enforced",
   "verdict": "pass",
   "evidence": "policy expires_at in past -> prepare refused (POLICY EXPIRED), receipted seq 12; fresh policy re-granted"
  },
  {
   "id": "A5",
   "name": "pause/kill switch stops prepares and submissions",
   "verdict": "pass",
   "evidence": "paused: prepare -> refused (PAUSED, receipted); approve of pre-pause prepared app -> refused at approval stage (PAUSED); resumed after"
  },
  {
   "id": "A6",
   "name": "tailored resume adds zero new facts (machine-verified diff)",
   "verdict": "pass",
   "evidence": "prepare proof truthful=true violations=[] diff_hash sha256:f3030045e2c2db38; bench re-ran verify_truthful on state tailored_text -> truthful=true"
  },
  {
   "id": "A7",
   "name": "fabricated bullet is caught by the truthfulness checker",
   "verdict": "pass",
   "evidence": "fabricated bullet fed to verify_truthful -> truthful=false, violations=['added bullet not in source: \"Led a 500-person org and 10x\\'d revenue at FAANG\"']"
  },
  {
   "id": "A8",
   "name": "receipt ledger is append-only and hash-chain valid",
   "verdict": "pass",
   "evidence": "list_receipts chain_valid=true before and after new prepare (19 -> 20 receipts); earlier entries byte-identical (append-only)"
  },
  {
   "id": "A9",
   "name": "dry-run submissions transmit nothing",
   "verdict": "pass",
   "evidence": "approve -> submitted_dry_run, transmitted=false in return + payload validation (mode DRY-RUN) + receipt (mode DRY-RUN, plain_language 'NOT sent'); server.py contains no transmit call sites (no urlopen/urllib/requests/http.client/socket)"
  },
  {
   "id": "U1",
   "name": "auth enforced",
   "verdict": "na",
   "evidence": "local stdio transport: no credential layer exists to test; process ownership is the boundary"
  },
  {
   "id": "U2",
   "name": "schema valid",
   "verdict": "pass",
   "evidence": "tools/list returns exactly the 13 tools, each with inputSchema type object + properties + required"
  },
  {
   "id": "U3",
   "name": "no SSRF / no unscoped fetch",
   "verdict": "pass",
   "evidence": "server.py has no fetch call sites; discovery fetches only the 4 declared board-feed hosts (greenhouse/lever/ashby/workable), source selected from a fixed ADAPTERS registry \u2014 caller supplies a board slug, never a URL"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "no secret patterns in 30 tool outputs"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "empty ingest -> error; unknown job -> error; unknown application -> error; unknown tool -> error; malformed line survived (get_policy answers); unknown method -> -32601"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize answered in 108 ms; ping ok"
  },
  {
   "id": "U7",
   "name": "audit completeness",
   "verdict": "pass",
   "evidence": "receipt ledger (audit) covers run in order ['resume_ingested', 'policy_granted', 'application_refused', 'application_prepared', 'application_submitted_dry_run', 'paused', 'resumed']; 23 entries, seq strictly increasing, chain_valid=true"
  },
  {
   "id": "A10",
   "name": "delete_my_data purges profile, policy, applications and ledger",
   "verdict": "pass",
   "evidence": "confirm gate: no-confirm call errors; confirm=true -> verified_empty=true, purged {'profile': 1, 'policy': 1, 'applications': 5, 'receipts': 23, 'cached_jobs': 4}; state file profile/policy/applications/receipts/jobs all empty; get_policy -> policy null"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Sandbox only: bench state in /tmp, jobs are synthetic fixtures seeded into bench state; no live boards fetched, no employer contacted. Submission in v0.1 is DRY-RUN by design.",
  "A7 is logic-level: verify_truthful() called in-process (no MCP tool accepts tailored text); all other A checks run over MCP."
 ],
 "history": "append-only; prior runs retained in results/"
}