/** * Admission Events — PEAT-B2 * * Structured event types for the pain evidence admission pipeline. * These events make admission decisions observable without exposing raw data. * * Privacy boundary: events MUST NOT contain raw prompt, raw chat, raw trajectory, * full local paths, file contents, env vars, tokens, or API keys. * * ERR checklist: * - ERR-002: Every event has reason + nextAction. * - ERR-009: Malformed input events include validation error details. */ import type { TriggerOutcome, TriggerDecision } from './trigger-controller.js'; import type { SourceKind, TriageDecision } from './types.js'; /** * Base fields shared by all admission events. */ interface AdmissionEventBase { /** Unique event ID */ readonly eventId: string; /** ISO timestamp */ readonly timestamp: string; /** Source kind that was evaluated */ readonly sourceKind: SourceKind; /** Workspace reference (directory name only, no full path) */ readonly workspaceRef: string; /** Session ID (may be truncated for privacy) */ readonly sessionId?: string; } /** * Emitted when the admission controller makes a decision. * This is the primary observability event for the admission pipeline. */ export interface AdmissionDecisionEvent extends AdmissionEventBase { readonly eventType: 'admission_decision'; readonly triageDecision: TriageDecision; readonly triggerOutcome: TriggerOutcome; readonly reason: string; readonly nextAction: string; readonly shouldCreateDiagnosticTask: boolean; } /** * Emitted when a diagnostic task is created as a result of admission. */ export interface DiagnosisTaskCreatedEvent extends AdmissionEventBase { readonly eventType: 'diagnosis_task_created'; readonly painId: string; readonly taskId: string; readonly triggerOutcome: TriggerOutcome; } /** * Emitted when evidence is recorded without triggering diagnosis. */ export interface EvidenceOnlyRecordedEvent extends AdmissionEventBase { readonly eventType: 'evidence_only_recorded'; readonly triageDecision: TriageDecision; readonly reason: string; readonly nextAction: string; } /** * Emitted when a signal is skipped or refused. */ export interface SkippedRefusedEvent extends AdmissionEventBase { readonly eventType: 'skipped_refused'; readonly triggerOutcome: TriggerOutcome; readonly reason: string; readonly nextAction: string; } /** * Union of all admission event types. */ export type AdmissionEvent = AdmissionDecisionEvent | DiagnosisTaskCreatedEvent | EvidenceOnlyRecordedEvent | SkippedRefusedEvent; /** * Create an AdmissionDecisionEvent from a TriggerDecision. * * This is the canonical way to produce an admission event. * The event contains no raw sensitive data — only structured metadata. */ export declare function createAdmissionDecisionEvent(decision: TriggerDecision, options: { workspaceRef: string; sessionId?: string; }): AdmissionDecisionEvent; /** * Create a DiagnosisTaskCreatedEvent. */ export declare function createDiagnosisTaskCreatedEvent(opts: { painId: string; taskId: string; decision: TriggerDecision; workspaceRef: string; sessionId?: string; }): DiagnosisTaskCreatedEvent; /** * Create an EvidenceOnlyRecordedEvent. */ export declare function createEvidenceOnlyRecordedEvent(decision: TriggerDecision, options: { workspaceRef: string; sessionId?: string; }): EvidenceOnlyRecordedEvent; /** * Create a SkippedRefusedEvent. */ export declare function createSkippedRefusedEvent(decision: TriggerDecision, options: { workspaceRef: string; sessionId?: string; }): SkippedRefusedEvent; /** * Serialize an admission event to a JSONL-safe string. * * Privacy boundary: only structured fields are included. * No raw prompt/chat/trajectory/file content/token/path secrets. */ export declare function serializeAdmissionEvent(event: AdmissionEvent): string; /** * Validate that an admission event does not contain raw sensitive data. * * Returns true if the event passes privacy checks. * This is a defense-in-depth check for tests and auditing. */ export declare function validateEventPrivacy(event: AdmissionEvent): { valid: boolean; violations: string[]; }; export {}; //# sourceMappingURL=admission-events.d.ts.map