01Fichier de trace
AttestScope Protocol · version 0.1.1. Un fichier JSON (JavaScript Object Notation) par trace, encodé en UTF-8 (Unicode Transformation Format, 8 bits), nommé <Issuer name> <record_id>.json (chez Riftveil : Riftveil RV-261026-143205-7K3M-Q9XD-2B8F.json).
{
"format": "attestscope",
"version": "0.1.1",
"record_id": "RV-261026-143205-7K3M-Q9XD-2B8F",
"issuer": "RV",
"origin": "generated",
"issued_at": "2026-10-26T14:32:05Z",
"assessment": { "protocol": "1.0.0", "model": "claude-sonnet-5", "assistant": "riftveil.ai", "language": "en" },
"content": { "project": "…", "context": "…", "report": "…" },
"proof": {
"fingerprint": { "alg": "sha-256", "profile": "riftveil-report-v1", "value": "…64 hex…" },
"seal": { "value": "S1-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX", "verify": "https://riftveil.ai/api/verify" },
"signature": { "alg": "ed25519", "key": "ed25519-1", "value": "…86 base64url characters…", "keys": "https://riftveil.ai/keys.json" }
},
"notice": "…"
}
| Champ | Règle |
|---|---|
format, version |
"attestscope" et "0.1.1". Les fichiers de la version 0.1 portent "assay-record" et "0.1-draft" ; ils restent valides et chaque vérificateur DOIT encore les lire. |
issued_at |
DOIT reprendre la date et l’heure du record_id. Un vérificateur DOIT rejeter un fichier où elles diffèrent, ainsi qu’une trace dont l’identifiant est daté dans le futur. |
origin |
generated (l’émetteur a produit le rapport) ou registered (rapport produit ailleurs, dont seule l’empreinte a été envoyée). Le sceau et la signature couvrent l’origine par son libellé. |
assessment |
Avec riftveil-report-v1, protocol et model entrent dans l’empreinte. Avec riftveil-content-v1, c’est assistant qui y entre. language est donné à titre d’information. |
content |
Les textes exacts. Ils restent chez la personne qui détient le fichier ; l’émetteur ne garde rien. |
proof.fingerprint |
Recalculée par chaque vérificateur à partir de content (et des champs ci-dessus). On ne se fie jamais à la valeur écrite. |
proof.seal |
Contrôlé par le point d’accès de l’émetteur, au regard de l’empreinte recalculée. |
proof.signature |
OBLIGATOIRE dans la version 0.1.1. Signature Ed25519 de l’émetteur, calculée sur le même message que le sceau. Chacun peut la contrôler avec la clé publique publiée de l’émetteur, sans rien lui demander. Voir Identifiant de trace, sceau et signature. |
proof.timestamps |
FACULTATIF. Une liste d’horodatages portant sur le même message, délivrés par des autorités d’horodatage (RFC 3161). Voir Identifiant de trace, sceau et signature. |
notice |
Informatif. Aucune empreinte ne le couvre. |
Deux formes d’une même trace
| Forme | Contient | Gardée par | Sert à |
|---|---|---|---|
| Fichier de trace | Tout ce qui précède, content compris |
La personne qui signe, avec le PDF (Portable Document Format), dans le dossier de décision | Vérifier qu’un texte est intact |
| Entrée de registre (prévue, version 0.2) | Tout, sauf content |
Un registre : Microsoft 365, les serveurs du client ou un hébergement (prévu) | Compter, suivre, auditer la structure |
La version 0.1.1 définit le fichier de trace ; l’entrée de registre est prévue pour la version 0.2.
Un registre fonctionne sans le projet : l’empreinte lui permet de prouver à quel contenu une trace se rapporte, sans détenir ce contenu. Qui détient le fichier de trace détient le contenu : partagez-le comme vous partageriez le rapport.
Suivi et décision (follow_up, facultatif)
Rempli après le rapport par la personne qui décide, jamais par un modèle. Il a sa propre empreinte, son propre sceau et sa propre signature : on peut donc l’ajouter sans toucher à la preuve de l’évaluation.
"follow_up": {
"profile": "riftveil-decision-v2",
"verified_by": { "last_name": "…", "first_name": "…", "role": "…" },
"checked": "What the person checked themselves",
"questions": [ { "n": 1, "question": "…", "suggested_owner": "CFO", "assigned_to": "…" } ],
"decision": "proceed | conditions | stop",
"conditions": "…",
"place": "…",
"signature": { "method": "drawn | typed", "typed": "…", "image": "data:image/png;base64,…" },
"final_document": { "name": "Board memo.pdf", "size": 284113, "sha256": "…64 hex…" },
"previous": { "profile": "riftveil-decision-v2", "…": "the follow-up this one completes, with its proof" },
"decided_at": "2026-10-26T16:05:12Z",
"proof": {
"fingerprint": { "alg": "sha-256", "profile": "riftveil-decision-v2", "value": "…64 hex…" },
"seal": { "value": "S1-…", "sealed_at": "2026-10-26T16:05:12Z", "verify": "https://riftveil.ai/api/verify" },
"signature": { "alg": "ed25519", "key": "ed25519-1", "value": "…", "keys": "https://riftveil.ai/keys.json" }
}
}
| Champ | Règle |
|---|---|
profile |
riftveil-decision-v2 dans un fichier 0.1.1. riftveil-decision-v1 (version 0.1) n’apparaît dans un fichier 0.1.1 que sous previous, lorsqu’un fichier 0.1 a été complété. |
| Entrée de l’empreinte | riftveil-decision-v2 : JSON.stringify({ v: 2, id, report_fingerprint, verified_by, checked, questions, decision, conditions, place, signature, final_document, previous }), avec tous les champs présents : chaîne vide pour un champ non rempli, final_document sous la forme { name: "", size: 0, sha256: "" } quand il est absent, previous sous la forme { fingerprint, seal, sealed_at } du suivi qu’il complète, ou trois chaînes vides. report_fingerprint est l’empreinte recalculée de l’évaluation : un suivi appartient à un seul rapport. riftveil-decision-v1 : le même objet sans final_document ni previous, avec v: 1. |
signature |
Signature électronique simple, apposée à l’écran par la personne qui décide. À ne pas confondre avec proof.signature, la signature de l’émetteur. Le sceau et la signature de l’émetteur prouvent à quel moment le suivi existait et qu’il n’a pas changé depuis, jamais qui l’a écrit. |
final_document |
FACULTATIF. Le document qui sort réellement après la décision (une note, un contrat, une présentation) : son nom de fichier, sa taille en octets et le SHA-256 (Secure Hash Algorithm, 256 bits) de ses octets, calculé sur l’appareil de la personne qui signe. Le document lui-même n’est jamais envoyé. Un vérificateur peut alors dire si un document donné est bien celui sur lequel porte la décision. |
previous |
FACULTATIF. Quand une personne complète plus tard un suivi scellé (réponses aux questions, conditions remplies), le nouveau suivi contient l’ancien en entier, avec sa preuve, et son empreinte couvre l’empreinte, le sceau et l’heure du sceau de l’ancien. Chaque suivi antérieur garde sa propre preuve. Le suivi antérieur DOIT être scellé, et scellé strictement avant celui qui le complète. Un fichier NE DEVRAIT PAS contenir plus de 20 suivis antérieurs. |
decided_at |
Informatif, fixé par l’appareil de la personne qui signe. Non couvert par l’empreinte ni par le sceau : l’heure prouvée est proof.seal.sealed_at. |
proof.seal |
Émis par l’émetteur sur l’empreinte du suivi et l’heure de son horloge (sealed_at) ; il exige un sceau valide de l’évaluation. Seules des empreintes sont envoyées : les noms, la décision, la signature et les documents restent sur l’appareil de la personne qui signe. |
proof.signature |
OBLIGATOIRE quand le suivi d’un fichier 0.1.1 est scellé. Signature Ed25519 de l’émetteur, calculée sur le même message que le sceau du suivi. |
| Suivi non scellé | Permis. Un vérificateur l’affiche comme présent mais non scellé : rien ne prouve alors quand il a été écrit, ni qu’il est intact. |
| Qui l’a écrit | Non prouvé. Toute personne qui détient le fichier de trace peut sceller un suivi pour cette trace, sous n’importe quel nom, et un même rapport peut avoir plusieurs suivis. Le sceau et la signature de l’émetteur prouvent à quel moment un suivi existait et qu’il n’a pas changé depuis ; l’identité exige le compte de l’organisation ou une signature qualifiée (prévus). Un vérificateur NE DOIT PAS présenter comme vérifié le nom inscrit dans un suivi. |
Les versions suivantes ajouteront outcome (ce qu’est devenue la décision) et readers[] (la chaîne des seconds lecteurs), chacun avec sa propre empreinte.
02Identifiant de trace, sceau et signature
AttestScope Protocol · version 0.1.1 · normatif pour toute implémentation, Riftveil comprise.
Les mots clés DOIT, NE DOIT PAS, DEVRAIT et PEUT s’emploient au sens de la RFC 2119.
1. Format
<ISSUER>-<YYMMDD>-<HHMMSS>-<RRRR>-<RRRR>-<RRRR>
RV-261026-143205-7K3M-Q9XD-2B8F
| Partie | Règle |
|---|---|
ISSUER |
2 à 6 lettres de A à Z ; le préfixe est enregistré dans ISSUERS.md. RV désigne Riftveil. Une implémentation NE DOIT PAS utiliser un préfixe qu’elle n’a pas enregistré. XT est réservé aux tests et NE DOIT PAS figurer dans une trace utilisée pour une décision. |
YYMMDD |
Date UTC (temps universel coordonné) à laquelle l’identifiant est attribué (années 2000 à 2099). |
HHMMSS |
Heure UTC à laquelle l’identifiant est attribué, à la seconde près, prise sur une horloge synchronisée avec une source d’heure publique. |
RRRR-RRRR-RRRR |
60 bits tirés d’un générateur aléatoire cryptographiquement sûr, écrits en base32 de Crockford (0-9 A-Z sans I L O U) : 12 caractères en 3 groupes de 4. |
Motif : ^[A-Z]{2,6}-\d{6}-\d{6}-[0-9A-HJKMNP-TV-Z]{4}-[0-9A-HJKMNP-TV-Z]{4}-[0-9A-HJKMNP-TV-Z]{4}$
2. Attribution
- L’identifiant DOIT être attribué par le code, au moment où la trace est créée.
- L’identifiant NE DOIT PAS être produit, suggéré ou complété par un modèle de langage. Les modèles répètent des valeurs « aléatoires » : un identifiant écrit par un modèle n’est pas unique.
- L’identifiant NE DOIT PAS être dérivé du contenu (un hachage du projet ou du rapport) : deux projets identiques, évalués deux fois, donnent deux traces.
- Un identifiant NE DOIT PAS être réutilisé, même pour une nouvelle version de la même trace. Une nouvelle version reçoit un nouvel identifiant et renvoie à la précédente.
- Les outils qui lisent un identifiant DOIVENT accepter les minuscules et les espaces ; la forme canonique est en majuscules, avec des traits d’union.
3. Pourquoi les doublons sont exclus en pratique
- Deux émetteurs produisent toujours des identifiants distincts : leurs préfixes diffèrent.
- Chez un même émetteur, deux identifiants ne peuvent coïncider que s’ils sont attribués dans la même seconde et tirent les mêmes 60 bits aléatoires (1 chance sur 1,15 × 10¹⁸ pour chaque paire).
- À 1 million de traces par jour pour un émetteur, la probabilité d’un seul doublon est d’environ 1 sur 500 millions par an. À 1 000 traces par seconde, elle est d’environ 1 sur 70 000 par an.
- C’est une probabilité, pas une impossibilité mathématique. Un émetteur qui a besoin d’une unicité absolue PEUT en outre comparer chaque nouvel identifiant à son propre registre et refaire un tirage s’il l’y trouve ; il NE DOIT PAS raccourcir la partie aléatoire pour le faire.
4. Sceau
Un émetteur DOIT sceller chaque trace de version 0.1.1, afin de pouvoir confirmer, sans rien conserver, qu’il a émis cet identifiant pour ce contenu. (En version 0.1, le sceau était recommandé.)
- Empreinte. SHA-256, en hexadécimal, du contenu que l’émetteur définit comme contenu de la trace. Cette définition (le profil) DOIT être publiée et DOIT inclure l’identifiant chaque fois que l’émetteur a produit lui-même le contenu.
- Message.
"<label>|" + id + "|" + fingerprint, en UTF-8. Pour un suivi :"<label>|" + id + "|" + fingerprint + "|" + sealed_at. - Sceau.
S<k>-suivi des 160 premiers bits deHMAC-SHA256(key_k, message)(HMAC : Hash-based Message Authentication Code, code d’authentification de message à clé secrète), en base32 de Crockford, 8 groupes de 4.kest le numéro de la clé ; une nouvelle clé reçoit un nouveau numéro, et les anciennes clés restent disponibles pour la vérification. - Un libellé par origine. Un émetteur qui produit des rapports et enregistre aussi des rapports produits ailleurs DOIT utiliser un libellé différent pour chaque origine, afin qu’un sceau ne puisse jamais être présenté comme relevant de l’autre origine. Le suivi a son propre libellé.
- Clé. Elle DOIT rester secrète chez l’émetteur, dans un coffre de secrets, jamais dans le code, dans un fichier partagé ou dans une conversation.
- Point d’accès de vérification. L’émetteur DOIT en publier un qui, pour
{ id, fingerprint, seal }, répond « valide » ou « non valide » et indique l’origine, et qui ne conserve rien.
Un sceau valide montre que l’émetteur a attribué l’identifiant, à l’heure de son horloge, pour cette empreinte et cette origine. Un sceau porte sur la date et l’intégrité ; le fond relève de la personne qui signe.
Portée juridique. Un sceau défini dans cette section est un code calculé par l’émetteur avec une clé secrète. Il montre que l’émetteur a attribué l’identifiant, à l’heure de son horloge, pour cette empreinte et cette origine.
5. Signature
Depuis la version 0.1.1, l’émetteur signe aussi chaque message qu’il scelle, par une signature à clé publique. Seul l’émetteur peut contrôler un sceau ; chacun peut contrôler une signature, avec la clé publique de l’émetteur, sans rien lui demander.
- Algorithme. Ed25519 (RFC 8032), pur, sans pré-hachage.
- Message. Exactement le message du sceau (section 4), octet pour octet, en UTF-8. La signature couvre donc le même identifiant, la même empreinte, la même origine et, pour un suivi, la même heure de sceau.
- Encodage. La signature de 64 octets en base64url (RFC 4648, section 5), sans remplissage : 86 caractères. Seul l’encodage canonique est valide : un vérificateur DOIT rejeter une valeur dont le dernier caractère porte des bits inutilisés non nuls. Ni la signature ni le sceau ne peuvent servir d’identifiant.
- Champ.
proof.signaturedans la trace,follow_up.proof.signaturedans le suivi :{ "alg": "ed25519", "key": "<key id>", "value": "<base64url>", "keys": "<URL of the key list>" }.keysest donné à titre d’information : n’importe qui peut écrire un fichier, un vérificateur NE DOIT donc pas s’en servir pour choisir la liste des clés (section 6). - Obligatoire. Un fichier 0.1.1 DOIT contenir
proof.signature, et un suivi scellé d’un fichier 0.1.1 DOIT contenirfollow_up.proof.signature. Un émetteur qui n’a pas de clé de signature écrit des fichiers de version 0.1. - Clé privée. Elle DOIT être créée et gardée par l’émetteur dans un coffre de secrets, jamais dans le code, dans un fichier partagé ou dans une conversation. Elle NE DOIT PAS être la clé de scellement. Elle DOIT être accessible au seul service de production de l’émetteur, jamais aux déploiements de test ou de prévisualisation accessibles à d’autres ; un émetteur DEVRAIT aussi réserver la signature au nom d’hôte de sa production.
- Signer plus tard (contresignature). Un émetteur PEUT signer, plus tard, le message d’un rapport dont il vient de contrôler le sceau, seulement quand la trace est datée d’avant le moment où l’émetteur a commencé à signer (
valid_fromde sa première clé). Cela permet à une trace 0.1 de devenir une trace 0.1.1 lorsqu’un suivi est ajouté. Un vérificateur DOIT afficher une telle signature comme faite après la date de la trace. Un émetteur NE DOIT PAS signer plus tard un rapport daté d’après le moment où il a commencé à signer : une telle trace porte déjà sa signature, si bien qu’une clé de scellement volée ne permet pas d’obtenir pour elle de nouvelles signatures.
Une signature valide montre que le détenteur de la clé privée de l’émetteur a signé ce message. Elle n’en dit ni plus ni moins que le sceau : elle porte sur la date et l’intégrité, jamais sur le fond.
6. Clés publiques
L’émetteur DOIT publier ses clés publiques dans une liste des clés, à une adresse fixe enregistrée avec son préfixe dans ISSUERS.md, et DEVRAIT publier la même liste à au moins deux autres endroits qu’il n’héberge pas sur le même serveur. Un vérificateur DOIT prendre la liste des clés à l’adresse enregistrée pour le préfixe du record_id (ou dans une copie de cette liste à laquelle il se fie déjà), jamais dans le fichier de trace. Riftveil : https://riftveil.ai/keys.json, keys/riftveil.json dans le dépôt GitHub de la spécification AttestScope, et https://attestscope.ai/keys/riftveil.json.
{
"issuer": "RV",
"updated": "2026-10-26",
"rules": "…",
"keys": [
{
"id": "ed25519-1",
"alg": "ed25519",
"public_key": "…43 base64url characters…",
"status": "active",
"valid_from": "2026-10-26",
"valid_until": null,
"compromised_at": null
}
]
}
| Champ | Règle |
|---|---|
id |
ed25519-<n>, numérotée comme les clés de scellement. Un numéro n’est jamais réutilisé. |
public_key |
La clé publique de 32 octets, en base64url sans remplissage. |
status |
active (signe aujourd’hui), retired (ne signe plus ; ses signatures restent valides) ou compromised. |
valid_from, valid_until |
Dates (UTC) entre lesquelles la clé a signé. valid_until vaut null tant que la clé est active. |
compromised_at |
Pour une clé compromise : la date à partir de laquelle sa partie privée a pu être connue de quelqu’un d’autre. |
issuer, updated, rules |
Le préfixe de l’émetteur, la date de la dernière modification, et les règles de la liste en langage courant. À titre d’information. |
Règles de la liste :
- Aucune clé n’est jamais retirée de la liste. Une clé
retiredreste dans la liste, avec ses dates. - Une clé compromise reste dans la liste, marquée
compromisedet datée. Un vérificateur NE DOIT PAS signaler comme valide, à elle seule, une signature faite avec elle, quelle que soit sa date ; la trace a alors besoin d’autres éléments de preuve (un horodatage, un registre). - Un vérificateur DOIT indiquer quand l’heure d’une trace (l’heure de son identifiant, ou
sealed_atpour un suivi) est antérieure auvalid_fromde la clé qui l’a signée (signature faite plus tard, voir section 5), et NE DOIT PAS signaler comme valide une signature portant sur une trace datée d’aprèsvalid_until. - Un vérificateur NE DOIT PAS accepter comme trace valide de cet émetteur un fichier non signé (version 0.1) dont l’identifiant est daté d’après le moment où l’émetteur a commencé à signer : sa signature a été retirée.
- Les trois copies publiées DOIVENT être identiques. Un vérificateur qui constate une différence NE DOIT PAS se fier à la liste.
- L’émetteur continue de contrôler ses sceaux HMAC avec chaque clé de scellement pendant au moins douze mois après avoir annoncé qu’il cessera de les contrôler.
7. Horodatages
proof.timestamps (et follow_up.proof.timestamps) est une liste FACULTATIVE. Chaque entrée est un horodatage portant sur le SHA-256 du même message que le sceau et la signature :
"timestamps": [
{ "type": "rfc3161", "tsa": "Name of the authority", "imprint": "…64 hex…", "token": "…base64 of the DER TimeStampToken…" }
]
| Champ | Règle |
|---|---|
type |
rfc3161. D’autres types PEUVENT être définis plus tard. |
tsa |
Nom de l’autorité d’horodatage, à titre d’information. |
imprint |
SHA-256, en hexadécimal, du message (section 4). Il DOIT être égal à l’empreinte de message figurant dans le jeton. |
token |
Le TimeStampToken de la RFC 3161, au format DER (Distinguished Encoding Rules), en base64. |
Un horodatage prouve la date indépendamment de l’émetteur. Un horodatage délivré par un prestataire de services de confiance qualifié, dans le cadre d’un service d’horodatage qualifié, est un horodatage électronique qualifié au sens du règlement (UE) n° 910/2014 (règlement eIDAS, sur l’identification électronique et les services de confiance). Une organisation PEUT utiliser sa propre autorité d’horodatage. Plusieurs horodatages PEUVENT être ajoutés à la même trace. Chez Riftveil, les horodatages par une autorité tierce sont prévus en option avec la traçabilité AttestScope ; Riftveil n’en ajoute aucun aujourd’hui. La date et l’heure de l’horloge de l’émetteur, scellées et signées (issued_at par l’identifiant, sealed_at), constituent l’horodatage de l’émetteur (chez Riftveil : l’horodatage Riftveil).
8. Profils Riftveil
| Origine | Libellé | Profil | Entrée de l’empreinte |
|---|---|---|---|
| généré sur riftveil.ai | riftveil-seal-v1 |
riftveil-report-v1 |
JSON.stringify({ v: 1, id, protocol, model, project, context, report }) |
| produit ailleurs, enregistré | riftveil-register-v1 |
riftveil-content-v1 |
JSON.stringify({ v: 1, assistant, project, context, report }) |
| suivi et décision (0.1.1) | riftveil-decision-v1 |
riftveil-decision-v2 |
voir record-file.md |
| suivi et décision (0.1) | riftveil-decision-v1 |
riftveil-decision-v1 |
voir record-file.md |
Le libellé du suivi reste riftveil-decision-v1 pour les deux profils : la version du profil figure dans l’entrée de l’empreinte (v). Les chaînes sont reprises exactement telles qu’elles ont été envoyées au modèle et renvoyées par lui (généré), ou telles que la personne qui enregistre les a collées (enregistré). Vérification : POST https://riftveil.ai/api/verify. Clés : https://riftveil.ai/keys.json.
9. Fichier de trace
Le fichier de trace est la trace elle-même, en JSON : voir record-file.md. Une trace se vérifie sur son fichier de trace, jamais sur un imprimé, une capture d’écran ou un PDF seul : l’identifiant, l’empreinte, le sceau et la signature peuvent être recopiés sur un document modifié, alors que toute modification du texte d’un fichier de trace fait échouer le contrôle. Voir verification.md.
03Vérification
La règle
Une trace se vérifie sur son fichier de trace, jamais sur un imprimé, une capture d’écran ou un PDF seul.
- Contrôler la forme :
issued_atreprend l’heure durecord_id, l’identifiant n’est pas daté dans le futur, chaque champ de texte est une chaîne. Sinon : non conforme. Recalculer l’empreinte à partir du contenu du fichier de trace, selon son profil. - Si elle diffère de l’empreinte écrite dans le fichier : contenu modifié. Arrêter.
- Signature (version 0.1.1). Prendre la liste des clés de l’émetteur à l’adresse enregistrée pour le préfixe du
record_id(ISSUERS.md; Riftveil :https://riftveil.ai/keys.json), jamais dansproof.signature.keys, qui est écrit dans le fichier. Trouver la clé nommée parproof.signature.key, et contrôler la signature Ed25519 du message du sceau, construit à partir de l’empreinte recalculée et de l’origine qu’annonce le fichier. Signature non valide, absente, ou faite avec une clé absente de la liste : signature non valide. Faite avec une clé marquéecompromised: clé compromise, non valide à elle seule. Faite avec une clé dontvalid_fromest postérieur à la date de la trace : valide, affichée comme signée plus tard (section 5 de Identifiant de trace, sceau et signature). Fichier de version 0.1 (sans signature) dont l’identifiant est daté d’après le moment où l’émetteur a commencé à signer : signature retirée, non valide. Cette étape n’attend la réponse de personne : l’émetteur n’est pas interrogé. - Sceau. Envoyer
{ id, fingerprint (recomputed), seal }au point d’accès de l’émetteur :fingerprinty est l’empreinte recalculée. Si le sceau n’est pas valide : non émis. S’il est valide pour une autre origine que celle qu’annonce le fichier : origine falsifiée. Arrêter. - Sinon : valide. Afficher le contenu du fichier et demander à la personne de le comparer avec le document qu’on lui a remis. S’ils diffèrent, le document a été modifié, quoi qu’il affirme.
- Si le fichier contient un
follow_up: recalculer son empreinte (elle inclut l’empreinte du rapport recalculée à l’étape 1). Différente : suivi modifié. Sans sceau : suivi présent, non scellé. Sinon, contrôler sa signature comme à l’étape 3, sur le message du suivi (avecsealed_at), et l’envoyer avec la requête de l’étape 4, sous la formedecision: { fingerprint, seal, sealedAt }; la réponse ajoutedecision: { valid, sealedAt }. - Si le suivi contient
previous: vérifier chaque suivi antérieur de la même façon, tout au long de la chaîne, signature comprise quand c’est un suivi 0.1.1. Un suivi antérieur modifié, non valide, mal signé, ou non scellé strictement avant celui qui le complète est signalé comme tel ; le suivi qui le complète reste valide, puisque son empreinte ne couvre que la preuve du suivi antérieur. Un vérificateur PEUT s’arrêter après 20 suivis antérieurs et signaler le fichier comme non conforme. - Si le suivi contient
final_document: quand une personne présente un document, calculer le SHA-256 de ses octets sur son appareil et le comparer avecfinal_document.sha256. Égaux : c’est le document sur lequel porte la décision. Différents : ce n’est pas le document sur lequel porte la décision.
Les étapes 3 et 4 répondent à la même question de deux façons : la signature avec la clé publique, par n’importe qui ; le sceau par l’émetteur. Un vérificateur sans accès réseau à l’émetteur peut tout de même contrôler la signature, avec une copie de la liste des clés.
Contrôler les trois valeurs seules (identifiant, empreinte, sceau) prouve seulement qu’elles vont ensemble, et non qu’un texte donné est la trace.
Points d’accès de Riftveil
| Point d’accès | Corps de la requête | Réponse |
|---|---|---|
POST https://riftveil.ai/api/verify |
{ id, fingerprint, seal, signature?, decision? } |
{ valid: true, id, issuedAt, origin, signature?, decision? } ou { valid: false } ; signature est { valid, key, status?, reason? }, et une clé marquée compromise donne toujours valid: false |
POST https://riftveil.ai/api/register |
{ fingerprint, profile: "riftveil-content-v1" } |
{ id, seal, signature, issuedAt, origin: "registered", profile } |
POST https://riftveil.ai/api/decide |
{ id, report_fingerprint, report_seal, fingerprint } |
{ seal, sealedAt, origin, signature, report_signature } |
GET https://riftveil.ai/keys.json |
La liste des clés (section 6 de Identifiant de trace, sceau et signature) |
/api/verify accepte les requêtes de tout site (CORS : Cross-Origin Resource Sharing, partage de ressources entre origines), ne reçoit que des empreintes et ne conserve rien ; si on lui donne signature: { key, value } (et decision.signature), il contrôle aussi les signatures avec les clés publiées, par commodité. /api/register et /api/decide s’utilisent depuis les pages de riftveil.ai, derrière un contrôle anti-robots ; eux aussi ne reçoivent que des empreintes, et ne gardent qu’un compteur quotidien par adresse IP (Internet Protocol) hachée. report_signature est la signature du message du sceau du rapport : elle permet de compléter une trace 0.1, ou une trace enregistrée, pour en faire une trace 0.1.1. https://riftveil.ai/issuers.json donne la liste des préfixes enregistrés.
Pages et module de vérification
https://riftveil.ai/verify.html(en français :/fr/verify.html) : vérification par le fichier de trace, ou par les trois valeurs, avec un avertissement. La signature est contrôlée dans le navigateur avec la clé publique ; on peut y comparer un document final ; « Compléter le suivi » rouvre la trace pour ajouter un suivi qui complète le précédent.https://riftveil.ai/register.html(en français :/fr/register.html) : enregistrement d’un rapport produit ailleurs ; l’empreinte est calculée dans le navigateur, puis le fichier de trace se télécharge ; le suivi peut ensuite être rempli et scellé, comme pour un rapport généré sur riftveil.ai.- Module de vérification pour n’importe quelle page (il vérifie l’évaluation, sa signature, ainsi que le sceau et la signature du suivi ; les suivis antérieurs et le suivi lui-même s’affichent sur riftveil.ai/verify, qui est le vérificateur complet) :
<div data-riftveil-verify data-lang="fr"></div>
<script src="https://riftveil.ai/embed/verify.js" defer></script>
La politique de sécurité du contenu (en-tête Content-Security-Policy) de la page hôte doit autoriser script-src et connect-src https://riftveil.ai.
Ce qui reste possible, et comment y répondre
| Risque | État |
|---|---|
| Texte modifié dans un PDF | Détecté quand on utilise le fichier de trace ; non détecté sur un PDF seul. Un cachet électronique qualifié sur le PDF est prévu. |
| Document modifié après la décision | Détecté quand le suivi désigne un document final et que ce document est présenté pour comparaison. |
| Identifiant recopié d’une autre trace | Détecté : le fichier de trace montre le texte de l’autre trace. |
| Rapport enregistré présenté comme généré | Détecté : un libellé par origine, dans le sceau et dans la signature. |
| Projet inventé, évalué pour de vrai | Non détectable, et ce n’est pas le but : le sceau prouve la provenance et l’intégrité, jamais la vérité. |
| Vol de la clé de scellement | Clé dans un coffre de secrets ; rotation par numéro de clé, et les sceaux antérieurs restent valides. La clé de signature est une clé distincte. |
| Vol de la clé de signature | Clé dans un coffre de secrets, numérotée ; la clé est marquée compromise et datée dans la liste publiée, et n’en est jamais retirée. |
| Émetteur indisponible | La signature reste vérifiable avec la liste des clés publiée. |
| Suivi ajouté par une autre personne que celle qui est nommée | Non empêché : le sceau prouve quand, pas qui. Le nom est affiché comme déclaré, jamais comme vérifié. |
| Signature retirée pour passer pour un fichier 0.1 | Détecté : un fichier non signé daté d’après le moment où l’émetteur a commencé à signer est rejeté. |
| Personne ne vérifie | Organisationnel : rendre le fichier de trace obligatoire dans le dossier de décision. |
04Conformité
AttestScope Protocol · version 0.1.1. Les mots clés DOIT, NE DOIT PAS, DEVRAIT et PEUT s’emploient au sens de la RFC 2119.
Une déclaration de conformité nomme le rôle et la version : « écrit des fichiers de trace AttestScope 0.1.1 », « vérifie des fichiers de trace AttestScope 0.1.1 », « émet des traces AttestScope 0.1.1 sous le préfixe XX ». Une déclaration de conformité à cette spécification ne porte que sur le format. L’attestation que porte un AttestScope Record est celle de la personne qui signe, sur la portée de sa propre revue.
Outil d’écriture
Un outil qui écrit des fichiers de trace :
- DOIT produire du JSON en UTF-8, valide selon
schema/attestscope-0.1.1.schema.json. - DOIT copier les textes dans
contentexactement tels qu’ils ont été évalués, envoyés et renvoyés, sans rien en retrancher, sans les remettre en forme et sans les traduire. - DOIT calculer
proof.fingerprint.valueà partir de ces textes exacts, avec le profil qu’il nomme, et renseigner les champs que ce profil exige :assessment.protocoletassessment.modelpourriftveil-report-v1,assessment.assistantpourriftveil-content-v1. - NE DOIT PAS laisser un modèle de langage écrire, suggérer ou compléter le
record_id, l’empreinte, le sceau, la signature ni aucun champ defollow_up. - DOIT laisser
follow_upabsent, ou avec tous ses champs vides, jusqu’à ce qu’une personne le remplisse. - DOIT calculer l’empreinte d’un document final sur l’appareil de la personne qui signe, et NE DOIT PAS envoyer le document.
- Quand une personne complète un suivi scellé, DOIT conserver le suivi antérieur en entier sous
previous, avec sa preuve, et NE DOIT PAS le modifier. - DEVRAIT nommer le fichier
<Issuer name> <record_id>.json.
Émetteur
Un émetteur attribue les identifiants, pose les sceaux et signe :
- DOIT utiliser un préfixe enregistré dans ISSUERS, et NE DOIT PAS émettre de traces sous
XTpour de vraies décisions. - DOIT attribuer les identifiants par le code, au format défini dans Identifiant de trace, sceau et signature, à partir d’une horloge synchronisée avec une source d’heure publique.
- DOIT garder ses clés de scellement et ses clés de signature dans un coffre de secrets, comme des clés distinctes, les numéroter, et garder disponibles pour la vérification les clés de scellement qui ne servent plus.
- DOIT utiliser un libellé par origine, et un libellé pour le suivi.
- DOIT signer chaque message qu’il scelle dans une trace 0.1.1, avec la clé privée d’une clé active de sa liste publiée.
- DOIT publier sa liste des clés à l’adresse indiquée dans ses signatures, la garder identique partout où elle est publiée, ne jamais en retirer de clé, et marquer et dater une clé compromise.
- DOIT publier un point d’accès de vérification qui, à partir des seules empreintes, répond « valide » ou « non valide », indique l’origine et, pour un suivi, l’heure du sceau, et qui ne conserve rien.
- NE DOIT PAS conserver les textes, une liste d’identifiants ou une liste d’empreintes pour les besoins de la vérification.
- DOIT contrôler le sceau du rapport avant de sceller un suivi.
- DOIT tenir sa clé de signature à l’écart de tout déploiement de test ou de prévisualisation accessible à d’autres, et NE DOIT PAS signer plus tard un rapport daté d’après le moment où il a commencé à signer.
- DEVRAIT limiter la fréquence des scellements, des signatures et des enregistrements, refuser ces opérations quand ses compteurs ne sont pas disponibles, et les protéger contre les abus automatisés.
Vérificateur
Un outil qui vérifie des fichiers de trace :
- DOIT recalculer chaque empreinte à partir du fichier, selon son profil, et NE DOIT PAS se fier à une empreinte telle qu’elle est écrite.
- DOIT signaler « modifié » quand une empreinte recalculée diffère de celle du fichier, et s’arrêter là pour cette partie.
- DOIT contrôler chaque signature d’un fichier 0.1.1 avec la liste des clés publiée de l’émetteur, prise à l’adresse enregistrée pour le préfixe (jamais dans le fichier), DOIT signaler une signature absente comme non valide, et NE DOIT PAS signaler comme valide, à elle seule, une signature faite avec une clé marquée compromise.
- DOIT demander au point d’accès de l’émetteur de contrôler chaque sceau, en n’envoyant que l’identifiant, les empreintes, les sceaux et les heures des sceaux, lorsque l’émetteur est joignable.
- DOIT indiquer l’origine renvoyée par l’émetteur, et signaler « origine falsifiée » quand elle diffère de celle qu’annonce le fichier.
- DOIT vérifier chaque suivi antérieur sous
previouset en signaler le résultat séparément. - DOIT afficher les textes scellés, pour qu’une personne puisse les comparer avec le document qu’on lui a remis.
- DOIT calculer l’empreinte d’un document final présenté sur l’appareil de la personne, et NE DOIT PAS envoyer le document.
- NE DOIT PAS présenter un contrôle de l’identifiant, de l’empreinte et du sceau seuls comme la vérification d’un document.
- DOIT continuer à vérifier les fichiers de version 0.1, qui ne portent aucune signature, et DOIT rejeter un tel fichier dont l’identifiant est daté d’après le moment où l’émetteur a commencé à signer.
- DOIT rejeter un fichier dont
issued_atdiffère de l’heure de sonrecord_id, un encodage de signature non canonique, et une trace dont le préfixe estXTquand elle est présentée pour une décision, et DOIT afficher comme telle une signature faite après la date de la trace. - NE DOIT PAS présenter comme vérifié le nom inscrit dans un suivi.
- DEVRAIT indiquer dans son résultat qu’une trace valide prouve la provenance et l’intégrité, jamais qu’une décision était la bonne.
05Sécurité et vie privée
AttestScope Protocol · version 0.1.1.
Sécurité et vie privée : ce qui est couvert, et ce qui est prévu
Ce que le format couvre
| Risque | Parade | Risque résiduel |
|---|---|---|
| Texte modifié après émission | Empreinte recalculée à partir du fichier par chaque vérificateur | Aucun sur le fichier de trace ; un PDF montré seul ne prouve rien |
| Identifiant ou sceau recopié sur un autre document | La vérification montre les textes scellés sous cet identifiant | Une personne doit comparer les textes avec le document |
| Rapport enregistré présenté comme généré | Un libellé par origine, dans le sceau et dans la signature | Aucun |
| Suivi déplacé vers un autre rapport | Son empreinte inclut celle du rapport | Aucun |
| Suivi modifié après scellement | Sa propre empreinte, son propre sceau et sa propre signature, avec l’heure de l’émetteur | Aucun s’il est scellé ; un suivi non scellé ne prouve rien |
| Suivi antérieur modifié après avoir été complété | Sa preuve reste dans le fichier ; le suivi qui le complète couvre son empreinte, son sceau et l’heure de son sceau | Aucun : le suivi antérieur est signalé comme modifié |
| Document modifié après la décision | final_document.sha256, comparé sur l’appareil de la personne qui lit |
Seulement si le suivi désigne le document et que ce document est présenté |
| Heure du sceau déplacée | L’heure fait partie du message scellé et signé | Aucun |
| Sceau contrefait | HMAC-SHA256 tronqué à 160 bits, clé secrète | Seul l’émetteur peut contrôler un sceau : la signature porte sur le même message |
| Signature contrefaite | Ed25519, clé privée dans un coffre de secrets ; la liste des clés est prise à l’adresse enregistrée pour l’émetteur, jamais dans le fichier | Aucun connu |
| Émetteur injoignable ou disparu | La signature se contrôle avec la liste des clés publiée | La liste doit rester publiée ; elle l’est à trois endroits |
| Clé de scellement volée | Coffre de secrets, clés numérotées, rotation ; clé de signature distincte ; aucune signature faite plus tard pour les traces datées d’après le moment où l’émetteur a commencé à signer | Les sceaux faits avec une clé volée ne se distinguent pas des autres. Les nouvelles traces exigent toujours la clé de signature. Une trace antidatée d’avant le moment où l’émetteur a commencé à signer pourrait recevoir une signature faite plus tard, que les vérificateurs affichent comme faite après la date de la trace |
| Clé de signature volée | Coffre de secrets, clés numérotées ; la clé est marquée compromise et datée, jamais retirée | Les signatures faites avec elle ne prouvent plus rien à elles seules ; il faut alors un horodatage par un tiers, ou un registre |
| Clé de signature utilisée par un déploiement de test | Clé de signature dans l’environnement de production seulement, signature réservée au nom d’hôte de production | Aucun si la règle est respectée |
| Signature retirée (fichier présenté comme 0.1) | Un vérificateur rejette un fichier non signé daté d’après le moment où l’émetteur a commencé à signer | Aucun |
| Suivi ajouté par quelqu’un d’autre | Non empêché : le suivi prouve quand, pas qui | Un vérificateur ne présente jamais le nom comme vérifié ; l’identité exige le compte de l’organisation ou une signature qualifiée (prévus) |
| Scellement en masse par des robots | Contrôle anti-robots, limites quotidiennes par adresse IP et globales, service refusé quand les compteurs ne répondent pas | Les compteurs d’un stockage clé-valeur ne sont pas atomiques ; une courte rafale peut dépasser une limite |
| Prise de contrôle du code ou des comptes de l’émetteur | Authentification forte sur les comptes qui publient le code et les listes des clés ; trois copies de la liste | Un attaquant qui contrôle toutes les copies peut publier une fausse liste ; voir le journal public prévu (0.2) |
Ce qu’il ne couvre pas, par construction
- La vérité du projet ou la qualité de la revue. Un sceau ou une signature prouvent la provenance et l’intégrité, et rien d’autre.
- L’identité de la personne qui signe. Une signature apposée à l’écran est une signature électronique simple ; le sceau et la signature de l’émetteur prouvent à quel moment le suivi existait, pas qui l’a écrit.
- Une date prouvée indépendamment de l’émetteur. L’horloge de l’émetteur est scellée et signée ; un horodatage délivré par une autorité d’horodatage (RFC 3161,
proof.timestamps) prouve la date sans s’appuyer sur l’émetteur.
Vie privée
- Pour la vérification, l’enregistrement et le sceau de décision, l’émetteur ne reçoit que des empreintes, jamais de textes, de noms, de décisions, de signatures ni de documents. Un émetteur qui produit aussi le rapport reçoit les textes pour le rédiger et n’en garde aucun ; le fournisseur du modèle d’IA qu’il emploie peut les garder pour une durée limitée, que la page de confidentialité de l’émetteur indique. Une empreinte SHA-256 ne permet pas de retrouver le texte ; elle permet seulement de confirmer un texte qu’on a déjà, ou qu’on devine.
- L’empreinte d’un document final est calculée sur l’appareil de la personne qui signe ; le document n’est jamais envoyé.
- L’émetteur ne conserve aucun texte, ni aucune liste d’identifiants ou d’empreintes. Il ne garde que des compteurs de limitation de courte durée, indexés sur un hachage de l’adresse IP fait avec une clé secrète qui leur est propre.
- Qui détient un fichier de trace détient les textes, les noms inscrits dans le suivi et le nom du document final. Partagez-le comme vous partageriez le rapport.
- Une entrée de registre sans les textes est prévue, pour les registres qui ne doivent pas détenir le projet.
06Préfixes d’émetteurs enregistrés
Une implémentation qui écrit des traces AttestScope a besoin de son propre préfixe avant sa première trace utilisée pour une décision. Pour en demander un, écrivez à hello@riftveil.ai, en indiquant le préfixe, le nom, un contact, l’adresse URL (Uniform Resource Locator) du point d’accès de vérification et l’adresse URL de la liste des clés. Chaque demande est examinée, et peut être refusée, par exemple si le préfixe prête à confusion avec celui d’un autre émetteur.
| Préfixe | Émetteur | Vérification | Clés | Depuis |
|---|---|---|---|---|
RV |
Riftveil (riftveil.ai) | POST https://riftveil.ai/api/verify |
https://riftveil.ai/keys.json |
2026-09-27 |
XT |
Réservé aux tests, jamais valable pour une décision | aucune | https://attestscope.ai/test-keys.json (clé de test publique) |
2026-09-27 |
07Versions
| Version | Date | Modifications |
|---|---|---|
| 0.1.1 | 2026-10-26 | Signature de l’émetteur : Ed25519 sur le même message que chaque sceau, dans proof.signature et follow_up.proof.signature, obligatoire dans les fichiers 0.1.1 ; liste des clés publiques (keys.json) et ses règles ; vérification sans l’émetteur. proof.timestamps facultatif (horodatages RFC 3161, sous forme de liste). Profil de suivi riftveil-decision-v2 : final_document facultatif (empreinte du document sur lequel porte la décision, calculée sur l’appareil de la personne qui signe) et previous (compléter plus tard un suivi scellé, les suivis antérieurs étant conservés avec leur preuve). Suivi d’un rapport enregistré. format devient "attestscope" et version devient "0.1.1" ; schéma attestscope-0.1.1.schema.json, avec une règle conditionnelle sur les champs qu’exige chaque profil d’empreinte. decided_at précisé comme informatif. Un seul exemple d’illustration (Elena Lambert). Règles de sécurité issues d’une revue avant publication : signature faite plus tard (contresignature) réservée aux traces datées d’avant le moment où l’émetteur a commencé à signer, et affichée comme telle ; issued_at égal à l’heure de l’identifiant ; rejet des fichiers non signés datés d’après le moment où l’émetteur a commencé à signer ; encodage canonique de la signature ; clé de signature tenue à l’écart des déploiements de test et de prévisualisation ; le nom inscrit dans un suivi est déclaré, jamais vérifié. Aucun profil existant ne change : les fichiers 0.1 restent valides. |
| 0.1 | 2026-09-27 | Première version publique : fichier de preuve, identifiant de trace, profils riftveil-report-v1, riftveil-content-v1, riftveil-decision-v1, sceaux HMAC, suivi avec décision, règles de vérification, schéma JSON, vecteurs de test. « Fichier de trace » remplace « fichier de preuve » dans le texte ; les noms de champs ne changent pas. Assay Record était le nom de travail de la version de test. Dans les fichiers de trace, le champ format vaut assay-record et le champ version vaut 0.1-draft. |
Les rapports émis sur riftveil.ai avant le 24 octobre 2026 portent dans assessment.protocol la numérotation de travail 1.3.x du protocole Riftveil (par exemple 1.3.3) ; leur sceau reste vérifiable.
Prévu pour la version 0.2
- Le JSON canonique (RFC 8785) comme entrée d’empreinte, à côté des profils actuels.
- L’entrée de registre : la trace sans
content, et un journal public. - Le suivi constat par constat,
outcome, etreaders[], chacun avec sa propre empreinte. - L’identité de la personne qui décide : le compte de l’organisation, ou une signature électronique qualifiée du suivi.
Règle de compatibilité
Une nouvelle version garde inchangé le calcul de chaque profil existant. Un vérificateur pour la version 0.1.1 vérifie tout fichier de trace 0.1 ; un vérificateur pour la version 0.2 vérifiera tout fichier de trace 0.1 et 0.1.1.
Gouvernance
Riftveil édite le format et en est l’implémentation de référence. Les commentaires s’adressent à hello@riftveil.ai. Les modifications sont publiées dans ce tableau avant de s’appliquer.
08Exemple
Trace d’illustration : le suivi d’Elena Lambert, complété deux jours plus tard avec le document final. Le préfixe XT est réservé aux essais : ses sceaux et ses signatures sont faits avec les clés de test publiques et ne valent jamais pour une décision. Voir sur GitHub · Schéma JSON sur GitHub · Liste des clés de test
{
"format": "attestscope",
"version": "0.1.1",
"record_id": "XT-261026-143205-7K3M-Q9XD-2B8F",
"issuer": "XT",
"origin": "generated",
"issued_at": "2026-10-26T14:32:05Z",
"assessment": {
"protocol": "1.0.0",
"model": "claude-sonnet-5",
"assistant": "riftveil.ai",
"language": "en"
},
"content": {
"project": "We recommend consolidating our three cloud vendors into one five-year contract from Q1 2027. The chosen vendor offers a 22% discount in year one, full migration support and a single point of contact. Savings are estimated at EUR 1.4M over five years.",
"context": "Chief Financial Officer, board decision next month.",
"report": "## Record\n- Triage: CRITICAL · examined: question, answer, reasoning, perspective, applicability\n- Findings: 3, by impact CRITICAL: 1 · HIGH: 2 · MODERATE: 0 · LOW: 0\n- Assumptions: 4 with a named verifier · 0 without\n- Questions: 5 with an owner · 1 without\n- Most useful question: \"What does leaving the contract cost if the price rises after the first year?\"\n- Independence: not stated by the user, to be confirmed by the signer\n\n## 1. Context and triage\nThis project is read as a procurement and finance recommendation for a Chief Financial Officer, intended to inform a five-year vendor commitment at board level. Triage: CRITICAL, because a single five-year contract is hard to undo and the financial commitment is high for the organisation. Examined: question, answer, reasoning, perspective, applicability.\nCriteria: reversibility HIGH · impact scope MODERATE · financial commitment HIGH → two criteria at HIGH or above → CRITICAL.\n\nThe five levels of examination: question (what was actually asked) · answer (what the project says) · reasoning (how it gets there) · perspective (what it did not see) · applicability (what it looks like in the real world). Triage: the project's stakes, LOW, MODERATE, HIGH or CRITICAL, judged on reversibility, impact scope and financial commitment; it sets which levels are examined.\n\nIf this framing does not match your situation, say so, and the triage will be redone.\n\n## 2. What holds up\nThe recommendation names one vendor, one start date and one contract length: each can be checked against the offers. A review of what stands, not an endorsement of its content.\n\n## 3. What deserves scrutiny\n\nNote on reasoning: an AI model does not reason in the human sense; the reasoning checks below test logical consistency, not the process that produced the project.\n\n**Pre-mortem: three plausible causes of failure · Impact: CRITICAL**\nObserved: the memo gives no scenario in which the consolidation fails.\nEffect on the decision: three plausible causes are left unexamined: prices rise after year one, a workload cannot move in time, the single vendor's service degrades with no way out.\nTo check: for each cause, what the contract says and who in the organisation would see it coming.\n\n**Exit cost not quantified · Impact: HIGH**\nObserved: the memo proposes a single five-year contract without quantifying what leaving it would cost.\nEffect on the decision: if the price rises after the first year, that cost weighs on the board's decision.\nTo check: ask procurement for the exit cost of each offer, year by year.\n\n**Prices for years 2 to 5 not given · Impact: HIGH**\nObserved: \"a 22% discount in year one\" supports \"savings are estimated at EUR 1.4M over five years\".\nEffect on the decision: a discount limited to year one says nothing about years two to five, where most of the contract value lies.\nTo check: the price schedule for every year of the contract, in the draft contract itself.\n\n## 4. Assumptions the project relies on\n1. Prices after year one stay close to year one. If they rise, the EUR 1.4M saving does not hold. → Who can verify: procurement, with the full price schedule.\n2. All workloads can move before the current contracts end. If not, two vendors are paid at the same time. → Who can verify: the CIO.\n3. The vendor's migration support covers the work the teams would otherwise do. If not, the internal cost is missing from the saving. → Who can verify: the CIO, with the heads of the teams concerned.\n4. One point of contact is enough for three former vendors' services. If not, service levels drop during the first year. → Who can verify: the head of IT operations.\n\n## 5. Questions before you decide\n1. What does leaving the contract cost if the price rises after the first year? Owner: procurement\n2. What are the prices for years 2 to 5 of each offer? Owner: procurement\n3. Which workloads cannot move before the current contracts end? Owner: CIO\n4. What internal effort does the migration need, beyond the vendor's support? Owner: CIO\n5. Which service levels does the contract guarantee, and what happens if they are missed? Owner: head of IT operations\n6. Who will answer to the board if the saving is not there in year three?\n\nNo verdict. The decision is yours."
},
"proof": {
"fingerprint": {
"alg": "sha-256",
"profile": "riftveil-report-v1",
"value": "44ad2fc8676594a6105c621a93dd051de1648c47253351689c8b7f24f84689d9"
},
"seal": {
"value": "S1-REQ8-RW0G-J013-M23D-C969-73JZ-MF93-1W6J",
"verify": "https://riftveil.ai/api/verify"
},
"signature": {
"alg": "ed25519",
"key": "ed25519-1",
"value": "RLk8n-uArHiModfTXjm3Inw8iWm4zVQAMPYczqz-pRtfVx_Z3vbBmV2hQrsdpme4TCZtanhr_mUfWOttBsPsDQ",
"keys": "https://attestscope.ai/test-keys.json"
}
},
"follow_up": {
"profile": "riftveil-decision-v2",
"verified_by": {
"last_name": "Lambert",
"first_name": "Elena",
"role": "Chief Financial Officer"
},
"checked": "The prices for years 2 to 5 of the three offers, with procurement. Exit-cost analysis received from Daniel Murphy on 28 October and presented to the board: exit capped at six months of fees.",
"questions": [
{
"n": 1,
"question": "What does leaving the contract cost if the price rises after the first year?",
"suggested_owner": "procurement",
"assigned_to": "Daniel Murphy, Head of Procurement"
},
{
"n": 2,
"question": "What are the prices for years 2 to 5 of each offer?",
"suggested_owner": "procurement",
"assigned_to": ""
},
{
"n": 3,
"question": "Which workloads cannot move before the current contracts end?",
"suggested_owner": "CIO",
"assigned_to": ""
},
{
"n": 4,
"question": "What internal effort does the migration need, beyond the vendor's support?",
"suggested_owner": "CIO",
"assigned_to": ""
},
{
"n": 5,
"question": "Which service levels does the contract guarantee, and what happens if they are missed?",
"suggested_owner": "head of IT operations",
"assigned_to": ""
},
{
"n": 6,
"question": "Who will answer to the board if the saving is not there in year three?",
"suggested_owner": "",
"assigned_to": ""
}
],
"decision": "conditions",
"conditions": "Contract signed only after the exit-cost analysis, presented to the board.",
"place": "",
"signature": {
"method": "drawn",
"typed": "",
"image": "data:image/png;base64,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"
},
"final_document": {
"name": "Board memo - cloud contract.pdf",
"size": 103,
"sha256": "2df7e602ebf9f09606a0a9f30bd6ea852065c216793b99f2797707aeb512e54d"
},
"previous": {
"profile": "riftveil-decision-v2",
"verified_by": {
"last_name": "Lambert",
"first_name": "Elena",
"role": "Chief Financial Officer"
},
"checked": "The prices for years 2 to 5 of the three offers, with procurement.",
"questions": [
{
"n": 1,
"question": "What does leaving the contract cost if the price rises after the first year?",
"suggested_owner": "procurement",
"assigned_to": "Daniel Murphy, Head of Procurement"
},
{
"n": 2,
"question": "What are the prices for years 2 to 5 of each offer?",
"suggested_owner": "procurement",
"assigned_to": ""
},
{
"n": 3,
"question": "Which workloads cannot move before the current contracts end?",
"suggested_owner": "CIO",
"assigned_to": ""
},
{
"n": 4,
"question": "What internal effort does the migration need, beyond the vendor's support?",
"suggested_owner": "CIO",
"assigned_to": ""
},
{
"n": 5,
"question": "Which service levels does the contract guarantee, and what happens if they are missed?",
"suggested_owner": "head of IT operations",
"assigned_to": ""
},
{
"n": 6,
"question": "Who will answer to the board if the saving is not there in year three?",
"suggested_owner": "",
"assigned_to": ""
}
],
"decision": "conditions",
"conditions": "Contract signed only after the exit-cost analysis, presented to the board.",
"place": "",
"signature": {
"method": "drawn",
"typed": "",
"image": "data:image/png;base64,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"
},
"decided_at": "2026-10-26T16:05:12Z",
"proof": {
"fingerprint": {
"alg": "sha-256",
"profile": "riftveil-decision-v2",
"value": "2fd3a2ae0b4685c971c0cb7e780bf97736d02ff3f25f3e42ad953cfa180115c2"
},
"seal": {
"value": "S1-SP2R-M6Z9-3Y27-M5MB-YB16-57G7-MX47-8GFY",
"sealed_at": "2026-10-26T16:05:12Z",
"verify": "https://riftveil.ai/api/verify"
},
"signature": {
"alg": "ed25519",
"key": "ed25519-1",
"value": "H0tFeR7Q-VELQlHZEsR9AkvBDaKZmP2Obc7CuPehNrHaA5XHmRtrPcSsOHsPStb1MU6BcQKTS8MVWHaKDlUmAw",
"keys": "https://attestscope.ai/test-keys.json"
}
}
},
"decided_at": "2026-10-28T09:41:27Z",
"proof": {
"fingerprint": {
"alg": "sha-256",
"profile": "riftveil-decision-v2",
"value": "137a5d48553a886223ef5392e910d1e16e7d46aebb82e5fa8bef058963ff7522"
},
"seal": {
"value": "S1-30WH-D58W-8MVE-6G4Y-8KSE-30J0-G3YC-RX4S",
"sealed_at": "2026-10-28T09:41:27Z",
"verify": "https://riftveil.ai/api/verify"
},
"signature": {
"alg": "ed25519",
"key": "ed25519-1",
"value": "Nk-dIGehodcncNA9pOvyC3KMAjeoXkHQIEggGaVoZAobxLkHL8FmUMYx61uwYrl560NvoV0pVAAgerL-cWvsCQ",
"keys": "https://attestscope.ai/test-keys.json"
}
}
},
"notice": "Illustrative record. People, organisations and amounts are fictitious. The prefix XT is reserved for tests: the seals use the public test key assay-test-key-1 and the signatures the public Ed25519 test key of docs/test-vectors.json; they are never valid at riftveil.ai. The final document is a short text given in docs/test-vectors.json."
}