# description
Per-translation attestation envelope binding {source-bytes, source-language, target-language, translation-model, translation-bytes, post-editor-identity, qa-scores, translator-DID} to a cryptographic chain. Closes SYNTHESIS-acquisition Round 21 P3 [[multilingual-and-translation]] TR1 ship-first action. TWENTIETH JSON Schema in IntelligencePro's catalog (CP now anchors 20 wire-shape attestation primitives end-to-end). The high-stakes translation anchor: USCIS certified translations + court translations + medical-record translations + EU pharmacovigilance translations + LSP delivery receipts all carry intrinsic legal weight today only through wet-ink certifications. IntelligencePro attestation lets a target-language consumer cryptographically verify WHICH source bytes were translated by WHICH model into WHICH translation bytes — recompute sourceBytesSha256 against the published source, verify translationBytesSha256 against the delivered output, check qaScores + postEditorDid signature. Designed for: DeepL (Pro + API; $1B Mar-2025 SoftBank-led raise) + DeepL Write + Google Translate API + Google Cloud Translation v3 (Adaptive Translation + Translation LLM) + Amazon Translate + Microsoft Translator + Microsoft Translator Pro + OpenAI translation endpoints (gpt-5.5 native multilingual) + Anthropic Claude translation (claude-opus-4-7 native multilingual) + Cohere Aya 23 + Aya Expanse (101 languages) + Meta NLLB-200 (No-Language-Left-Behind; 200 languages; FLORES-200 benchmark) + Meta SeamlessM4T v2 (speech + text) + Meta SONAR + Mistral Saba (Arabic + Indic-leaning) + Tower (Unbabel; LLM-fine-tuned for translation) + Unbabel (LSP + Tower API) + Lilt (interactive MT + post-edit) + Smartling + RWS Language Cloud + Phrase TMS + Lokalise + Crowdin + Smartcat + memoQ + SDL Trados + Memsource (Phrase) + Wordbee + LanguageWeaver (RWS Trados) + Systran + KantanMT + iTranslate + Reverso + LanguageLine + LinguaLinx + Argos Open Translation. Anchors the FLORES-200 + WMT25 + NTREX-128 + IWSLT 2026 leaderboards. Composes UPSTREAM with ip.eval.run.attestation.v1 (cycle 308) — translation-eval benchmarks consume these attestations. Composes DOWNSTREAM with ip.legal.citation.attestation.v1 (cycle 312) — translated legal documents chain back to the source via this attestation; FRE 902(13) + Hague Apostille Convention digital evidentiary chains can now anchor translations cryptographically. Composes DOWNSTREAM with ip.governance.compliance.v1 (cycle 315) — EU AI Act Article 50(4) requires translated AI-generated content disclosures be marked as such; this attestation provides the cryptographic trail.

# $comment
Discovery: https://ip.tekton.cc/.well-known/ip-knowledge.json (full descriptor) | Badge: https://ip.tekton.cc/api/badge/v1/attestation/translation.attestation.v1/<subjectSha256> (shields.io endpoint) | Free dry-run: POST https://ip.tekton.cc/api/credentials/dry-run with body {kind:"translation.attestation.v1", body:<candidate>} (no auth required, validates against this schema) | Verification recipe: https://ip.tekton.cc/docs/verification-recipe.md (3-layer trust model + curl trail) | Revocation: https://ip.tekton.cc/credentials/status/v1 (W3C BitstringStatusList v1.0; check bit at credentialStatus.statusListIndex)

# properties.schemaVersion.description
Semver of this schema. Bumps to 2.0.0 land at /credentials/translation/v2 — v1 stays immutable (see /docs/schema-versioning.md for the cycle-726 canonical bump-mechanics + soft-change-detection contract).

# properties.translationId.description
Unique RFC 4122 UUID v4 or v7 — this translation attestation's canonical identifier.

# properties.sourceLanguage.description
Source language as BCP 47 tag (ISO 639-1 / 639-3 base + optional ISO 15924 script + optional ISO 3166-1 alpha-2 region or UN M.49 numeric). Examples: 'en', 'fr-FR', 'zh-Hant-TW', 'sr-Cyrl', 'es-419' (Latin America). Format follows W3C / IETF BCP 47 norm rather than ad-hoc 2-letter codes — translation correctness depends on script + region for languages with multiple writing systems.

# properties.targetLanguage.description
Target language as BCP 47 tag. Same format rules as sourceLanguage. Required: a translation without a pinned target locale is meaningless — French (France) and French (Quebec) differ in terminology + spelling conventions; Spanish (Spain) vs Spanish (Latin America es-419) differ; Portuguese (Brazil) vs Portuguese (Portugal) differ.

