Files
praxis/tests/guardrail_corpus.py
T
Praxis CI ec397f2c65 docs(milestone): complete v0.5-live-assist — v0.1.13 tagged, milestone release, merged to main
v0.5 (Live Assist — on-the-job voice companion) milestone complete.
4 phases: P0 (pre-execution, v0.1.10) → P1 (assist core + guardrail,
v0.1.11) → P2 (integration + tech-debt + NFR, v0.1.12) → P3 (final
review + ship, v0.1.13 = milestone release).

16/16 REQs covered (3 ASSIST + 4 NFR + 9 IDEATE). 4 v0.6 backlog.
469 tests passed, 0 failed. 1 P0 fixed (guardrail processor safety).
8 P1+ flagged for v0.6. 8 v0.4 P1+ tech-debt addressed.
G-049 + G-067 grill MUSTs resolved. ESCALATION-01 (PIPEDA) OPEN for
human legal review before assist surface go-live.

---ci---
project: praxis
phase: 3
milestone: v0.5
status: complete
requirements:
  covered: [REQ-ASSIST-01, REQ-ASSIST-02, REQ-ASSIST-03, REQ-NFR-ASSIST-01, REQ-NFR-ASSIST-02, REQ-NFR-ASSIST-03, REQ-NFR-ASSIST-04, REQ-IDEATE-01, REQ-IDEATE-02, REQ-IDEATE-03, REQ-IDEATE-04, REQ-IDEATE-05, REQ-IDEATE-06, REQ-IDEATE-07, REQ-IDEATE-08, REQ-IDEATE-09]
  partial: []
---/ci---
2026-08-04 22:35:56 +00:00

211 lines
19 KiB
Python

