Round #387

08 May 2026, 22:31· hr-law· claude-haiku-4-5-20251001· r13-clean-hints
Complexity
band 0
ZP / UO / OBS
3 / 5 / 0
Journey weight
532
Lightshift ΔL
+0.17

Prompt

We received a complaint that a manager bullied a junior employee. What does a fair investigation look like before we hold a disciplinary hearing?

Zero-point index (what the engine surfaced)

ZPI-ZPI-0004 | 2026-05-08T22:31:25Z We received a complaint that a manager bullied a junior employee. What does a fair investigation look like before we hold a disciplinary hearing? ZERO POINT — 3 entries (structural invariants) ● hsl(157.40, 100%, 34%) ACAS Code of Practice [contract] ● hsl(34.71, 100%, 34%) procedural fairness [contract] ● hsl(280.96, 100%, 34%) appeal right [contract] UNOBSERVED — 5 entries (implied truths) ○ hsl(230.00, 100%, 32%) right to be accompanied [feature] ○ hsl(231.00, 100%, 33%) appeal right [feature] ○ hsl(225.00, 100%, 34%) disciplinary investigation [feature] ○ hsl(180.00, 100%, 42%) Conduct disciplinary investigation [function] ○ hsl(182.25, 100%, 24%) Issue disciplinary invitation [function] OBSERVED — 0 entries (explicit in request) COMPLEXITY │ 8 entries │ spread: 51° │ band: LOW

Baseline response (no ZPI)

# Fair Investigation Framework for Bullying Allegations ## Key Principles - **Impartiality**: Use someone independent of both parties (HR, external investigator, or uninvolved manager) - **Confidentiality**: Limit disclosure to those with a need to know - **Procedural fairness**: Both parties get opportunity to respond - **Documentation**: Record all interviews and findings clearly - **Timeliness**: Complete within reasonable timeframe (typically 2-4 weeks) ## Investigation Steps **1. Initial Assessment** - Secure the complaint in writing - Determine scope and seriousness - Preserve evidence (emails, messages, records) - Interim measures if needed (separate duties, support) **2. Interview the Complainant** - Specific examples of alleged behavior with dates/witnesses - Impact on the employee - Any previous reports or informal complaints - What outcome they seek **3. Interview the Accused Manager** - Present allegations clearly and specifically - Allow full response and explanation - Don't assume guilt; listen to their account - Ask about their management approach generally **4. Interview Witnesses** - Anyone with direct knowledge of incidents - Include those who may support either party - Consistent questioning approach **5. Review Evidence** - Communications, performance records, attendance - Any prior complaints or concerns noted ## Critical Safeguards - ✓ Don't interview together - ✓ Offer support (counseling, buddy, union rep) - ✓ Protect against retaliation - ✗ Don't pre-judge or discuss findings casually - ✗ Don't delay unreasonably (causes stress) **After investigation**, decide whether to proceed to disciplinary hearing or other outcome (management training, mediation, etc.). Would you like guidance on specific elements?

Enhanced response (with ZPI)

