{
 "tool": "eclipse-social-core-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "local",
 "qualifier": "local",
 "verdict": "CERTIFIED(local)",
 "checks": [
  {
   "id": "S1",
   "name": "approval invalidated by copy revision",
   "verdict": "pass",
   "evidence": "a variant approved for the Zephyr surface and confirmed valid is revised in its copy_text through the front door: variant_revise reports approval_invalidated=true (the approval was bound to the previous hash) and approval_check now finds no valid approval \u2014 the variant is back in review"
  },
  {
   "id": "S2",
   "name": "approval invalidated by schedule + destination revision",
   "verdict": "pass",
   "evidence": "the hash law binds more than copy: a schedule-only revision on the Prism variant and a destination-only revision on the Wire variant each report approval_invalidated=true \u2014 schedule and destination are hashed fields (SS3.1), so moving either after approval returns the variant to review"
  },
  {
   "id": "S3",
   "name": "direct field tamper caught by approval_check",
   "verdict": "pass",
   "evidence": "the bench rewrites the variant's copy_text directly in its own state file \u2014 no tool involved, the recorded approval untouched: approval_check recomputes the hash from current fields, finds approved_hash != current_hash, and reports the approval invalid ('changed after approval') \u2014 the check is a recomputation, not a stored flag"
  },
  {
   "id": "S4",
   "name": "substantive diff: dropped number flagged, never silent",
   "verdict": "pass",
   "evidence": "the bench canonical places $999.9M past Zephyr's 300-char limit: the variant truncates (copy fits the limit, the number is gone from it) and adaptation_diff flags exactly one substantive TEXT_REWRITE whose note names the dropped figure \u2014 a number may not change silently (SS3.2); control: the sample's Reel variant (2200-char limit, copy intact) carries no substantive text diff"
  },
  {
   "id": "S5",
   "name": "engagement caps: daily, per-target, duplicate",
   "verdict": "pass",
   "evidence": "the playbook as data, week-1 caps: the 16th like (15 already today) DENYs at the daily cap while the 15th ALLOWs; 2 likes on one target DENYs per-target; the 6th comment DENYs at the comment cap; a fresh comment ALLOWs and reserves its text \u2014 the identical text again DENYs as duplicate; a comment carrying a link DENYs outright. Every check receipted, denials included"
  },
  {
   "id": "S6",
   "name": "action-block STOP is final until owner reset",
   "verdict": "pass",
   "evidence": "an action_block signal returns STOP and the stop is final: a subsequent like check at zero counts still returns STOP, a reset without owner_reset=true DENYs, only the owner's reset clears it (next like check ALLOWs) \u2014 the product does not retry through another identity, endpoint, or session (SS5.3)"
  },
  {
   "id": "S7",
   "name": "failed probe downgrades modes (SS3.2)",
   "verdict": "pass",
   "evidence": "an account registered with a FAILED capability probe has its effective modes downgraded exactly per SS3.2 \u2014 PUBLISH_API collapses to PREP_PACK, OWN_ENGAGEMENT_API to COMMUNITY_PREP, READ_API stays readable \u2014 account_inventory reports the same downgraded matrix; a downgrade never triggers a workaround"
  },
  {
   "id": "S8",
   "name": "receipt chain valid; tamper detected",
   "verdict": "pass",
   "evidence": "receipt_list reports chain_valid over 28 receipts; the product verifier confirms it, and a deep copy with one altered verdict detail verifies false"
  },
  {
   "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 15 S0 core tools, each with inputSchema type object + properties + required"
  },
  {
   "id": "U3",
   "name": "no network surface (governance-only core)",
   "verdict": "pass",
   "evidence": "server.py contains no network call sites \u2014 no urllib/socket/requests/http.client: the governance-only claim (this core performs no platform action) is structural, not configured"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "no secret patterns in 38 tool outputs"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "content whose claim carries no source is refused with the blocker named (claims travel with their evidence); unknown canonical/variant -> errors; malformed line survived (receipt_list answers); unknown method -> -32601"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize answered in 65 ms; ping ok"
  },
  {
   "id": "U7",
   "name": "audit completeness",
   "verdict": "pass",
   "evidence": "ledger covers the run (['content_ingest', 'adapt_preview', 'variant_approved', 'variant_revise', 'policy_check', 'account_set'] present) across 28 receipts; policy_check receipts record ALLOW, DENY and STOP alike (denials are audited, not just successes); an approval-invalidation is on the record; seq strictly increasing, chain valid"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Local governance scope: the S0 core performs no platform action by design (no posting, liking, or network call exists in the product); the bench verifies the governance claims \u2014 hash-bound approvals, classified diffs, mode downgrades, playbook caps \u2014 over MCP against bench state.",
  "Live adapter execution is out of scope here by design: adapters (Aperture, Zephyr) carry their own benches. The unified analytics envelope (spec SS6) is specified, not built in S0 v0.1."
 ],
 "history": "append-only; prior runs retained in results/"
}