{
  "id": "ptichi.work_explanation_recovery_benchmark",
  "version": "1.0",
  "evidence_class": "synthetic_benchmark",
  "dataset": "ptichi.work_explanation_recovery_fixtures@1.0",
  "rubric": "ptichi.listener_recoverability_rubric@1.0",
  "title": "Ptichi Work Explanation Recovery Benchmark v1",
  "purpose": "Test whether deterministic text transformations repair a declared structural failure while preserving required workplace-message anchors and avoiding explicitly forbidden claim patterns.",
  "claim_boundary": "This benchmark uses authored synthetic text and deterministic lexical/ordering checks. It does not measure listener comprehension, clarity, learning, transfer, preference or Ptichi product efficacy.",
  "comparison_rule": "Always name the benchmark, dataset and rubric versions. Do not compare results across benchmark versions as if the case contracts were identical.",
  "baselines": [
    {
      "id": "identity",
      "description": "Return Take A unchanged. This is a preservation baseline, not a repair strategy."
    },
    {
      "id": "first_sentence_only",
      "description": "Return only the first sentence of Take A. This intentionally naive compression baseline tests whether brevity discards required anchors."
    },
    {
      "id": "authored_reference_take_b",
      "description": "Return the project-authored Take B from the fixture. This is a harness/reference check, not a model and not evidence of human benefit."
    }
  ],
  "metrics": [
    {
      "id": "target_repair_rate",
      "direction": "higher_is_better_within_version",
      "meaning": "Share of locked cases whose declared target-repair checks pass."
    },
    {
      "id": "required_anchor_preservation_rate",
      "direction": "higher_is_better_within_version",
      "meaning": "Share of locked cases where every required anchor witness group remains present."
    },
    {
      "id": "forbidden_claim_rate",
      "direction": "lower_is_better_within_version",
      "meaning": "Share of locked cases where at least one explicitly forbidden claim pattern is present."
    },
    {
      "id": "all_structural_checks_pass_rate",
      "direction": "higher_is_better_within_version",
      "meaning": "Share of locked cases passing target repair, anchor preservation and forbidden-claim checks together."
    }
  ],
  "check_types": {
    "contains_all": "All normalized phrases must occur in the candidate text.",
    "not_contains_any": "None of the normalized phrases may occur in the candidate text.",
    "before": "The first phrase must occur before the second phrase in the candidate text."
  },
  "cases": [
    {
      "fixture_id": "status-01",
      "job": "project_status_update",
      "failure_mode": "chronology_before_status",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["release is still on track for friday"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["final security check"]
          }
        },
        {
          "anchor": "action",
          "check": {
            "type": "contains_all",
            "phrases": ["operations will confirm it thursday afternoon"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "before",
          "first": "release is still on track for friday",
          "second": "we met with qa"
        }
      ],
      "forbidden_checks": [],
      "notes": "Order check only: the benchmark does not claim that earlier placement improves a real listener's comprehension."
    },
    {
      "fixture_id": "status-02",
      "job": "project_status_update",
      "failure_mode": "condition_removed_from_date",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["release on tuesday"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["integration test", "monday morning"]
          }
        },
        {
          "anchor": "uncertainty_update",
          "check": {
            "type": "contains_all",
            "phrases": ["confirm the result by noon"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": ["release on tuesday if", "integration test passes"]
        }
      ],
      "forbidden_checks": [
        {
          "type": "not_contains_any",
          "phrases": ["we will release on tuesday."]
        }
      ],
      "notes": "Checks whether the date is explicitly conditional rather than asserted as unconditional."
    },
    {
      "fixture_id": "technical-01",
      "job": "technical_explanation",
      "failure_mode": "jargon_before_consequence",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": [
              "temporary downstream failure",
              "no longer block the user request"
            ]
          }
        },
        {
          "anchor": "support",
          "check": {
            "type": "contains_all",
            "phrases": ["asynchronous event processing", "retry queue"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["updates may arrive later"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "before",
          "first": "temporary downstream failure",
          "second": "asynchronous event processing"
        }
      ],
      "forbidden_checks": [],
      "notes": "Tests ordering of consequence and mechanism, not whether the wording is understandable to a real audience."
    },
    {
      "fixture_id": "technical-05",
      "job": "technical_explanation",
      "failure_mode": "oversimplification_changes_truth",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["duplicate orders"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["same customer reference", "within 24 hours"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": ["same customer reference", "within 24 hours"]
        }
      ],
      "forbidden_checks": [
        {
          "type": "not_contains_any",
          "phrases": ["prevents duplicate orders."]
        }
      ],
      "notes": "The scoped rule is treated as fixture truth; the benchmark does not establish real system behavior."
    },
    {
      "fixture_id": "risk-01",
      "job": "risk_or_delay_explanation",
      "failure_mode": "risk_without_trigger",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["risk to the friday release"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["overnight volume test", "processing limit"]
          }
        },
        {
          "anchor": "uncertainty_update",
          "check": {
            "type": "contains_all",
            "phrases": ["testing tomorrow"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": ["if the overnight volume test", "processing limit"]
        }
      ],
      "forbidden_checks": [],
      "notes": "Checks that the synthetic risk trigger is present."
    },
    {
      "fixture_id": "risk-03",
      "job": "risk_or_delay_explanation",
      "failure_mode": "false_certainty",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["migration", "wednesday"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["remaining dependency", "passes testing"]
          }
        },
        {
          "anchor": "uncertainty_update",
          "check": {
            "type": "contains_all",
            "phrases": ["we will know", "tuesday afternoon"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": [
            "if the remaining dependency passes testing",
            "we will know by tuesday afternoon"
          ]
        }
      ],
      "forbidden_checks": [
        {
          "type": "not_contains_any",
          "phrases": ["the migration will finish by wednesday."]
        }
      ],
      "notes": "Separates the synthetic condition/update point from an unconditional promise."
    },
    {
      "fixture_id": "recommendation-01",
      "job": "recommendation",
      "failure_mode": "recommendation_without_reason",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["recommend option b"]
          }
        },
        {
          "anchor": "support",
          "check": {
            "type": "contains_all",
            "phrases": ["support process unchanged"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": [
            "recommend option b",
            "because",
            "support process unchanged"
          ]
        }
      ],
      "forbidden_checks": [],
      "notes": "Checks presence of the authored decision reason without asserting that the recommendation is objectively better."
    },
    {
      "fixture_id": "recommendation-03",
      "job": "recommendation",
      "failure_mode": "alternatives_without_decision",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["recommend option a"]
          }
        },
        {
          "anchor": "support",
          "check": {
            "type": "contains_all",
            "phrases": ["option a is simpler to operate"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "before",
          "first": "recommend option a",
          "second": "option a is simpler to operate"
        }
      ],
      "forbidden_checks": [],
      "notes": "Checks that the authored recommendation appears before the unchanged option comparison; this is a lexical/order check, not evidence that option A is objectively better."
    },
    {
      "fixture_id": "difficult-01",
      "job": "difficult_question",
      "failure_mode": "invented_certainty_when_unknown",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["do not know yet"]
          }
        },
        {
          "anchor": "uncertainty_update",
          "check": {
            "type": "contains_all",
            "phrases": ["checking the deployment logs", "update you by 15:00"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": ["do not know yet", "update you by 15:00"]
        }
      ],
      "forbidden_checks": [
        {
          "type": "not_contains_any",
          "phrases": ["yes, the defect is caused by the new release"]
        }
      ],
      "notes": "Checks that unsupported synthetic certainty is removed and an update point is added."
    },
    {
      "fixture_id": "difficult-03",
      "job": "difficult_question",
      "failure_mode": "answer_after_context",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["no, we cannot switch this week"]
          }
        },
        {
          "anchor": "support",
          "check": {
            "type": "contains_all",
            "phrases": [
              "vendor changed the interface",
              "testing team raised another concern"
            ]
          }
        }
      ],
      "target_checks": [
        {
          "type": "before",
          "first": "no, we cannot switch this week",
          "second": "we discussed three options last month"
        }
      ],
      "forbidden_checks": [],
      "notes": "Order check for direct answer versus supporting history."
    },
    {
      "fixture_id": "concise-02",
      "job": "concise_meeting_explanation",
      "failure_mode": "stacked_qualifiers_hide_point",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["should move the cutover"]
          }
        },
        {
          "anchor": "meaning_boundary",
          "check": {
            "type": "contains_all",
            "phrases": ["if the test fails"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "contains_all",
          "phrases": ["should move the cutover", "if the test fails"]
        }
      ],
      "forbidden_checks": [
        {
          "type": "not_contains_any",
          "phrases": ["i think it may probably", "may probably make sense"]
        }
      ],
      "notes": "Checks direct conditional wording only; it does not define an ideal speaking style."
    },
    {
      "fixture_id": "concise-03",
      "job": "concise_meeting_explanation",
      "failure_mode": "action_buried_in_background",
      "required_anchor_checks": [
        {
          "anchor": "point",
          "check": {
            "type": "contains_all",
            "phrases": ["decision today on the api owner"]
          }
        },
        {
          "anchor": "action",
          "check": {
            "type": "contains_all",
            "phrases": ["need a decision today on the api owner"]
          }
        }
      ],
      "target_checks": [
        {
          "type": "before",
          "first": "decision today on the api owner",
          "second": "we reviewed the backlog"
        }
      ],
      "forbidden_checks": [],
      "notes": "Order check for the synthetic request versus background history."
    }
  ],
  "rights": {
    "state": "project-authored",
    "note": "Benchmark cases and checks are project-authored and reference only the public synthetic fixture set."
  }
}