# properties.sourceBytesSha256.description
Sha256 of the canonical UTF-8 bytes of the source text. For document-level translation: sha256 of the canonical-flattened source (preserving paragraph structure, no metadata). For segment-level translation (TMS pattern): sha256 of the JCS-encoded segment array. THIS is the load-bearing anchor — a downstream verifier (regulator, court, USCIS) recomputes this hash against the source document and proves the translation was performed on the SAME source bytes.

# properties.sourceText.description
Optional plaintext source. When present, sha256(canonical-utf8(sourceText)) MUST equal sourceBytesSha256. Recipe pin (cycle 1181): canonical-utf8(<text>) = sha256 of the UTF-8 byte encoding of <text> AS-PROVIDED, with NO Unicode normalization — equivalent to Python sha256(<text>.encode('utf-8')).hexdigest() / Node Buffer.from(<text>,'utf8'). The word 'canonical' refers to the canonical UTF-8 encoding (no BOM, no JSON quoting), NOT to Unicode-NFC normalization. If an issuer wants the credential to match across NFC and NFD inputs, the issuer should pre-normalize sourceText to NFC BEFORE inlining + hashing. Optional because (1) sensitive sources (medical, legal, financial) often must NOT travel in the attestation; (2) 1MB cap covers practical document sizes without forcing long-form bodies into the wire row.

# properties.translationBytesSha256.description
Sha256 of the canonical UTF-8 bytes of the translated output. Same canonicalization rule as sourceBytesSha256. Required: the consumer's verification is sha-match(received_bytes) == this field. A regulator inspecting a translated AI Act compliance document re-derives this against the delivered bytes.

# properties.translationText.description
Optional plaintext translation. When present, sha256(canonical-utf8(translationText)) MUST equal translationBytesSha256. Same recipe pin as sourceText (cycle 1181): canonical-utf8(<text>) = sha256 of the UTF-8 byte encoding of <text> AS-PROVIDED, with NO Unicode normalization.

# properties.translatorModelVersionSha256.description
Optional sha256 of the canonical translator-model artifact. For closed-API (DeepL / Google / Amazon / Microsoft / OpenAI / Anthropic / Cohere): vendor-published version manifest sha. For OSS (NLLB / Aya / SeamlessM4T / Tower / Systran Pure-Neural): sha256 of the safetensors. Defeats the silent-model-rotation class — DeepL has rotated its production model 8+ times since 2023; without per-call attestation, you cannot prove WHICH DeepL produced a given output for a legal challenge.

# properties.translationMode.description
Translation mode. 'machine-only' = no human in the loop (Google Translate API direct call). 'machine-with-human-post-edit-light' = MTPE light (typo + obvious-error pass). 'machine-with-human-post-edit-full' = full MTPE (USCIS-acceptable level). 'human-only' = wholly human translator. 'human-with-machine-assist' = human-led with MT suggestions (Lilt + Trados + memoQ pattern). 'interactive-machine-translation' = IMT (real-time human feedback loop). 'translation-memory-only' = TM-only (no MT). 'hybrid-tm-mt' = TM matches above threshold, MT below. Mode signals legal-acceptability — USCIS rejects machine-only; courts increasingly accept MTPE-full with translator attestation.

# properties.domainSpecialization.description
Domain specialization. Different domains have different error tolerance + certification requirements. 'official-documents-uscis' = USCIS certified-translation form. 'regulatory-pharmacovigilance' = EU EudraVigilance + EMA + FDA pharmacovigilance translations (Article 17 + GVP Module VI). 'regulatory-medical-device' = EU MDR / IVDR + FDA UDI translations. Routes downstream verifiers + certification chains.

# properties.qaScores.properties.comet.description
COMET score (Crosslingual Optimized Metric for Evaluation of Translation; Unbabel + IST). Range varies by COMET variant: COMET-22 [-1.5, 1.5] typically; COMET-Kiwi [0, 1] reference-free.

# properties.qaScores.properties.cometKiwi.description
COMET-Kiwi reference-free quality estimation score [0, 1]. WMT24 + WMT25 primary reference-free metric.

# properties.qaScores.properties.chrf.description
ChrF (character F-score) — surface-level overlap [0, 100].

# properties.qaScores.properties.bleu.description
BLEU score [0, 100] for backward compatibility. NOT the primary 2026 metric — COMET-22 + COMET-Kiwi + xCOMET preferred.

# properties.qaScores.properties.xcomet.description
xCOMET fine-grained error annotation score [0, 1]. Identifies MQM-style error spans.

