/** Four axis discriminators from §1.2. */ export type AttributionAxisTag = 'D' | 'P' | 'G' | 'C'; /** A single data-source contribution. §1.2 (D). */ export interface DataAxisEntry { /** DID of the registered data source whose content influenced the output. */ source_did: string; /** Fractional attribution weight in [0, 1]. Decimal string, 6 digits after * the decimal point, no scientific notation. Spec §2.5 "Numeric representation". */ contribution_weight: string; /** Hex sha256 of the underlying AccessReceipt this contribution composes over. */ access_receipt_hash: string; } /** A single protocol-module evaluation entry. §1.2 (P). */ export interface ProtocolAxisEntry { module_id: string; module_version: string; evaluation_outcome: string; evaluation_receipt_hash: string; /** Optional post-decay weight surfaced for axis P when value-audit decay * is applied by the issuer. §4.2 "Integration with the primitive". Decimal * string, 6 digits after the decimal point. */ weight?: string; } /** A single delegation-chain hop. §1.2 (G). Ordered root-to-leaf by depth. */ export interface GovernanceAxisEntry { delegation_id: string; signer_did: string; scope_hash: string; /** 0 = root principal, increasing monotonically toward the acting agent. */ depth: number; } /** A single compute-provider entry. §1.2 (C). */ export interface ComputeAxisEntry { provider_did: string; /** Fractional compute share in [0, 1]. Decimal string, 6-digit precision. */ compute_share: string; hardware_attestation_hash: string; } /** Pooled sub-threshold contributors per §4.1. A residual bucket occupies * one slot in its axis and participates in distribution as a single entity. * The pooled_contributors_hash is a Merkle commitment over the pooled list * so individual pooled contributors can prove inclusion without the axis * content enumerating them. */ export interface ResidualBucket { /** Axis-scoped identifier: "residual:D" | "residual:P" | "residual:C". * Governance axis is not pooled; see spec §4.1 / §1.2. */ residual_id: 'residual:D' | 'residual:P' | 'residual:C'; /** Sum of pre-threshold weights for the pooled contributors. Decimal string. */ total_pooled_weight: string; count_of_pooled_contributors: number; /** Hex sha256 Merkle root over the lexicographically-sorted pooled list. */ pooled_contributors_hash: string; } /** Entry on a poolable axis (D, P, C): either an explicit contributor or the * residual bucket. Only one residual bucket is permitted per axis. */ export type DataAxisItem = DataAxisEntry | ResidualBucket; export type ProtocolAxisItem = ProtocolAxisEntry | ResidualBucket; export type ComputeAxisItem = ComputeAxisEntry | ResidualBucket; /** The four-axis tuple from §1.2. Governance is ordered, not sorted. */ export interface AttributionAxes { D: DataAxisItem[]; P: ProtocolAxisItem[]; G: GovernanceAxisEntry[]; C: ComputeAxisItem[]; } /** The unified primitive. §1.2 tuple form. */ export interface AttributionPrimitive { /** Hex sha256. Derived from canonical(action tuple). §1.2. */ action_ref: string; /** Full axis content. Projections omit three of the four. */ axes: AttributionAxes; /** Hex sha256 of the four-leaf balanced Merkle tree. §2.1. */ merkle_root: string; /** Issuer DID (gateway or agent). */ issuer: string; /** ISO-8601 UTC, millisecond precision, trailing Z. §2.5. */ timestamp: string; /** Ed25519 hex signature over canonical(envelope). §2.3. */ signature: string; } /** Action identity tuple used to derive action_ref. Kept as an object so the * canonicalizer walks it unambiguously and satisfies A1 (injectivity) by * construction. §1.2 mixes two notations for action_ref; we adopt the * canonical-tuple form from Theorem 1 in §3.4 because it is provably * injective under the APS schema, not reliant on string concatenation * being self-delimiting. */ export interface AttributionAction { agentId: string; actionType: string; /** Action parameters. Opaque JSON — canonicalizer handles sorting. */ params: Record; /** Anti-replay nonce. Production callers should use a UUID or similar. */ nonce: string; } /** A single-axis projection. §2.2. */ export interface AttributionProjection { action_ref: string; axis_tag: AttributionAxisTag; /** The axis content for this projection's axis. Typed loosely because * callers dispatch on axis_tag. */ axis_data: unknown; /** Two sibling hashes reconstructing the root via §2.3's tag-dispatch. * [sibling_leaf_within_pair, sibling_internal_node]. */ merkle_path: [string, string]; merkle_root: string; issuer: string; timestamp: string; signature: string; } /** Outcome of verify_projection. §2.6. */ export type AttributionVerifyResult = { valid: true; } | { valid: false; reason: 'INVALID_AXIS_TAG' | 'MERKLE_MISMATCH' | 'SIGNATURE_INVALID' | 'MALFORMED'; }; /** Outcome of check_same_receipt. §2.4. */ export type AttributionConsistencyResult = { same_receipt: true; } | { same_receipt: false; reason: 'DIFFERENT_ACTIONS' | 'DIFFERENT_RECEIPTS' | 'DIFFERENT_SIGNATURES' | 'METADATA_MISMATCH'; }; /** Canonical envelope that Ed25519 signs. §2.3. Exposed so downstream * tooling (verifiers, test vectors, audit pipelines) can reproduce the * exact bytes without reimplementing field selection. */ export interface AttributionEnvelope { action_ref: string; merkle_root: string; issuer: string; timestamp: string; } //# sourceMappingURL=types.d.ts.map