# Fair Disciplinary Investigation Process Based on UK employment law principles (ACAS Code of Practice, procedural fairness, and statutory appeal rights), here's a complete implementation for conducting a fair investigation before a disciplinary hearing: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; namespace DisciplinaryInvestigation { /// <summary> /// Represents evidence gathered during an investigation /// </summary> public class InvestigationEvidence { public string Id { get; set; } = Guid.NewGuid().ToString(); public string SourceName { get; set; } public string Description { get; set; } public DateTime DateRecorded { get; set; } public string EvidenceType { get; set; } // "Witness Statement", "Email", "Document", etc. public bool IsConfidential { get; set; } } /// <summary> /// Represents an interview conducted during investigation /// </summary> public class InvestigationInterview { public string Id { get; set; } = Guid.NewGuid().ToString(); public string IntervieweeName { get; set; } public string Role { get; set; } public DateTime InterviewDate { get; set; } public string Interviewer { get; set; } public List<string> KeyPoints { get; set; } = new(); public string Summary { get; set; } public bool RightToBeAccompanied { get; set; } } /// <summary> /// Represents the accused employee's right to respond /// </summary> public class AccusedResponse { public string EmployeeId { get; set; } public string EmployeeName { get; set; } public DateTime InvitationDate { get; set; } public DateTime ResponseDeadline { get; set; } public string WrittenResponse { get; set; } public bool RespondedInTime { get; set; } public DateTime? DateResponded { get; set; } } /// <summary> /// Complete investigation record /// </summary> public class DisciplinaryInvestigation { public string Id { get; set; } = Guid.NewGuid().ToString(); public string ComplaintId { get; set; } public string AccusedEmployeeId { get; set; } public string AccusedEmployeeName { get; set; } public string ComplainantName { get; set; } public string Allegation { get; set; } public DateTime ComplaintDate { get; set; } public DateTime InvestigationStartDate { get; set; } public DateTime? InvestigationCompletionDate { get; set; } public string InvestigatingOfficer { get; set; } public InvestigationStatus Status { get; set; } // Investigation components public List<InvestigationEvidence> Evidence { get; set; } = new(); public List<InvestigationInterview> Interviews { get; set; } = new(); public AccusedResponse AccusedResponse { get; set; } public List<string> DocumentsReviewedUrls { get; set; } = new(); // Findings public string InvestigationSummary { get; set; } public string Findings { get; set; } public bool IsCaseToAnswer { get; set; } public List<string> RecommendedNextSteps { get; set; } = new(); } public enum InvestigationStatus { NotStarted, InProgress, AwaitingAccusedResponse, InterviewsComplete, EvidenceAnalysis, ConclusionsReached, Completed, Suspended } /// <summary> /// Service to conduct fair investigations /// </summary> public interface IInvestigationService { Task<DisciplinaryInvestigation> InitiateInvestigationAsync( string complaintId, string accusedEmployeeId, string accusedEmployeeName, string complainantName, string allegation, string investigatingOfficer); Task IssueAccusedResponseInvitationAsync( DisciplinaryInvestigation investigation, int daysToRespond = 7); Task RecordAccusedResponseAsync( DisciplinaryInvestigation investigation, string writtenResponse); Task ConductInterviewAsync( DisciplinaryInvestigation investigation, InvestigationInterview interview); Task AddEvidenceAsync( DisciplinaryInvestigation investigation, InvestigationEvidence evidence); Task<DisciplinaryInvestigation> CompleteInvestigationAsync( DisciplinaryInvestigation investigation, string summary, string findings, bool isCaseToAnswer); Task<InvestigationReport> GenerateInvestigationReportAsync( DisciplinaryInvestigation investigation); } public class InvestigationService : IInvestigationService { private readonly INotificationService _notificationService; private readonly IComplianceValidator _complianceValidator; public InvestigationService( INotificationService notificationService, IComplianceValidator complianceValidator) { _notificationService = notificationService; _complianceValidator = complianceValidator; } public Task<DisciplinaryInvestigation> InitiateInvestigationAsync( string complaintId, string accusedEmployeeId, string accusedEmployeeName, string complainantName, string allegation, string investigatingOfficer) { var investigation = new DisciplinaryInvestigation { ComplaintId = complaintId, AccusedEmployeeId = accusedEmployeeId, AccusedEmployeeName = accusedEmployeeName, ComplainantName = complainantName, Allegation = allegation, ComplaintDate = DateTime.UtcNow, InvestigationStartDate = DateTime.UtcNow, InvestigatingOfficer = investigatingOfficer, Status = InvestigationStatus.InProgress }; return Task.FromResult(investigation); } public async Task IssueAccusedResponseInvitationAsync( DisciplinaryInvestigation investigation, int daysToRespond = 7) { if (investigation.AccusedResponse != null) throw new InvalidOperationException("Accused has already been invited to respond."); var responseDeadline = DateTime.UtcNow.AddDays(daysToRespond); investigation.AccusedResponse = new AccusedResponse { EmployeeId = investigation.AccusedEmployeeId, EmployeeName = investigation.AccusedEmployeeName, InvitationDate = DateTime.UtcNow, ResponseDeadline = responseDeadline, RespondedInTime = false }; investigation.Status = InvestigationStatus.AwaitingAccusedResponse; // Notify accused employee - right to know allegations and defend themselves await _notificationService.SendInvitationAsync( new InvitationNotification { EmployeeName = investigation.AccusedEmployeeName, EmployeeId = investigation.AccusedEmployeeId, InvitationType = "Investigation Response", Allegation = investigation.Allegation, ResponseDeadline = responseDeadline, RightToBeAccompanied = true, RightToAccessEvidence = true, Message = $"You are invited to respond to allegations of: {investigation.Allegation}. " + $"You have the right to be accompanied and to access evidence. " + $"Please respond by {responseDeadline:yyyy-MM-dd}." }); await _complianceValidator.ValidateInvitationCompliesWithACAS

Grader chain

Each grader reads the same baseline + enhanced pair and casts an independent verdict. Disagreement is the framework's own signal — not noise to be averaged away.

V1samba/Meta-Llama-3.3-70B-Instruct
Better
V4qwen2.5-coder-7b-instruct
Better

Comments

Our grader said what it said. What do you say? Comment as a guest below.

No comments yet. Be the first to say what you make of this round.

← back to all rounds