# properties.qaScores.properties.mqmScore.description
MQM (Multidimensional Quality Metrics) error-penalty score. Lower = fewer/less-severe errors. Industry-standard for high-stakes professional translation.

# properties.qaScores.properties.humanRaterAgreement.description
Inter-rater agreement (Krippendorff alpha / Cohen kappa) across raters who QA-scored this translation.

# properties.qaScores.description
Quality scores. WMT25 + IWSLT 2026 + FLORES-200 leaderboards expect COMET-Kiwi + xCOMET + MQM. Different consumers care about different metrics; CP doesn't enforce which dimensions are present.

# properties.postEditorDid.description
Optional DID of the post-editor (human or machine). For machine-with-human-post-edit-* modes: did:web of the LSP (did:web:unbabel.com, did:web:lilt.com, did:web:smartling.com) or did:key of an individual certified translator. For ATA-certified translators (American Translators Association): did:key tied to their certification number. For sworn translators (FR / IT / ES / DE / etc.): did:web of the issuing authority.

# properties.certifications.items.properties.kind.description
Certification kind. 'iso-17100-compliant' = translation service standard. 'iso-18587-compliant' = post-editing of MT output. 'iso-20771-legal' = legal translation. 'fre-902-13-compliant' = Federal Rule of Evidence 902(13) self-authenticating-electronic-records (ip.legal.citation.attestation.v1 chain). 'haag-apostille-eligible' = Hague Apostille Convention eligibility.

# properties.certifications.items.properties.certificationId.description
Certification identifier (ATA number, sworn-translator registry ID, ISO audit certificate number).

# properties.certifications.items.properties.validUntil.description
Optional epoch milliseconds when the certification expires.

# properties.certifications.description
Array of certifications attached to this translation.

# properties.translationMemoryRef.properties.tmId.description
Translation memory identifier (e.g., 'smartling://workspace/<id>', 'phrase://project/<id>').

# properties.translationMemoryRef.properties.tmSnapshotSha256.description
Sha256 of the canonical TM bytes at translation time. Pinning defeats the silent-TM-update class — a TM edited after a translation surfaces as a sha mismatch.

# properties.translationMemoryRef.properties.fuzzyMatchPercentile.description
Aggregated TM-leverage percentile (0..100). 100% = TM-exact. Mid-range fuzzy matches carry quality risk + are billed differently.

# properties.translationMemoryRef.description
Optional translation-memory provenance. Pinning TM state lets a downstream auditor confirm WHICH terminology + style guides drove the translation.

# properties.regulatoryContext.properties.euAiActArticle50Applicable.description
True when the translated content carries EU AI Act Article 50 disclosure obligations (AI-generated content disclosure; 2026-08-02 enforcement; €15M / 3% global turnover).

# properties.regulatoryContext.properties.euAiActArticle50_4Applicable.description
True specifically when Article 50(4) applies (translated AI-generated content disclosures must be marked as such). This attestation provides the cryptographic disclosure trail.

# properties.regulatoryContext.properties.fre902_13Applicable.description
True when the translation is intended for FRE 902(13) self-authenticating-electronic-records use. Chains to ip.legal.citation.attestation.v1 (cycle 312).

# properties.regulatoryContext.properties.uscisCertificationRequired.description
True when USCIS certified-translation form requirements apply (immigration applications, OPT/CPT supporting docs, naturalization). Mode MUST include post-edit (machine-only translations are USCIS-rejectable).

# properties.regulatoryContext.properties.hipaaCoveredEntity.description
True when translation involves HIPAA-covered PHI. BAA chain + audit-log retention requirements attach.

# properties.translatedAt.description
Epoch milliseconds when the translation was emitted.

# properties.translatorDid.description
DID of the entity that ran the translation. For LSP-delivered: did:web of the LSP. For direct-API: did:web of the API vendor. For self-hosted OSS: did:key of the operator. The DID resolves to a JWKS that verifies the signature.

# properties.ipAttestationEventId.description
Optional: UUID of the ip.attestation.event.v1 wire row that envelopes this attestation for transport.

