core/demos/claude_hybrid_verification/scenarios.jsonl
Shay 57a0e38f0b feat(demo): add Claude-to-CORE hybrid verification demo
A narrow, auditable proof path for the hybrid-mode boundary: a
Claude/Fable-style System 1 proposer submits an MCP-shaped tool call
(core.semantic_derivation.verify); CORE re-derives via the ADR-0184
derivation lane, keeps sole acceptance authority, refuses or asks when
it cannot honestly answer, and emits a deterministic replay/provenance
trace for every decision.

Boundary properties (each pinned by a failing-if-removed test):
- the proposer has no commit path: additionalProperties:false schema,
  and the demo modules import nothing from generate.* (AST-scanned with
  a planted-bypass self-test) — the lane is consumed only through the
  ADR-0184 S4b audited trace facade;
- 'verified' requires pool commit AND clean commit-law/faithfulness
  audits AND a gold-audited envelope.json entry AND byte-match to the
  pinned derivation trace (measured: 118 of the off-serving pool's 231
  corpus commits disagree with lane gold, so a bare pool commit is
  never served — scenario s4 shows the refusal on a commit that even
  matches gold);
- the ask leg is the real Q1 stack (router -> limitation -> Q1-D
  producer -> carried handle -> gated serving), dark by default,
  tamper-fail-closed on the content hash;
- authority_path names only consulted authorities; responses are
  deterministic (double-run byte-identical) and pinned under expected/.

No serving/runtime change; no CLAIMS/metrics/telemetry/lane-pin
movement; no network or Anthropic API dependency (System 1 payloads are
clearly-labeled static fixtures).
2026-06-10 20:41:50 -07:00

5 lines
4.2 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"scenario_id": "s1-verified-grounded-chain", "title": "Verified: grounded accumulation chain inside the audited envelope", "system1": {"framing": "Claude/Fable-style System 1 proposal — static fixture payload; no model API was called and no network is used", "tool_call": {"name": "core.semantic_derivation.verify", "arguments": {"problem_text": "Sara has 32 dollars. Sara earns 15 dollars. She uses 21 dollars. How many dollars does Sara have left?", "domain_hint": "gsm8k_math", "request_id": "demo-s1", "return_trace": true}}}, "expected_status": "verified", "note": "Pool commits 26 dollars (gain+loss chain, every gate passes); the demo envelope authorizes it (gold-audited: evals/gsm8k_math/public/v1 case gma-141, expected 26)."}
{"scenario_id": "s2-refused-disagreement", "title": "Refused: two self-verifying readings disagree, so CORE will not guess", "system1": {"framing": "Claude/Fable-style System 1 proposal — static fixture payload; no model API was called and no network is used", "tool_call": {"name": "core.semantic_derivation.verify", "arguments": {"problem_text": "Toms cat is 8 years old. His rabbit is half the age of his cat. His dog is three times as old as his rabbit. How old is the dog?", "domain_hint": "gsm8k_math", "request_id": "demo-s2", "return_trace": true}}}, "expected_status": "refused", "note": "Two complete readings derive 24 and 36; both are wrong (gold 12, holdout case gsm8k-holdout-dev-v1-0005). The disagreement rule refuses BOTH — exactly the wrong=0 behavior the demo exists to show."}
{"scenario_id": "s3-ask-missing-total", "title": "Ask: CORE asks for the missing datum instead of inventing it", "system1": {"framing": "Claude/Fable-style System 1 proposal — static fixture payload; no model API was called and no network is used", "tool_call": {"name": "core.semantic_derivation.verify", "arguments": {"problem_text": "Each large bus holds 50 students and each small bus holds 30 students. The buses carry 260 students in total. How many large buses are there?", "domain_hint": "gsm8k_math", "request_id": "demo-s3", "return_trace": true}}}, "expected_status": "ask", "note": "The pool refuses (an additive mis-read of 340 is blocked by a disagreeing rival reading); the R2 constraint organ identifies the missing total bus count (missing_total_count, evals/constraint_oracle/r2_gold.jsonl case r2-011-missing-total-count); the Q1 stack renders and serves a grounded question through the carried-handle seam."}
{"scenario_id": "s4-refused-outside-envelope", "title": "Refused: a pool commit outside the audited envelope is not served", "system1": {"framing": "Claude/Fable-style System 1 proposal — static fixture payload; no model API was called and no network is used", "tool_call": {"name": "core.semantic_derivation.verify", "arguments": {"problem_text": "Jack has 17 toy cars. His dad buys him 8 more. How many toy cars does Jack have?", "domain_hint": "gsm8k_math", "request_id": "demo-s4", "return_trace": true}}}, "expected_status": "refused", "note": "The pool commits 25 (which happens to match gold: evals/gsm8k_math/practice/v1 case gsm8k-practice-v1-0022, answer 25), but this problem is deliberately NOT in the demo envelope — the demo still refuses, because the off-serving derivation lane is not a wrong=0 oracle over arbitrary text and an unaudited commit must not be served as verified. No false epistemic status."}
{"scenario_id": "s5-invalid-answer-smuggling", "title": "Invalid: the proposer tries to smuggle an answer through the payload", "system1": {"framing": "Claude/Fable-style System 1 proposal — static fixture payload (deliberately malformed); no model API was called and no network is used", "tool_call": {"name": "core.semantic_derivation.verify", "arguments": {"problem_text": "Each large bus holds 50 students and each small bus holds 30 students. The buses carry 260 students in total. How many large buses are there?", "proposed_answer": 340, "confidence": "high", "request_id": "demo-s5"}}}, "expected_status": "invalid", "note": "additionalProperties is false: there is no field through which the proposer can assert an answer, a derivation, or an acceptance decision. The payload is rejected at the typed boundary and no derivation is executed."}