From 762b778ee2ce1c921d9f0a24a530e88fae430e71 Mon Sep 17 00:00:00 2001 From: Simon Axelsson Date: Wed, 16 Sep 2026 15:37:59 +0200 Subject: [PATCH] feat(core): add reconstruction pipeline contracts --- .../c0py-core/src/reconstruction/contracts.ts | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 packages/c0py-core/src/reconstruction/contracts.ts diff --git a/packages/c0py-core/src/reconstruction/contracts.ts b/packages/c0py-core/src/reconstruction/contracts.ts new file mode 100644 index 0000000..c68945d --- /dev/null +++ b/packages/c0py-core/src/reconstruction/contracts.ts @@ -0,0 +1,92 @@ +import type { + CaptureProfile, + EvidenceRecord, + FidelityVector, + ReconstructionSpec, +} from "@siax/c0py-types"; + +export interface TargetDescriptor { + id: string; + url: string; + allowedOrigins: string[]; + mode: ReconstructionSpec["mode"]; +} + +export interface DiscoveryResult { + targetId: string; + routes: string[]; + candidateWorkflows: string[]; + evidence: EvidenceRecord[]; +} + +export interface CaptureRequest { + target: TargetDescriptor; + profile: CaptureProfile; + routes: string[]; +} + +export interface CaptureResult { + targetId: string; + profileId: string; + evidence: EvidenceRecord[]; + warnings: PipelineFailure[]; +} + +export interface VerificationRequest { + spec: ReconstructionSpec; + sourceEvidence: EvidenceRecord[]; + implementationUrl: string; +} + +export interface VerificationResult { + specId: string; + fidelity: FidelityVector; + failures: PipelineFailure[]; + passed: boolean; +} + +export type FailureKind = + | "CaptureFailure" + | "DiscoveryFailure" + | "EvidenceGap" + | "ReconstructionFailure" + | "VerificationFailure" + | "AuthorizationBoundary" + | "UnsupportedSurface" + | "DynamicContentVariance" + | "NetworkReplayLimited" + | "AuthSessionMissing"; + +export interface PipelineFailure { + id: string; + kind: FailureKind; + message: string; + route?: string; + evidenceIds?: string[]; + retryable: boolean; + details?: Record; +} + +export interface DiscoveryAdapter { + id: string; + discover(target: TargetDescriptor, profile: CaptureProfile): Promise; +} + +export interface CaptureAdapter { + id: string; + capture(request: CaptureRequest): Promise; +} + +export interface ReconstructionAdapter { + id: string; + reconstruct(spec: ReconstructionSpec): Promise<{ + artifactRef: string; + previewUrl?: string; + commitRef?: string; + }>; +} + +export interface VerificationAdapter { + id: string; + verify(request: VerificationRequest): Promise; +}