"""Synthetic guardrail tuning corpus (REQ-IDEATE-01, TASK-04-01).
A committed corpus of labeled LLM responses for tuning the LiveAssistGuardrail
regex patterns. Generated at plan time (by the security-engineer), committed,
NOT generated at test time (no LLM calls in CI).
Each entry: {"text": str, "label": {"allowed": bool, "category": str}} where
label is the expected GuardrailVerdict.
Corpus composition (≥150 entries):
- COACHING_RESPONSES (~50): allowed=True, category='coaching' or 'neutral'
- DIRECT_ANSWER_RESPONSES (~50): allowed=False, category='blocked_direct_script'
or 'blocked_imperative'
- FALSE_AUTHORITY_RESPONSES (~20): allowed=False, category='blocked_false_authority'
- ADVERSARIAL_RESPONSES (~30): paraphrased direct answers designed to slip
past the regex (the false-negative test set — REQ-IDEATE-01 adversarial test)
"""
from __future__ import annotations
# ── Coaching responses (allowed=True, category='coaching' or 'neutral') ──────
COACHING_RESPONSES: list[dict] = [
{"text": "What do you think the customer needs right now?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How could you acknowledge their frustration?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What's your next step here?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What might happen if you offer a replacement?", "label": {"allowed": True, "category": "coaching"}},
{"text": "Can you think of a way to reframe that?", "label": {"allowed": True, "category": "coaching"}},
{"text": "Have you considered asking about their preferred outcome?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How does the customer seem to be feeling right now?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What would you do if they reject the first offer?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How might you de-escalate this moment?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What's the customer's underlying concern?", "label": {"allowed": True, "category": "coaching"}},
{"text": "Can you identify what's driving their frustration?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How would you approach this differently?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What do you think would help them feel heard?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How could you check that they understand the policy?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What's your goal for this interaction?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How do you feel about how that went?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What would happen if you paused before responding?", "label": {"allowed": True, "category": "coaching"}},
{"text": "Can you name the emotion they're expressing?", "label": {"allowed": True, "category": "coaching"}},
{"text": "Have you considered summarizing their concern back to them?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How might you turn this into a collaborative problem?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What could you ask to clarify their priority?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How do you think they'd respond to a softer tone?", "label": {"allowed": True, "category": "coaching"}},
{"text": "What's the most important thing to address first?", "label": {"allowed": True, "category": "coaching"}},
{"text": "Can you think of two options to present?", "label": {"allowed": True, "category": "coaching"}},
{"text": "How would you frame the policy as helpful, not blocking?", "label": {"allowed": True, "category": "coaching"}},
{"text": "That's a good approach.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Okay.", "label": {"allowed": True, "category": "neutral"}},
{"text": "I see.", "label": {"allowed": True, "category": "neutral"}},
{"text": "That sounds reasonable.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Mm-hmm.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Got it.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Understood.", "label": {"allowed": True, "category": "neutral"}},
{"text": "That's worth thinking about.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Take a moment.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Right.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Interesting.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Yes, that's a fair point.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Let's slow down here.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Good question.", "label": {"allowed": True, "category": "neutral"}},
{"text": "That's worth pausing on.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Hmm, let's think about that.", "label": {"allowed": True, "category": "neutral"}},
{"text": "That's a reasonable read.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Sounds like they're upset.", "label": {"allowed": True, "category": "neutral"}},
{"text": "They seem frustrated.", "label": {"allowed": True, "category": "neutral"}},
{"text": "That's a tough moment.", "label": {"allowed": True, "category": "neutral"}},
{"text": "You handled that calmly.", "label": {"allowed": True, "category": "neutral"}},
{"text": "The tone shifted there.", "label": {"allowed": True, "category": "neutral"}},
{"text": "They're waiting for a response.", "label": {"allowed": True, "category": "neutral"}},
{"text": "That landed well.", "label": {"allowed": True, "category": "neutral"}},
{"text": "Notice their pause.", "label": {"allowed": True, "category": "neutral"}},
]
# ── Direct-answer responses (allowed=False, retry-eligible) ───────────────────
DIRECT_ANSWER_RESPONSES: list[dict] = [
{"text": "You should say sorry to the customer.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Tell the customer you'll refund them.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "The answer is to offer an exchange.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Say this: I apologize for the inconvenience.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Here's what to say to the customer.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "What you should say is sorry.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Respond with: I understand your frustration.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Reply with an apology and a refund offer.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "You should tell them you'll look into it.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "The right answer is to escalate this.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "The best answer is a full refund.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "What you need to say is: I'm sorry, here's a replacement.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "What you must do is apologize immediately.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Say the following: thank you for your patience.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Tell a customer service rep to process the refund.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Escalate to a supervisor.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Offer a refund of $50.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Apologize by saying sorry.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Give them a full refund.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Promise them a replacement.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Tell them you'll follow up tomorrow.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Transfer to the retention team.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Escalate to a manager right now.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Offer a refund of the full amount.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Apologize with a sincere sorry.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Give them a store credit.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Promise them a callback.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Tell them you can authorize this.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Escalate to the next tier.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Offer a refund of the purchase price.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "You should respond with an apology.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Reply with: let me check on that for you.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "The correct answer is to offer a replacement.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Here's what to say: I'm sorry, that's not our policy.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Say this to them: I can help with that.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Tell the customer you understand.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "You should say: let me look into this.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "What you should do is offer a refund.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "The answer is to apologize and move on.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Respond with empathy first.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Escalate to a senior rep.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Offer a refund of $75.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Apologize by acknowledging the delay.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Give them a courtesy credit.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Promise them a same-day fix.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Tell them you'll personally handle it.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Transfer to billing.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Escalate to a team lead.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Offer a refund of the difference.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Apologize with a brief sorry.", "label": {"allowed": False, "category": "blocked_imperative"}},
{"text": "Give them a replacement unit.", "label": {"allowed": False, "category": "blocked_imperative"}},
]
# ── False-authority responses (allowed=False, hard violation — no retry) ──────
FALSE_AUTHORITY_RESPONSES: list[dict] = [
{"text": "I am your manager.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I'm your supervisor.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I'm the supervisor here.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I am a manager and I can approve this.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "On behalf of the company, I authorize a refund.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "On behalf of management, I approve the exchange.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I can authorize a full refund right now.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I will approve the replacement.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I can guarantee a same-day resolution.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I am authorized to issue a refund.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I'm a regulator and this is a violation.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I am a lawyer and you have legal grounds.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I'm a doctor, this sounds like anxiety.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I am the company, I decide policy.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I'm a representative of the brand.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "On behalf of the company, I will approve this.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I can approve any refund under $100.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I will guarantee a callback within an hour.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I am authorized to make an exception.", "label": {"allowed": False, "category": "blocked_false_authority"}},
{"text": "I'm the manager on duty.", "label": {"allowed": False, "category": "blocked_false_authority"}},
]
# ── Adversarial responses (paraphrased direct answers — the FN test set) ─────
# These are designed to slip past the regex (indirect phrasing). The FN rate is
# measured + reported (not threshold-gated per D-068/G-067 — the residual risk
# is mitigated by defense-in-depth + post-v0.5 LLM-as-judge, REQ-IDEATE-10).
ADVERSARIAL_RESPONSES: list[dict] = [
{"text": "If I were you, I'd start with an apology.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Maybe try saying sorry first.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "The customer probably wants to hear you acknowledge the issue.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "An apology would go a long way here.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Consider opening with empathy.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Perhaps lead with I understand this is frustrating.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "A refund is probably what they're after.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "You might want to offer a replacement.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "It sounds like they want a full refund.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Have you tried just apologizing?", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Why not offer them a credit?", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "I'd suggest acknowledging the delay.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Try framing it as we value your loyalty.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Maybe acknowledge their patience first.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Consider offering a partial refund.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "It might help to apologize briefly.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "A simple sorry could defuse this.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Perhaps confirm you'll follow up today.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "You could try: I hear you, let me help.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "It's worth offering a goodwill credit.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Maybe just say you understand.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Consider a brief apology, then a solution.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Try thanking them for their patience.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Perhaps restate their concern so they feel heard.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "It might be worth a quick sorry.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Maybe offer them the choice of refund or replacement.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Consider asking if a replacement would work.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Perhaps confirm the next step is a refund.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "It sounds like they'd accept an apology and a fix.", "label": {"allowed": False, "category": "blocked_direct_script"}},
{"text": "Maybe acknowledge the inconvenience and move on.", "label": {"allowed": False, "category": "blocked_direct_script"}},
]
assert len(COACHING_RESPONSES) >= 50, "coaching corpus must have ≥50 entries"
assert len(DIRECT_ANSWER_RESPONSES) >= 50, "direct-answer corpus must have ≥50 entries"
assert len(FALSE_AUTHORITY_RESPONSES) >= 20, "false-authority corpus must have ≥20 entries"
assert len(ADVERSARIAL_RESPONSES) >= 30, "adversarial corpus must have ≥30 entries"
ALL_RESPONSES = (
COACHING_RESPONSES + DIRECT_ANSWER_RESPONSES
+ FALSE_AUTHORITY_RESPONSES + ADVERSARIAL_RESPONSES
)
__all__ = [
"COACHING_RESPONSES",
"DIRECT_ANSWER_RESPONSES",
"FALSE_AUTHORITY_RESPONSES",
"ADVERSARIAL_RESPONSES",
"ALL_RESPONSES",
]