# properties.chain.properties.parentSha256.description
Sha256 of the canonical-JSON bytes of the parent attestation. For a translation.attestation the parent is the ip.experiment.receipt.v1 of the translation model (the upstream training-receipt that minted the translator's weights — applies to API-vendor, LSP-managed, and self-hosted OSS deployments alike). ⚠ Cycle 493 honest-disclosure: platform does NOT verify parent-existence at issuance; consumers walk the chain against their own registry per /docs/verification-recipe.md.

# properties.chain.properties.parentKind.description
Kind identifier of the parent attestation. translation.attestation anchors to the experiment-receipt of the model checkpoint used for translation.

# properties.chain.properties.parentAttestationId.description
Optional UUID of the parent attestation — convenience for consumers that index by id rather than by sha256.

# properties.chain.description
Cycle 780 (sc-772-P0-1 partial close, batch 3/4): uniform upward chain link per the cycle-484 substrate. Pre-cycle-780 translation.attestation had no chain.parentSha256, so a regulator walking up from a translation attestation (legal/regulatory translation contexts under EU AI Act Annex III high-risk + GDPR Art-22 obligations) could not mechanically reach the upstream model receipt. The block is OPTIONAL (not in required[]) so back-compat is preserved.

# properties.signature.description
Ed25519 signature (128 hex = 64 raw bytes) over the canonical-JSON bytes of (translationId ⊕ sourceLanguage ⊕ targetLanguage ⊕ sourceBytesSha256 ⊕ translationBytesSha256 ⊕ translatorModelId ⊕ translatorModelVersionSha256? ⊕ translationMode? ⊕ domainSpecialization? ⊕ qaScores? ⊕ postEditorDid? ⊕ certifications? ⊕ translationMemoryRef? ⊕ regulatoryContext? ⊕ translatedAt ⊕ translatorDid ⊕ ipAttestationEventId?). Verify against the publicKey published in the translatorDid's JWKS. RFC 8037 + JCS (RFC 8785). ⚠ INTEGRITY GAP (aa-824-P0-1, cycle 848 honest disclosure): `chain.*` and `extra` are presently OUTSIDE this signature pre-image. A wire-path or post-hoc rewrite of `chain.parentSha256` / `chain.parentKind` / `chain.parentAttestationId` does NOT invalidate this `signature`. Offline verifiers using `signature`+`publicKey` (the documented embedded-verification path) MUST treat `chain.*` as ADVISORY pointer-shape, NOT cryptographically bound to this attestation. For full-integrity verification including chain pointers, fetch the W3C DataIntegrityProof envelope from /credentials/<sha>/v1 and verify against the proof.cryptosuite=eddsa-jcs-2022 signature (which signs the FULL canonical-JSON body including chain). Cycle-484 added the chain block; cycles 778-784 swept it; the signature pre-image was not re-derived. Migration target: v2 schema slug ($id pin per cycle-462). See cycles 825-829 (5/5 wedge-tier ring) + cycle 830 (verification-recipe.md dual-path teaching) for the canonical write-up; cycle 848 fans this disclosure to the 12 remaining chain-bearing leaf schemas in one batch.

# properties.publicKey.description
Ed25519 public key (32 raw bytes = 64 hex) corresponding to the signature.

# properties.affectsIdentifiableIndividual.description
Cycle 538 (regulatory-compliance RC-480-F9 fan-out): flag signaling the translation includes speech, written content, or personal information attributable to an identifiable real person (deposition transcripts, voice translation, signed legal correspondence, medical records). When true, GDPR Article 22 + EU AI Act Article 50 data-subject-rights obligations attach. Defaults to absent (treated as false for back-compat). Translation of public broadcasts, marketing copy, or anonymized corpora doesn't require the flag.

# properties.dataSubjectSafeguards.description
Cycle 538 (RC-480-F9 fan-out from cycle 487): same-shape mirror of ip.governance.compliance.v1 (cycle 390) + ip.synthetic.media.attestation.v1 (cycle 487). Required when affectsIdentifiableIndividual=true.

# properties.dataSubjectSafeguards.properties.appealUrl.description
HTTPS URL where a translated-content subject submits an appeal (e.g., request a corrected translation, withdraw consent for processing). GDPR Art 22(3).

# properties.dataSubjectSafeguards.properties.humanReviewerDid.description
DID of the human reviewer (or team). did:web for institutional teams, did:key for individuals.

# properties.dataSubjectSafeguards.properties.complaintIntakeUrl.description
HTTPS URL for filing a complaint about the translation policy. GDPR Art 77.

# properties.dataSubjectSafeguards.properties.automatedDecisionScope.description
Honest classification of how the translation affects the subject. Same enum as ip.governance.compliance.v1.

# properties.dataSubjectSafeguards.properties.retentionPeriodDays.description
How long the operator retains the translation + provenance. GDPR Art 5(1)(e).

# allOf[].$comment
Cycle 538 (RC-480-F9 fan-out): when affectsIdentifiableIndividual=true the translation contains content attributable to an identifiable real person, attaching GDPR Article 22 + EU AI Act Article 50. dataSubjectSafeguards becomes REQUIRED. Back-compat: pre-cycle-538 records continue to validate without the flag.