Registre de validation
Compilations locales de développement. Les résultats sont datés dans chaque section ; les empreintes des anciens artefacts ne s'appliquent qu'aux compilations auxquelles elles sont associées. Les exemples de commandes utilisent le nom actuel du projet ; les empreintes des artefacts historiques ne décrivent pas les binaires nouvellement nommés. Ces résultats décrivent les vérifications réellement exécutées ; la configuration CI ne constitue pas la preuve d'une exécution CI distante réussie ni d'un audit de sécurité indépendant.
Comptes SaaS et inscription configurable (2026-10-14)
La version 20261014-83aca4d86199 est déployée sur ldny. SHA-256 du binaire Linux :
83aca4d86199718587da2fe812471bffb6ea7aefd499c52ed53e6566a7dd4c73.
Déploiement de l'interface des comptes : 908a7085.memories-ap4.pages.dev.
cargo fmt --all --check,cargo clippy --workspace --all-targets --locked -- -D warningsetcargo test --workspace --lockedont réussi sous Windows. Les tests facultatifs existants dépendant de l'environnement conservent leur statut déclaré de tests ignorés.cargo build --workspace --release --lockeda réussi sous Windows. La compilation Linux de production dememories-centera réussi avec le graphe de dépendances verrouillé et a été testée dans le conteneur Ubuntu compatible avec la production décrit ci-dessous.- Tests du Center : 79 réussis, dont sept tests de comptes/configuration couvrant l'inscription par nom d'utilisateur, les identités canoniques, la vérification/expiration/réutilisation des courriels, les échecs de transport SMTP, la livraison réelle à un dispositif SMTP de test en boucle locale, le hachage des mots de passe, les limites du travail/des requêtes d'authentification, le refus des lectures/écritures entre comptes, les modifications et suppressions administratives, la déconnexion, la persistance après redémarrage et le refus par défaut des écritures des membres.
- Tests Node du client Web et du proxy API : 13 réussis. La génération de documentation a vérifié les liens et ancres locaux dans 32 pages HTML.
- Un véritable Chromium s'est inscrit/connecté à un Center isolé et a créé une mémoire. Les transitions du formulaire de courriel ont été vérifiées avec des réponses API simulées ; ces vérifications du navigateur n'ont envoyé aucun courriel. La livraison du courriel par le serveur a été vérifiée séparément avec le dispositif SMTP local de test, et non auprès d'un fournisseur externe.
- L'image de production exacte a réussi un test canari dans un conteneur ldny isolé avec deux comptes, des coffres distincts, le refus entre comptes, la déconnexion, la persistance après redémarrage et la connexion alors que l'inscription était fermée. Le conteneur canari et ses données synthétiques ont été supprimés. Les données de production n'ont pas servi à ce test.
- Le redémarrage de production a conservé l'identité du coffre et le jeton de membre du propriétaire
existant via le domaine public. Le conteneur PostgreSQL et le service
cloudflared existants sont restés en cours d'exécution. Les ressources intégrées de
/app/et les ressources publiques Pages correspondent. Les pages publiques pour ordinateur/mobile n'ont aucune erreur de console du navigateur et aucun débordement horizontal à 390px. - La production sélectionne le mode courriel dans
/etc/memories-center/auth.toml. SMTP a été configuré le 2026-10-14 avec Tencent enterprise mail et TLS implicite avec vérification du certificat sur le port 465. L'authentification auprès du fournisseur a réussi, le service a redémarré correctement et la configuration publique indique que l'inscription est activée. Une demande publique d'inscription a renvoyé 200 avecverification_required: trueaprès l'envoi d'un courriel de vérification au fournisseur. La réception dans la boîte de réception et la soumission finale du code/mot de passe par l'utilisateur restent non vérifiées. Les mots de passe sont conservés uniquement dans une configuration protégée en dehors du dépôt. - Sauvegarde cohérente protégée :
/var/backups/memories-center/20261014-before-accounts-83aca4d86199/state-and-config.tar.gz. Preuves, correctif source et compte rendu de compilation :dist/saas-accounts-20261014/. Le correctif s'applique à la base propre enregistrée ; Git normalise les fins de ligne du texte.
SaaS hébergé sur ldny (2026-10-14, déploiement initial)
memories.ivjn.us sert désormais l'API du Center hébergé via un Cloudflare Worker
et le Tunnel ldny existant. Le site statique, le client Web et la documentation
indépendante restent sur Pages. ldny exécute la version Linux dans un conteneur
Podman Ubuntu 24.04, avec les données chiffrées persistantes en dehors de l'image et la gestion
du démarrage/redémarrage par systemd.
- Le point d'accès public
/healthrenvoieok;/v1/public-keyidentifiememories-saas. Un accès anonyme à/v1/sessionrenvoie 401, tandis qu'un membre/une autorisation avec périmètre renvoie la session autorisée. Les réponses API utilisentCache-Control: no-store. - Le contenu synthétique a survécu à un redémarrage du service. Un véritable Chromium a créé, modifié
et rouvert une mémoire via
https://memories.ivjn.us, puis l'a supprimée. La version finale du conteneur a réussi deux redémarrages systemd consécutifs avec un nouvel élément de test persistant. Un fichier binaire de 1 MiB téléversé/téléchargé via l'API publique avait un SHA-256 identique ; les autorisations de lecture seule ont refusé les écritures avec 403. - Les vérifications du navigateur sur ordinateur et mobile à 390px n'ont révélé aucun débordement horizontal ni erreur de console. Les jetons/contenus étaient absents du stockage du navigateur. Le contenu de QA a été effacé et les autorisations temporaires révoquées. Un jeton de propriétaire existant fonctionnait toujours après la mise à niveau finale ; une sauvegarde protégée de l'état/de la configuration antérieurs a été conservée.
- Les 10 tests Node de l'API Web et du proxy en périphérie ont réussi. La compilation Linux de production et les tests de fumée locaux Linux d'authentification/persistance/ressources intégrées ont réussi.
Consultez deploy/README.md dans le dépôt pour l'organisation du service et le retour à la version précédente.
Les secrets ont été générés sur le serveur et conservés en dehors du dépôt. Ces
vérifications n'établissent pas une certification de sécurité indépendante ni l'inscription publique
en libre-service. Les preuves locales se trouvent dans dist/saas-ldny-20261014/.
Memories Web (2026-10-14, déploiement initial de l'interface)
Ajout du client statique Center à /app/ et intégration des mêmes ressources dans
memories-center. Il s'agit d'un client pour Center hébergé, pas d'un coffre hors ligne dans le navigateur.
Ce déploiement initial de l'interface a précédé le déploiement SaaS enregistré ci-dessus.
- La séquence Rust complète a réussi : vérification du formatage, Clippy sur l'espace de travail/toutes les cibles avec interdiction des avertissements, tests de l'espace de travail avec dépendances verrouillées et compilation de production de l'espace de travail avec dépendances verrouillées. La suite Center comprend la validation des origines explicites et des tests de périmètre/authentification CORS.
node --test scripts/tests/web-client.test.mjs: 6 réussis, couvrant la liaison des jetons à l'origine, les restrictions de redirection/cookies/cache, les mises à jour partielles, l'annulation et les réponses périmées, les courses lors d'échecs de connexion, les erreurs génériques et l'encodage binaire.- Un véritable Chromium a connecté le site statique sur le port 8097 à un Center hébergé jetable sur le port 9297. La création/modification/réouverture de mémoire, la création/suppression de carte, le téléversement et le téléchargement de fichiers ont réussi. Un téléchargement binaire de 10,240 octets correspondait au SHA-256 source. Les autorisations de lecture désactivaient les modifications ; une autorisation d'écriture seule a créé une mémoire qui a été lue indépendamment avec l'autorisation du propriétaire, avec absence de la carte supprimée.
- Les dispositions de l'espace de travail sur ordinateur et mobile à 390px ont été inspectées. La déconnexion explicite a effacé le contenu visible et le champ du jeton ; le verrouillage après cinq minutes d'inactivité a également été observé. Ni localStorage ni sessionStorage ne contenaient de jetons ou de contenu.
- Le Center de production a servi les sept ressources intégrées à l'identique, octet par octet, des
sources du site. Sa page
/app/s'est chargée sans erreur ni avertissement de console du navigateur, et les en-têtes CSP/de sécurité ont été vérifiés.
Seules des données synthétiques de coffre et des autorisations jetables ont été utilisées. Ces vérifications ne
revendiquent ni connexion à un coffre de production, ni audit de sécurité indépendant, ni parité
fonctionnelle avec les clients natifs. Les preuves sont conservées localement sous
dist/site-update-7647166/output/playwright/ et dist/web-client-qa/.
Actualisation du client du site (2026-10-14)
Suivi du site : les cartes de téléchargement partagent désormais des lignes de grille pour les empreintes, les boutons
principaux et les liens de métadonnées. La documentation autonome à /docs/ contient 29
pages générées avec navigation, liens de titres et menu repliable sur mobile.
python scripts/build-website-docs.py vérifie les liens locaux et les cibles de fragments
dans les 30 pages HTML. node --check a réussi pour les deux scripts du site.
Les vérifications du navigateur ont couvert la page d'accueil, le portail de documentation, les guides anglais et chinois
et la configuration à 390px, 900px et 1440px, sans débordement horizontal des pages
ni erreur de console. Les boutons de téléchargement, les empreintes et les liens BUILD-INFO ont des
positions verticales identiques sur les quatre cartes de bureau.
Base source : 7647166a6d97e59e9a466fec5ead287892b428af (main, synchronisée
avec origin/main). Les paquets Windows et Linux utilisent cette source validée par commit.
Android inclut également le correctif local de conservation du constructeur R8 décrit ci-dessous ;
son BUILD-INFO.json enregistre source_dirty: true et le correctif source publié.
| Artefact publié | Octets | SHA-256 |
|---|---|---|
| ZIP Windows x86_64 v0.1.7 | 51646344 | 755663b54323bfcf4ba9bef474c10599542372416ac6b50dcc4bd0d3f75fdcad |
| tar.gz Linux x86_64 v0.1.7 | 44817901 | 2a58ab5702e82baa4dc7fcc30a42b4ca01811d3a9312facf5429d444b0f64b7d |
| APK Android v0.1.7, versionCode 8 | 146722216 | 74256790a248ea17b0f9ad60aa74be311da7ef77b243023fa8d4490b76a1d24d |
Les bases publiques sont https://r2.ivjn.us/memories/7647166/windows/,
https://r2.ivjn.us/memories/7647166/linux/ et
https://r2.ivjn.us/memories/7647166/android-cc5ac4b5/. Les trois paquets et
leurs métadonnées publiées ont été téléchargés à nouveau et correspondaient aux empreintes SHA-256 locales.
Le SHA-256 du SOURCE.patch Android est
cc5ac4b57ced3bc87738d51da5ded84822627b5f05f8db024d323bde98dda4c2 ;
git apply --check a réussi sur la copie de travail propre de base.
Validation effectuée :
- Rust 1.98.0 sous Windows :
cargo fmt --all --check,cargo clippy --workspace --all-targets --locked -- -D warnings,cargo test --workspace --lockedetcargo build --workspace --release --lockedont tous réussi. Les tests configurés comme ignorés restent ignorés ; les avertissements de compatibilité future des dépendances subsistent. - Paquet Windows : 47 fichiers du manifeste et entrées d'archive vérifiés ; la commande
--versionde la CLI extraite a renvoyémemories 0.1.7, et--helpdu relais a réussi. - Paquet Linux : compilé avec
bash scripts/package-linux.shdans une copie de travail GNU WSL propre (glibc 2.39, OpenSSL 3). Les 45 fichiers du manifeste, entrées d'archive et permissions d'exécution ont été vérifiés. Les commandes--versionetfile exec --helpde la CLI extraite ont réussi ;ldda résolu toutes les dépendances. - Flutter 3.44.2 / Dart 3.12.2 :
flutter pub get,dart format --output=none --set-exit-if-changed lib test integration_test,flutter analyzeetflutter testont réussi (126 tests). - Les bibliothèques Rust FFI ARM64/x86_64 ont été recompilées et
flutter test integration_test/native_smoke_test.dart -d emulator-5680a été exécuté avec succès sur Android API 35 x86_64. L'ancienne assertion d'ID à huit caractères a été mise à jour pour correspondre au contrat du cœur : 6-16 caractères hexadécimaux, de longueur paire. L'APK de débogage ordinaire a ensuite été recompilé et ses bibliothèques natives vérifiées. - L'APK de production a été compilé avec
flutter build apk --release --target-platform android-arm64,android-x64 --build-number 8, aligné et signé au moyen de la configuration externe documentée dansAGENTS.md.apksigner verifya réussi avec le SHA-256 du certificat de production existantd637a37d5dd77aa5753722eccf53ab1b84baed2189e603cef9c34dbf354948f8. Les bibliothèques FFI sources, fusionnées, dépouillées de leurs symboles et empaquetées ont été vérifiées pour les deux ABI. - Les tests réels de la version signée ont détecté un plantage R8 au démarrage : Room construit
androidx.work.impl.WorkDatabase_Implpar réflexion, mais son constructeur public sans argument avait été supprimé. Une règle de conservation de périmètre étroit a été ajoutée, la compilation refaite, et deux démarrages à froid ainsi que l'entrée en mode Standalone ont été vérifiés sans exception fatale AndroidRuntime. Le candidat défaillant a été retiré avant le déploiement du site ; son URL publique d'APK renvoyait HTTP 404. - La syntaxe JavaScript du site ainsi que les ressources HTML locales, les ID et les cibles de fragments ont passé les vérifications. Les tests locaux du navigateur à 1440px et 390px ont réussi le changement bilingue sans débordement horizontal ni erreur de console.
Le déploiement de production Cloudflare Pages a été effectué à
https://09253fe4.memories-ap4.pages.dev pour le projet memories, branche main,
avec des métadonnées de source modifiée. https://memories.ivjn.us/ a renvoyé HTTP 200 et
correspondait au fichier local website/index.html octet par octet. Les 12 liens de téléchargement/métadonnées
ont renvoyé HTTP 200, y compris les liens macOS conservés. Les en-têtes CSP, nosniff,
de refus d'encadrement, de référent et permissions-policy étaient présents. Les vérifications du navigateur en production
ont réussi à 1440px et 390px avec changement anglais/chinois,
sans débordement horizontal et avec zéro erreur ou avertissement de console. Les captures d'écran se trouvent
sous dist/site-update-7647166/output/playwright/live-*.png.
Les preuves locales et utilitaires se trouvent sous dist/site-update-7647166/ ; le paquet Windows
se trouve sous dist/v0.1.7/. Les secrets de signature sont restés en dehors de la copie de travail.
macOS conserve le téléchargement v0.1.3 existant : l'hôte macOS était hors ligne et
GitHub Actions était bloqué par la limite de facturation/dépenses du compte. Aucune nouvelle compilation macOS
ou iOS, exécution sur ARM64 physique, publication en boutique ni audit de sécurité indépendant
n'est revendiquée. La validation Linux ci-dessus remplace la limitation Linux de l'ancienne base
pour ce paquet.
Configuration de la CI native sans intervention (2026-10-01 ; planifiée, non exécutée)
La matrice de systèmes Rust dans .github/workflows/ci.yml planifie désormais des vérifications natives
explicites après les tests ordinaires de l'espace de travail :
- Windows :
cargo test -p memories --lib native_dpapi --lockedexécute les tests existants d'aller-retour DPAPI pour l'utilisateur actuel et de refus après changement de liaison. Ils utilisent uniquement des tampons synthétiques en mémoire, libérés et remis à zéro par le garde de tampon natif ; le chemin fictif de garde des clés n'est jamais consulté. - macOS :
cargo test -p memories --lib unattended_backend::macos::tests::native_roundtrip_when_keychain_is_unlocked --locked -- --exact --ignoredexécute uniquement le test natif d'aller-retour Keychain ignoré, pas les autres tests ignorés. Il crée une entrée synthétique sans synchronisation avec une liaison unique à un répertoire temporaire, puis supprime précisément cette entrée avant de vérifier le résultat de lecture ou d'affirmer l'égalité. Les erreurs de création, de lecture et de nettoyage font échouer le test ; une création échouée ne déclenche jamais la suppression d'une entrée préexistante.
L'exécuteur macOS doit fournir un trousseau utilisateur disponible et déverrouillé permettant la création/lecture/suppression sans interface. Aucun déverrouillage de trousseau, interface d'authentification, affaiblissement des ACL, changement global du trousseau ni injection de mot de passe n'est ajouté. Les trousseaux manquants ou verrouillés provoquent un échec plutôt qu'une omission silencieuse ou un mécanisme de repli. Si la suppression native échoue, le test échoue et son entrée synthétique peut rester sur l'exécuteur jetable. Des échecs antérieurs de formatage/lint/tests peuvent empêcher d'atteindre ces étapes.
Ces étapes sont configurées pour de futures exécutions CI sur push/pull request, et ne constituent pas des preuves d'exécution native. Aucun workflow n'a été déclenché et les tests natifs Windows et macOS n'ont pas été exécutés localement : cet environnement d'implémentation est Linux, sans hôtes natifs configurés. L'exécution native réelle et la validation sans interface dans les états verrouillé/nécessitant une approbation restent des conditions de publication ; la configuration CI seule ne les remplit pas.
Scripts de compilation et d'empaquetage Linux (2026-09-18)
Les nouveaux scripts shell Linux ont été validés dans Ubuntu sur WSL2 depuis une copie de travail Windows.
bash -n a réussi pour les deux scripts. Des dépôts de test jetables avec commits et
des outils de compilation simulés ont exercé la sélection production/débogage, la sélection explicite de cible native
malgré un CARGO_BUILD_TARGET contradictoire, les chemins avec espaces, les répertoires cibles
Cargo personnalisés, la disposition des archives x86_64/aarch64, les permissions d'exécution,
les documents/licences suivis, les métadonnées du commit source et toutes les sommes de contrôle de fichiers/archives.
Les systèmes incorrects, cibles non prises en charge, arguments invalides, OpenSSL manquant, compilations échouées,
copies de travail modifiées et répertoires de paquet existants ont été rejetés comme prévu ;
les archives existantes sont restées inchangées.
L'environnement WSL ne dispose d'aucune chaîne Rust/C ; cela valide donc le comportement des scripts avec des artefacts de test, pas la compilation Linux ni l'exécution native. Le workflow manuel de bureau mis à jour inclut l'installation des dépendances Linux, ShellCheck, les vérifications Rust, l'empaquetage, la vérification des sommes de contrôle et les commandes de fumée CLI/relais extraites ; ce workflow distant n'a pas été exécuté pour cette modification. ARM64 natif et la compatibilité des distributions/glibc/OpenSSL restent non vérifiés.
Windows v0.1.3 : récupération, modèles intégrés et ID à six caractères (2026-09-18)
L'étiquette v0.1.3 et le BUILD-INFO.json de production identifient la source et les fichiers
empaquetés. Le moteur d'inférence fait partie de l'application ; les poids des modèles sont
installés séparément comme fichiers de données vérifiés, sans être exécutés par une autre application.
- Régression de l'espace de travail : 158 réussis, zéro échec, 17 cas auxiliaires/dépendant d'outils/modèles intentionnellement ignorés. La suite finale de six tests de récupération a également réussi séparément, incluant une nouvelle régression de passage d'un document public à privé en cours de traitement, ajoutée après le démarrage des tests de l'espace de travail.
- EmbeddingGemma natif a fonctionné dans le processus avec les véritables fichiers de modèle Q4 épinglés. Une question chinoise a classé le document anglais pertinent sur les chiens avant un texte financier sans rapport, avec des vecteurs finis normalisés à 768 dimensions. Un second test réel CLI/démon a construit l'index vectoriel, retrouvé la correspondance sémantique et confirmé le refus après verrouillage/l'effacement du cache. Les deux tests facultatifs ont réussi après la désactivation explicite de la télémétrie ONNX avant la création de la session.
- La CLI finale optimisée de production Windows a aussi été exercée directement via
de véritables IPC du démon : ID à six caractères, deux documents indexés,
correspondance sémantique multilingue et refus après verrouillage ont réussi. Son rapport est
target/rag-release-smoke.json; aucune application externe d'embeddings n'a été utilisée. - L'installation de modèles via la véritable CLI de production a réussi contre un miroir local jetable : un HTTP 429 injecté et une réponse de modèle interrompue ont été récupérés par nouvelles tentatives/plages (59 requêtes, 53 plages), et les sept fichiers de modèle correspondaient à leurs SHA-256 épinglés. Une nouvelle installation avec le miroir arrêté a réutilisé les fichiers vérifiés hors ligne. Aucun stockage chiffré n'a été initialisé par l'installation.
- Les dispositifs HTTP de test vérifient les charges utiles Gemini/compatibles, les dimensions demandées, les vérifications d'ordre/nombre/dimensions des embeddings, le reclassement appris, le rejet de citations, les nouvelles tentatives transitoires, les erreurs d'authentification sans nouvelle tentative, l'annulation et un véritable CONNECT de proxy HTTPS. Les corps d'échec et les échos directs des clés API sont supprimés.
- Les régressions recherche/RAG couvrent les termes chinois, les modes any/all/phrase, les décalages Unicode des fragments, la réutilisation/invalidation du cache vectoriel, les identifiants secrets/contenus privés/supprimés masqués, le verrouillage et la révocation d'autorisations, le refus entre coffres, le refus de divulgation distante des données réservées à l'appareil et les documents modifiés pendant le travail du modèle. L'ingestion/récupération CLI et MCP fonctionne sans modèle en mode BM25.
- Les ID à six caractères, l'extension des collisions à six/huit caractères, la compatibilité des anciens ID d'entrée à huit caractères et les projections de références typées réussissent avec les régressions existantes d'autorisation/stockage/FFI. Les ID canoniques stockés et les empreintes de sécurité sont inchangés.
- Le formatage, Clippy sur l'espace de travail/toutes les cibles avec
-D warnings, les compilations optimisées et une compilation du cœur sans la fonctionnalité facultative d'embeddings natifs réussissent. Les avertissements existants de compatibilité future des dépendances et les avertissements informatifs de l'éditeur de liens natif subsistent. - Les services Gemini/génération/reclassement réels du client n'ont pas été appelés ; la validation du protocole utilise des dispositifs HTTP synthétiques. L'exécution macOS/Linux et les compilations mobiles natives n'ont pas été exercées ici. La FFI mobile expose la récupération lexicale mais rejette les opérations fondées sur un modèle. Aucune interface Flutter n'a été modifiée.
Révision du modèle : 5090578d9565bb06545b4552f76e6bc2c93e4a66 de
onnx-community/embeddinggemma-300m-ONNX. Les journaux sont target/rag-*.log et les
enregistrements de téléchargement/miroir se trouvent sous target/. Seuls des stockages, documents et
identifiants secrets synthétiques ont été utilisés.
Windows v0.1.2 : état et configuration du bureau (2026-09-18)
L'étiquette v0.1.2 identifie cette source. Le BUILD-INFO.json de production associe le commit
exact et chaque fichier empaqueté ; SHA256SUMS couvre également l'exemple de configuration
autonome. L'archive Windows comprend l'exécutable de la zone de notification, la WebUI intégrée,
toute la documentation suivie, l'exemple TOML et les licences des polices intégrées.
cargo test --workspace --locked -- --test-threads=2: 144 réussis, zéro échec, 14 cas auxiliaires de sous-processus/d'outils externes intentionnellement ignorés. Une régression renforcée de transmission de configuration/WebUI réelle a également réussi séparément sur la source finale (deux tests d'intégration de bureau).- Le formatage, Clippy sur l'espace de travail/toutes les cibles avec
-D warningset les compilations optimisées de l'espace de travail ont réussi sur Rust 1.98.1 MSVC. Les avertissements existants de compatibilité future des dépendances et les avertissements informatifs de l'éditeur de liens FFI subsistent. - Les régressions couvrent le rejet des capacités/Host/Origin/fetch-site, l'absence de routes de modification ou d'IPC générique, la rotation des jetons, l'arrêt avec connexions HTTP partielles, l'expiration passive après inactivité, les détails verrouillés masqués et le refus MCP. L'intégration réelle démon/WebUI couvre la configuration, les compteurs déverrouillés, le verrouillage et la déconnexion.
- Les tests de configuration couvrent la priorité CLI/environnement/fichier, le stockage relatif, l'inspection sans stockage, la transmission explicite de configuration aux sondes, la langue enregistrée dans le répertoire personnel sélectionné, les valeurs par défaut du relais, les valeurs mal formées, les erreurs expurgées et la préservation des fichiers de configuration existants.
- Les véritables processus CLI/zone de notification de production Windows ont démarré avec un fichier TOML jetable et un stockage synthétique. Le navigateur a vérifié les états verrouillé/déverrouillé et trois bibliothèques synthétiques, les cinq langues et les dispositions bureau/390 pixels sans débordement horizontal ni erreur du navigateur. Le processus de notification est resté réactif sans erreur au démarrage. Les clics de menu natifs n'ont pas été vérifiés car la surface d'automatisation n'exposait pas de fenêtre de barre des tâches/notification.
cargo package --listinclut les ressources/polices intégrées, le modèle de configuration et les sources du lanceur. Les vérifications de syntaxe d'empaquetage shell/Python intégré macOS ont réussi. La compilation macOS, l'exécution dans la barre de menus, la signature/notarisation et les vérifications d'exécution Linux n'étaient pas disponibles sur cet hôte Windows.- Aucun fichier mobile ni code Flutter n'a changé ; les exécutions Flutter/appareil natif et les cas facultatifs d'outils cryptographiques externes n'ont pas été répétés pour cette version.
Les journaux sont target/desktop-config-*.log et target/config-tests.log. Le workflow manuel
Build desktop packages fournit des tâches d'empaquetage Windows/macOS ; une définition
de workflow n'établit pas une compilation macOS réussie.
Windows v0.1.1 : documentation et alias d'ID de mot de passe (2026-09-18)
L'étiquette v0.1.1 identifie la source. Cette préversion Windows uniquement inclut
tous les fichiers suivis de docs/ avec leur arborescence intacte ; son
BUILD-INFO.json enregistre le commit source et le SHA-256 de chaque fichier empaqueté,
et SHA256SUMS couvre l'archive et le manifeste de compilation.
cargo test -p memories --locked --test crypto_jobs --test localization: sept réussis, zéro échec ; trois tests d'outils externes intentionnellement ignorés. La couverture de régression confirme que--password_id,--passwordet--password-idproduisent des plans/empreintes d'approbation identiques ; un changement d'ID d'identifiant secret change l'approbation. L'aide en cinq langues présente les alias.cargo fmt --all --check, Clippy sur l'espace de travail/toutes les cibles avec-D warningsetcargo build --workspace --release --lockedont réussi sur Rust 1.98.1 MSVC. Les avis existants de compatibilité future des dépendances et de l'éditeur de liens FFI subsistent.- Les tests de fumée de version CLI/relais de production et d'aide crypto ont réussi.
- Les résultats complets de l'espace de travail, des outils externes et de Flutter ci-dessous s'appliquent à v0.1.0 ; ces suites plus larges n'ont pas été répétées pour cette mise à jour d'alias CLI/documentation. Aucun artefact mobile n'a été recompilé ; la version de l'application Flutter est inchangée.
- La commande d'empaquetage reproductible est
pwsh -File scripts/package-windows.ps1. Les journaux de cette exécution se trouvent soustarget/release-0.1.1-*.log.
Préversion Windows v0.1.0 (2026-09-18)
Compilée localement sous Windows x86_64 avec Rust 1.98.1 MSVC et Flutter 3.44.2.
L'étiquette v0.1.0 identifie la source ; le BUILD-INFO.json de production enregistre son
commit complet et SHA256SUMS couvre les ressources téléchargeables.
cargo test --workspace --locked -- --test-threads=2: 131 réussis, zéro échec, 14 tests intentionnellement ignorés. Le bureau était actif et déverrouillé ; les deux tests IPC auparavant bloqués par le verrouillage de l'écran ont réussi sans exclusion.- Les trois tests facultatifs d'interopérabilité crypto ont réussi séparément avec des identités synthétiques : S/MIME, OpenPGP et signature Android au format APK/AAB.
- Le formatage Rust, Clippy sur l'espace de travail/toutes les cibles avec
-D warningsetcargo build --workspace --release --lockedont réussi. Les avis existants de compatibilité future des dépendances subsistent. - L'analyse Flutter, le formatage Dart et les 36 tests Flutter ont réussi.
- La version/l'aide crypto de la CLI de production, l'aide du relais et un véritable test de fumée de DLL de production (initialiser, verrouiller, déverrouiller, tout verrouiller, fermer) ont réussi avec une base jetable.
- GitHub Actions n'a pas pu démarrer car GitHub a signalé une restriction de paiement ou de plafond de dépenses du compte. Il s'agit de résultats locaux, pas de résultats CI distants.
- Les ressources sont des binaires Windows de développement non signés. La configuration/le téléchargement Android NDK n'a pas terminé ; les artefacts Android/iOS et les tests sur appareil natif n'ont pas été produits pendant cette exécution. Les compilations Linux/macOS et l'acceptation de la version de production restent ouvertes.
| Artefact Windows | SHA-256 |
|---|---|
memories.exe |
b8c2598e946bf1bcaca0cfb103ab1f4530b4f168579a5788a9ad73d86b252497 |
memories-relay.exe |
a810a647fea9a1a94a67a89e3c53801a38d46e41218f013b8394d176bb008d55 |
memories_ffi.dll |
b18925b45b84c4fdc1dafa16f6db5e4ea226629ff5d971a9289170c1c5cc4375 |
Les journaux se trouvent sous target/release-20260918-*.log.
Cryptographie du courrier et signature d'applications (2026-09-17)
- Trois tests facultatifs d'interopérabilité réussissent uniquement avec des identités générées : signature/vérification S/MIME et chiffrement/déchiffrement PKCS#12 ; signature/vérification détachée OpenPGP et chiffrement/déchiffrement ; alignement/signature/vérification Android APK et signature/vérification JAR au format AAB. L'APK de test possède un véritable manifeste Android binaire ; le test AAB est un conteneur JAR synthétique, pas un App Bundle déployable. Aucun compte, identité ni application réel n'a été utilisé.
- Outils de l'hôte : Git for Windows OpenSSL 3.5.6, MSYS GnuPG 2.4.9, Adoptium JDK 17,
Android Build Tools 35.0.0 et le JAR de la plateforme Android 36. Les tests GPG utilisent
--msys-gpget des trousseaux jetables. Exécutez les tests facultatifs avec les chemins d'outilsMEMORIES_TEST_*nommés danscrates/cli/tests/crypto_jobs.rsetcargo test -p memories --locked --test crypto_jobs -- --ignored --test-threads=1. - Les régressions du cœur couvrent l'élévation locale, le refus MCP, les approbations altérées, les entrées/outils modifiés, les sorties existantes, les audits/résultats sans secrets, le nettoyage temporaire des identifiants secrets, l'échec d'exécution d'outils et les outils qui réussissent sans produire de sortie. L'aide CLI en cinq langues et le refus iOS hors macOS sont aussi testés.
- En excluant les deux cas IPC dépendant du verrouillage d'écran ci-dessous, l'exécution de l'espace de travail
réussit 129 tests, avec zéro échec et 14 tests intentionnellement ignorés
(auxiliaires de sous-processus et les trois tests d'outils exécutés séparément). La commande
est
cargo test --workspace --locked -- --test-threads=2 --skip actual_daemon_enforces_unlock_sudo_and_suppresses_child_secrets --skip catch_cli_stores_secrets_without_disclosure_and_requires_sudo. cargo build --workspace --locked, Clippy sur l'espace de travail/toutes les cibles avec-D warnings, le formatage Rust, la vérification des espaces du diff et la vérificationquick_validate.pyde la compétence mise à jour réussissent.- L'exécution complète de l'espace de travail a rencontré deux échecs existants de démon/IPC réels alors que la
session Windows était déconnectée/verrouillée (
query userindiquaitDisc, avec LogonUI dans cette session). Le hook de verrouillage d'écran du démon a révoqué les sessions synthétiques, produisantLOCKEDou des erreurs de sessions distantes supprimées. La répétition de ces tests en série a montré le même comportement de verrouillage. Ils nécessitent un bureau actif et déverrouillé ; la protection de verrouillage n'a pas été désactivée pour les tests. - La signature iOS est implémentée mais son exécution n'a pas été validée sur macOS. Aucun appareil Android n'est connecté et aucun NDK n'est installé ici ; les bibliothèques mobiles natives, APK et artefacts iOS n'ont pas été recompilés. La FFI mobile continue de refuser les tâches de processus de bureau. L'installation physique, l'acceptation de provisionnement Apple, l'intégration des clients mail PGP/MIME et la publication en boutique ne sont pas revendiquées.
Injection de compétence dans les clients IA (2026-09-17)
- Avant le push, l'instantané indexé ne contenant que la compétence a été exporté vers un répertoire
isolé et a réussi
cargo test -p memories --locked --bin memories --test skill_injection --test localization: 25 réussis, zéro échec, quatre auxiliaires de sous-processus intentionnellement ignorés. Le formatage y réussit aussi. - Validation complète de la copie de travail, incluant les modifications wiki/presse-papiers préexistantes :
cargo test --workspace --locked -- --test-threads=2: 127 réussis, zéro échec, dix auxiliaires de sous-processus intentionnellement ignorés et invoqués par les scénarios parents. Les régressions existantes d'autorisation, MCP, stockage, synchronisation, FFI et relais réussissent avec les nouveaux tests d'installation. - Windows : neuf nouvelles régressions réussissent (trois tests unitaires et six tests d'intégration CLI). Elles couvrent les répertoires utilisateur/projet, les remplacements de configuration, les cibles dupliquées, les chemins de remplacement partagés, la simulation, l'idempotence, le remplacement explicite, la détection préalable des conflits, les entrées invalides, la préservation des fichiers voisins et l'aide en cinq langues. Les tests utilisent des répertoires jetables sans démarrer de démon ni initialiser de stockage Memories.
- Une vérification séparée de jonction Windows confirme que
--forcerejette un répertoire de compétence lié avant d'écrire les autres cibles et préserve son fichier d'origine. La régression de lien symbolique Unix est incluse mais n'a pas été exécutée sur cet hôte. cargo build --workspace --locked,cargo fmt --all --check,cargo clippy --workspace --all-targets --locked -- -D warningsetgit diff --checkréussissent. Les avertissements existants de compatibilité future des dépendances Rust et les avertissements informatifs de l'éditeur de liens FFI subsistent.- La vérification
quick_validate.pyde skill-creator réussit.cargo package -p memories --list --allow-dirty --lockedconfirme que leSKILL.mdintégré est distribué avec le paquet CLI. L'installation ne nécessite aucun accès réseau. - Les chemins de découverte ont été vérifiés avec la documentation actuelle de Codex, OpenCode et Claude Code. La découverte/le comportement des modèles dans les clients réels, l'exécution Linux/macOS, Claude Desktop/Cowork et les téléversements de compétences dans le cloud n'ont pas été exercés. Aucun répertoire personnel de compétences ni configuration de client n'a été modifié pendant la validation.
Références secrètes wiki et presse-papiers (2026-09-17)
- Espace de travail Rust Windows : 118 réussis, zéro échec, dix auxiliaires de sous-processus intentionnellement ignorés et invoqués par les scénarios parents. La compilation de l'espace de travail, le formatage Rust et les vérifications des espaces du diff réussissent. Les chemins CLI, IPC et FFI mis à jour ont aussi été vérifiés dans des exécutions ciblées après leurs modifications finales.
- Quatre régressions fonctionnelles du cœur réussissent : remplacement exact, projections sûres, élévation locale/isolation MCP, rejet des métadonnées (y compris le texte échappé), copies de cartes protégées, rejet binaire/NUL, synchronisation, persistance et restauration indépendante de sauvegarde. Une exécution ciblée supplémentaire vérifie le retour arrière atomique lorsque le remplacement agrandit un document au-delà de la limite de taille du corps, après la préparation de l'identifiant secret. Le contenu historique signé reste intentionnellement inchangé.
- La suite IPC réelle CLI/démon réussit (trois tests et quatre auxiliaires de sous-processus explicitement invoqués), incluant le remplacement, les lectures masquées et la livraison de copie autorisée. La régression FFI réussit avec les mêmes opérations JSON et refuse les copies après verrouillage natif. Tous les dispositifs utilisent des secrets synthétiques et des stockages jetables ; aucun stockage installé ni presse-papiers utilisateur n'a été utilisé.
- Flutter : 36 tests réussis, dont cinq nouveaux cas pour la saisie de remplacement
masquée, l'élévation avant écriture dans le presse-papiers, l'abandon des réponses tardives après
verrouillage en arrière-plan, les échecs de copie et la préservation des références pendant la modification.
La livraison au presse-papiers utilise un canal de plateforme simulé. L'analyse Flutter, le formatage
Dart et Clippy sur l'espace de travail/toutes les cibles avec
-D warningsréussissent. - Les appels natifs au presse-papiers Windows compilent mais n'ont pas été exercés sur le presse-papiers interactif. Les utilitaires de presse-papiers Linux/macOS et la livraison au presse-papiers du système mobile n'ont pas été exécutés. Aucun appareil Android n'était connecté et aucun NDK n'était installé dans le SDK configuré ; les bibliothèques/APK Android et les artefacts iOS n'ont pas été recompilés.
- Journaux :
target/wiki-secret-tests.log,target/wiki-atomic-tests.log,target/wiki-ipc-tests.log,target/wiki-ffi-tests.log,target/wiki-flutter-tests.log,target/wiki-clippy.log,target/wiki-workspace-tests.logettarget/wiki-build.log.
Préférences de langue enregistrées (2026-09-17)
- Tests CLI : 19 réussis, huit auxiliaires de sous-processus intentionnellement ignorés. Les tests de persistance lancent des processus CLI séparés avec des répertoires personnels jetables et vérifient l'enregistrement/le remplacement d'une préférence, la sélection au démarrage et dans l'aide, l'isolation par répertoire personnel, les remplacements temporaires, l'effacement du paramètre, les paramètres mal formés et le nettoyage après échec d'écriture.
- Tests Flutter : 31 réussis. De nouvelles régressions vérifient que les changements de locale système en direct mettent à jour l'interface et le repli des polices sans enregistrer de préférence. Les choix enregistrés restent fixes ; le rétablissement de la valeur système par défaut persiste après redémarrage.
- L'analyse Flutter, Clippy sur l'espace de travail/toutes les cibles avec
-D warnings, le formatage Rust/Dart et les vérifications des espaces du diff réussissent. Les appareils natifs n'ont pas été exercés. - Journaux :
target/i18n/persistence-rust.txtettarget/i18n/persistence-flutter.txt.
Client et CLI en cinq langues (2026-09-17)
Hôte : Windows x86_64, Rust 1.98.1 MSVC, Flutter 3.44.2 / Dart 3.12.2.
- Tests de l'espace de travail Rust : 112 réussis, dix auxiliaires de sous-processus intentionnellement ignorés. Les tests de localisation CLI réussissent également sur les modifications finales de la CLI.
- Tests de widgets/unitaires Flutter : 29 réussis, couvrant cinq langues système, le repli vers l'anglais, la sélection persistante de langue, la préservation de la session déverrouillée, les dialogues de largeur téléphone, les nombres au pluriel et le masquage des aperçus protégés.
- L'analyse Flutter, le formatage Rust/Dart, Clippy sur l'espace de travail/toutes les cibles avec
-D warningset les vérifications des espaces du diff réussissent. Les avis existants de compatibilité future des dépendances Rust subsistent. - L'aide CLI, l'aide imbriquée, la priorité des locales et les erreurs non interactives localisées ont été exercées via le véritable binaire. Les champs JSON et codes d'erreur restent stables. Les captures de widgets ont été rendues à 390 x 844 avec des polices chargées pour les tests.
Les journaux locaux se trouvent dans target/i18n/. Le proxy HTTP de l'hôte a été exclu des connexions
de test en boucle locale de Flutter. Aucun appareil Android/iOS, sélecteur de fichiers natif, fournisseur OAuth
réel ni exécution Linux/macOS n'a été exercé pour cette modification de localisation.
Suivi de la récupération cloud et de la révocation (2026-09-17)
Hôte : Windows x86_64, Rust 1.98.1 MSVC. Les dispositifs de régression utilisent des données synthétiques, des bases chiffrées temporaires et uniquement HTTP en boucle locale.
cargo test --workspace --locked -j 2 --no-fail-fast -- --test-threads=2: 106 réussis, dix auxiliaires de sous-processus intentionnellement ignorés. Cela comprend les 24 tests d'intégration de synchronisation cloud/HTTP.cargo fmt --all --checket Clippy sur l'espace de travail/toutes les cibles avec-D warningsréussissent. Les avis existants de compatibilité future des dépendances subsistent.
La suite de régression couvre les réponses de téléchargement endommagées suivies de nouvelles tentatives saines, les objets rejetés restant distincts des importations réussies et une nouvelle analyse unique des anciens reçus. Elle vérifie aussi les téléchargements de dépendances avec une boîte de réception pleine, l'éviction des tampons d'enveloppes non référencées et le maintien des curseurs de répertoire sur une page partiellement admise.
Les tests de révocation couvrent les données en attente qui ne doivent jamais être envoyées ainsi qu'un téléversement déjà en cours : ce dernier peut terminer, mais la requête suivante est empêchée et son accusé de réception périmé est rejeté. Le dispositif Google Drive accepte les noms dupliqués et ne rejette que les ID de fichiers dupliqués. Son test de redémarrage interrompt le worker après l'acceptation d'un fichier par le serveur, vérifie que l'ID était déjà enregistré localement, puis vérifie qu'une nouvelle tentative crée exactement une enveloppe et un descripteur.
Le dispositif HTTP place explicitement les sockets acceptés en mode bloquant sous Windows ; sinon ils peuvent hériter du mode non bloquant du socket d'écoute et réinitialiser les connexions avant l'arrivée des octets de requête. Le dispositif en mémoire masque désormais les objets à la fois dans les listes et les téléchargements directs lorsqu'il simule une publication incomplète.
Aucun compte cloud réel ni appareil natif Android/iOS n'a été utilisé pour ce suivi. Les limites d'acceptation des plateformes et des versions enregistrées ci-dessous s'appliquent toujours.
Suivi de la fiabilité et du cloud mobile (2026-09-17)
Hôte : Windows x86_64, Rust 1.98.1 MSVC, Flutter 3.44.2 / Dart 3.12.2. Des secrets synthétiques et des bases jetables ont été utilisés partout.
- Les tests de l'espace de travail Rust réussissent, incluant la régression de client bloqué/verrouillage du démon réel. Les tests ciblés vérifient en outre qu'une requête HTTP cloud bloquée permet le verrouillage, que les exécutions simultanées de fournisseurs sont rejetées et qu'un accusé de réception tardif ne peut pas restaurer une session invalidée.
- Les régressions cloud couvrent les redirections de téléchargement OneDrive normales sans transmission des jetons Bearer, les boucles de redirection/destinations dangereuses, la mise en attente et la reconnexion par fournisseur, la réduction de la file terminée au-delà des anciennes limites 256/4096 et les nouvelles tentatives d'objets temporairement manquants après temporisation. Les destinataires révoqués ne bloquent plus la préparation pour les appareils actifs ni ne maintiennent un coffre modifié indéfiniment. Le dispositif HTTP reste désormais actif jusqu'à ce que son propriétaire l'arrête, au lieu d'expirer après 30 secondes.
- Le test FFI Windows vérifie les verrouillages d'arrière-plan en attente sur les handles occupés et inactifs et la distribution via le worker cloud natif. La validation OAuth native rejette les callbacks dangereux et PKCE mal formé avant les entrées/sorties réseau.
- Le formatage Rust et Clippy sur l'espace de travail/toutes les cibles avec
-D warningsréussissent. Les avis existants de compatibilité future derussh/proc-macro-error2subsistent. - L'analyse Flutter et les 16 tests de widgets réussissent, y compris l'état du compte et le verrouillage manuel pendant une requête de synchronisation. Les jetons Rust d'accès/actualisation ne sont jamais renvoyés à Dart ; AppAuth fournit le code/vérificateur d'autorisation.
- Le benchmark de stockage de production s'exécute avec 10, 100 et 1000 enregistrements synthétiques. Les résultats et définitions des métriques figurent dans Performances. L'ajout à l'audit ne dérive plus la même clé publique d'appareil pour chaque entrée antérieure.
- Le YAML des workflows, le Python intégré de configuration de signature, l'échappement Unicode des propriétés Java, les liens/blocs Markdown et les espaces du diff sont vérifiés localement.
L'installation des SDK/NDK/émulateur Android a été tentée, mais les transferts des grandes archives officielles étaient trop lents pour terminer pendant cette exécution. Aucun résultat APK/appareil natif Android n'est revendiqué pour cette modification. Les compilations iOS nécessitent macOS et n'ont pas été exécutées. Les nouvelles tâches CI natives et le workflow manuel de signature Android n'ont pas été exécutés à distance. Ce sont des vérifications configurées, pas des artefacts de compilation vérifiés.
Aucun client OAuth natif enregistré, consentement cloud réel, distribution signée, exécution sur appareil physique ni revue de sécurité indépendante n'a été effectué. La prise en charge des redirections natives Google doit être validée séparément pour Android et iOS avec l'inscription choisie. Consultez la Liste de contrôle de publication pour les critères d'acceptation. Les binaires memories installés et les véritables coffres utilisateurs n'ont pas été remplacés.
Nommage du projet pour la première version (2026-09-17)
Le projet, le dépôt, la CLI, les paquets Rust et Dart, les symboles et l'en-tête FFI,
les identifiants Android/iOS, les noms de stockage, les variables d'environnement et les domaines
cryptographiques utilisent désormais uniformément memories. Cette première version ne dispose d'aucun
alias de nom antérieur ni de voie de migration. Le dépôt est
https://github.com/mbcc2006/memories.
Hôte : Windows x86_64, Rust 1.98.1 MSVC, Flutter 3.44.2 / Dart 3.12.2.
cargo test --workspace --locked -j 2 -- --test-threads=2: 89 réussis, dix auxiliaires de sous-processus intentionnellement ignorés.cargo fmt --all --checket Clippy sur l'espace de travail/toutes les cibles avec-D warnings: réussis.cargo build --workspace --release --locked -j 2: réussi ; la version CLI et l'aide du relais indiquent toutes deux le nouveau nom.- Six tests de fumée CLI/démon/FFI de production ont réussi avec une bibliothèque jetable :
initialisation/écriture/sauvegarde natives, déverrouillage/lecture du démon, sélection par
MEMORIES_HOME, lecture et verrouillage/déverrouillage CLI, restauration native de sauvegarde et exportmemories_lock_allverrouillant les handles natifs actifs. - Formatage Dart et
flutter analyze: réussis. Tests de widgets Flutter : 14 réussis. La première exécution des widgets n'a pas pu se connecter à l'exécuteur local de tests à cause du proxy HTTP de l'hôte ; la nouvelle exécution sans variables de proxy dans ce processus et avec la boucle locale dansNO_PROXYa réussi.
Les preuves locales se trouvent dans target/rename-tests.log, target/rename-clippy.log,
target/rename-release-build.log, target/rename-e2e.log,
target/rename-e2e-report.json, target/rename-flutter-analyze.log et
target/rename-flutter-tests.log. Le rapport E2E associe son résultat à l'empreinte de la CLI.
Les compilations APK Android/iOS et les tests d'intégration sur appareil natif n'ont pas été exécutés pour ce
renommage. Les résultats E2E de proxy sur services réels dans la section suivante décrivent leur
compilation antérieure ; cette section enregistre les tests de fumée locaux de la nouvelle version.
| Artefact Windows de production | SHA-256 |
|---|---|
target/release/memories.exe |
3820d6d0d1effb64a98f3672cf7d8235739b22989c16c1c4112a1d2282012e5e |
target/release/memories-relay.exe |
9e92d253572f57256b423dd893dde5d580d711ffd84d22e39e8eceb3f5235221 |
target/release/memories_ffi.dll |
0cefa06d8527b5a9c9003636a1425cd7e2d0708f6b1d380ffaad9fc508b2c9af |
Proxys SSH/bases de données et E2E de production (2026-09-16)
Hôte : Windows x86_64, Rust 1.98.1 MSVC. La CLI/le démon de production ont été exercés
avec des serveurs jetables OpenSSH 8.9p1, PostgreSQL 14.24, MySQL 8.0.46 et Redis 6.0.16
dans Ubuntu 22.04 WSL. Les paquets des serveurs ont été extraits dans un répertoire temporaire
privé, avec des données, certificats et comptes synthétiques indépendants ;
aucun service système n'a été installé. Le démon de test utilisait un --home jetable.
Tous les serveurs de test ont été arrêtés et leurs données/clés privées supprimées ensuite.
- Régression de l'espace de travail : 88 réussis, dix auxiliaires de sous-processus intentionnellement ignorés.
Commande :
cargo test --workspace --locked -j 1 -- --test-threads=1. - Les corrections ultérieures des ID courts ont réussi les neuf tests distants et le scénario IPC du démon réel. Le correctif final d'arrêt a réussi les quatre tests de proxy, les deux scénarios IPC et une régression supplémentaire d'arrêt immédiat/verrouillage sans attente/join d'arrêt dans le client de test. Ces exécutions ciblées suivent l'exécution complète de l'espace de travail.
- Clippy final sur l'espace de travail/toutes les cibles avec
-D warnings, le formatage Rust et les vérifications des espaces du diff ont réussi. Les avis existants de compatibilité future des dépendancesrusshetproc-macro-error2subsistent ; aucune erreur de lint n'a été supprimée. cargo build --workspace --release --locked -j 2a réussi. Les commandes de version/aide de la CLI recompilée et d'aide du relais ont été exécutées avec succès. Le démon installé et les données utilisateur n'ont pas été remplacés.- 11 vérifications E2E sur services réels ont réussi avec
scripts/test-proxy-e2e.pysur le binaire de production recompilé. Les clients OpenSSH et SFTP, psycopg2, PyMySQL et redis-py se sont connectés aux proxys en boucle locale créés par le démon sans secrets des serveurs amont.
La couverture E2E comprend l'importation d'identifiants secrets par ID court et le refus de lecture des secrets ; le rejet des incompatibilités de clé d'hôte SSH ; la transmission de stdout, stderr et du statut de sortie ; un téléversement/téléchargement SFTP ; le refus TLS PostgreSQL non approuvé ; PostgreSQL SCRAM, TLS vérifié, Unicode et retour arrière de transaction ; MySQL caching-SHA-256, TLS vérifié et Unicode à quatre octets ; Redis AUTH sur TLS ; l'isolation de l'élévation MCP ; l'arrêt explicite sans interruption des autres proxys ; et le verrouillage fermant tous les sockets d'écoute ainsi que les connexions SSH/bases de données déjà établies.
La première exécution E2E a révélé que proxy stop revenait alors que la boucle d'acceptation pouvait
encore transmettre des requêtes pendant jusqu'à 200 ms. Le service détient désormais le worker de proxy et
attend sa fin avant d'accuser réception de l'arrêt/du verrouillage. La nouvelle exécution E2E finale vérifie la déconnexion
immédiatement après la réponse et réussit.
Preuves locales : target/proxy-20260916-workspace-tests.log,
target/proxy-20260916-remote-tests.log, target/proxy-20260916-shutdown-tests.log,
target/proxy-20260916-close-regression.log, target/proxy-20260916-clippy.log,
target/proxy-20260916-release-build.log, target/proxy-20260916-e2e.log et
target/proxy-e2e/results/report.json. Le rapport associe le résultat E2E au
SHA-256 de la CLI ci-dessous. Le script réutilisable nécessite des dispositifs jetables provisionnés
à l'extérieur, comme décrit dans la documentation de son module ; il n'installe pas de serveurs.
| Artefact Windows de production | SHA-256 |
|---|---|
| CLI Windows (compilation historique) | eea9ee3db29ea26e0dbf0d8090475eed05e2653936cc70816ea5147b1240447f |
| Relais Windows (compilation historique) | 34d4a15094031e47d1d9086291d52d04419caf509b848dbc1ae41fa57f491c3a |
| Bibliothèque FFI Windows (compilation historique) | f02e7efaff6fa182e3d9cd047289aad184c3c441277539bbf5920038fb149bfd |
Les artefacts Android/iOS et les tests d'exécution native n'ont pas été recompilés ni exécutés pour cette modification de proxy de bureau. Aucun SSH/base de données de production ni compte cloud réel n'a été utilisé.
Synchronisation d'objets cloud (2026-09-16)
Ajout d'un exécuteur d'objets immuables indépendant des fournisseurs avec reçus durables de
boîtes d'envoi/réception. La couverture se trouve dans les tests unitaires de crates/core/src/sync.rs et
crates/core/tests/cloud_sync.rs :
- Les octets exacts des enveloppes persistent après réouverture du processus ; un put échoué réessaie le même ID d'objet sans rechiffrement.
- Un put dupliqué télécharge et vérifie l'objet existant avant de marquer la tâche comme téléversée.
- Un descripteur listé avant son enveloppe reste en attente ; révéler l'enveloppe et réordonner/dupliquer la liste n'importe toujours qu'une fois.
- Un téléchargement corrompu est enregistré comme
corruptet ne fusionne pas l'état du coffre. - Le verrouillage et la déconnexion incrémentent la session de synchronisation afin qu'un
CloudSyncAcktardif ne puisse pas importer ; les tâches incomplètes de boîte d'envoi restent dans l'état chiffré après déverrouillage jusqu'à leur annulation par la déconnexion. - Deux appareils appairés échangent des modifications simultanées via
MemoryTransport. - Les coffres locaux uniquement et les appelants MCP ne peuvent pas mettre de travail en attente ni l'inspecter. Les sauvegardes et
bibliothèques restaurées ont un
cloud_syncvide et aucun compte cloud.
Des sessions SSH/FTP/TCP détenues par le démon avec proposition/approbation/exécution par instruction
ont été ajoutées (crates/core/src/remote.rs, crates/core/tests/remote.rs).
Les sessions MySQL, Redis et PostgreSQL conservent leur état sur la connexion active et
activent TLS par défaut (vérification du nom d'hôte ; identifiant secret CA PEM facultatif).
--no-tls est explicite. Les négociations TLS de bases de données réelles n'ont pas été exécutées.
La génération de clés SSH/TLS conserve les clés privées dans le stockage des identifiants secrets ; les tests
affirment que les réponses generate/public ne contiennent aucun PEM de clé privée.
Les proxys SSH/Redis en boucle locale injectent les identifiants secrets stockés pour qu'un client local puisse
se connecter sans le secret ; le verrouillage active le drapeau d'arrêt du proxy. Aucun compte réel
n'a été utilisé.
L'actualisation des jetons, les adaptateurs OneDrive/Google Drive, CloudSyncRun du démon et
memories cloud sync ont été ajoutés. La couverture se trouve dans les tests d'actualisation de cloud.rs et
les dispositifs en boucle locale de crates/core/tests/cloud_drive.rs. Les comptes Microsoft/Google
réels n'ont pas été autorisés. Aucune interface mobile de connexion/synchronisation n'a été ajoutée.
Vérification locale le 2026-09-16 (Windows x86_64, rustc 1.98.1 GNU, MinGW-w64 GCC 16.2.0) :
cargo test -p memories-core --locked -j 1 -- --test-threads=1: 49 réussis, deux auxiliaires de sous-processus intentionnellement ignorés.cargo clippy -p memories-core --all-targets --locked -- -D warnings: réussi.cargo fmt --all: réussi.
Revue du dépôt (2026-09-09)
- Espace de travail Rust Windows : 51 réussis, zéro échec. Dix auxiliaires de sous-processus intentionnellement ignorés
sont lancés explicitement par leurs tests parents. Commande :
cargo test --workspace --locked -j 1 -- --test-threads=1. - Les tests d'initialisation tuent un processus après la préparation et avant la publication, puis recréent/déverrouillent le stockage avec succès. Les destinations existantes, y compris un fichier apparaissant pendant l'initialisation, restent intactes ; le verrou système de la destination reste détenu jusqu'à la fin de la publication. Cela ne simule pas une coupure électrique physique.
- La capture d'identifiants secrets rejette les clés JSON dupliquées, y compris les objets imbriqués et les noms équivalents après échappement. Les tests conservent le comportement valide des tableaux/pointeurs/chaînes, l'expurgation des erreurs et le rejet via les véritables IPC CLI/démon.
- Un dispositif de profil HTTP retardé confirme que la latence réseau OAuth ne peut pas prolonger la validité du jeton d'accès. Les régressions existantes d'échange avec le fournisseur et d'annulation au verrouillage/à la déconnexion réussissent. Les tests WebSocket du relais incluent désormais Ping/Pong ; les réponses de contrôle utilisent le même délai d'envoi de dix secondes que les données en attente. Aucun test prolongé de socket saturé n'a été effectué.
- Clippy sur l'espace de travail/toutes les cibles avec
-D warnings, le formatage Rust/Dart, les espaces du diff et les vérifications locales des liens/blocs Markdown ont réussi. L'analyse Flutter n'a signalé aucun problème ; les 14 tests de widgets ont réussi. - La FFI Windows recompilée a réussi les vérifications avec données synthétiques jetables pour l'initialisation sans fichiers de préparation restants, le refus des tickets périmés après verrouillage, la persistance chiffrée des comptes après réouverture, l'état limité aux métadonnées et la déconnexion locale. Le dispositif a ensuite été supprimé.
- Journaux locaux :
target/review-20260909-rust-tests.log,target/review-20260909-clippy.logettarget/review-20260909-flutter-tests.log. Rust a utiliséD:/memories-build-cache/cardsavec une tâche de compilation/un thread de test. - Aucune autorisation Microsoft/Google réelle, exécution native Android/iOS ni vérification d'exécution Linux/macOS n'a été effectuée pendant cette revue. Les binaires installés n'ont pas été remplacés ; la CI distante et les artefacts de production n'ont pas été validés.
Autorisation cloud (2026-09-09)
- Espace de travail Rust Windows : 47 tests réussis, y compris les régressions d'autorisation cloud et de défaillance du stockage. Neuf tests auxiliaires sont exclus de la découverte et explicitement lancés par leurs scénarios parents.
- Clippy sur l'espace de travail/toutes les cibles avec
-D warnings, le formatage Rust et les vérifications des espaces du diff ont réussi. L'ajustement final du lancement non bloquant du navigateur a été suivi des tests cloud CLI, de Clippy et d'une nouvelle compilation CLI/FFI. - Les deux fournisseurs OAuth ont été exercés avec des dispositifs HTTP locaux : PKCE, état, identité du compte, vérifications de périmètre, jetons d'actualisation manquants, limites de réponse, redirections rejetées et erreurs génériques sans réflexion de secrets.
- Un véritable test de socket en boucle locale a rejeté un callback sans rapport et accepté le callback correspondant sans refléter son code dans la réponse HTTP.
- Les régressions du cœur ont vérifié la liaison appelant/fournisseur, le rejeu, l'annulation au verrouillage/à la déconnexion, la persistance chiffrée, l'isolation audit/MCP et l'absence de jetons cloud dans les charges utiles déchiffrées de sauvegarde et de synchronisation.
- Un dispositif FFI Windows temporaire utilisant des jetons synthétiques a réussi la persistance
d'autorisation après fermeture/réouverture, l'annulation par
memories_lock_allet la déconnexion. Le dispositif a ensuite été supprimé. - Aucune configuration de client enregistré ni compte cloud réel n'a été fourni, donc le consentement Microsoft/Google réel et l'émission de jetons restent non vérifiés. Aucun fichier cloud n'a été téléversé. Aucun appareil/émulateur Android n'était connecté ; l'exécution native Android/iOS et l'interface mobile de connexion n'ont pas été validées pour cette modification.
- Des binaires locaux de développement ont été compilés ; les binaires CLI/démon installés n'ont pas été remplacés et aucun résultat CI distant ou de production n'est revendiqué.
Validation avant push (2026-09-09)
- Régression de l'espace de travail Rust : 30 réussis ; deux auxiliaires enfants IPC restent explicitement invoqués par le scénario parent. Les aller-retours de collision d'ID court, d'historique, de référence protégée et d'autorisation sont inclus.
- Clippy sur l'espace de travail/toutes les cibles avec
-D warningset le formatage Rust ont réussi. La vérification de parité des ID courts a été mise à jour versis_multiple_of; les deux tests unitaires d'ID ont réussi à nouveau après cette correction équivalente de lint. - Le formatage Dart, l'analyse Flutter et les 14 tests de widgets ont réussi.
- Les tests Windows ont utilisé
D:/memories-build-cache/cards, une tâche de compilation et un thread de test. Les anciens fichiers PDB causant LNK1201/LNK1207 ont été conservés avec un suffixe.pre-push-20260909avant régénération. Le journal de l'espace de travail réussi esttarget/push-20260909-rust-tests.log. - Les binaires de production et les artefacts Android n'ont pas été recompilés pendant cette vérification ; les anciennes empreintes d'artefacts ci-dessous ne valident pas le nouveau protocole d'ID courts. Les résultats CI distants sont suivis séparément.
Suivi de la longueur des mots de passe (2026-09-09)
Les mots de passe locaux et de sauvegarde n'ont plus de politique applicative de longueur minimale ou maximale. La saisie vide est acceptée. La confirmation, les paramètres Argon2id, l'authentification, le périmètre sudo et le stockage chiffré restent en place.
- Une nouvelle régression du cœur a réussi pour les longueurs 0, 1 et 4096 : création du stockage, authentification, déverrouillage, sauvegarde et restauration ; les mots de passe incorrects sont rejetés.
- Clippy sur l'espace de travail/toutes les cibles avec
-D warningset le formatage Rust ont réussi. - L'analyse Flutter et les 14 tests de widgets ont réussi, y compris l'initialisation avec des mots de passe vides et à un caractère tout en conservant l'étape de confirmation.
- La CLI/FFI Windows a été recompilée et le démon local redémarré. Un dispositif temporaire séparé utilisant la FFI de production a réussi l'initialisation/déverrouillage/sudo à un caractère, un mot de passe de sauvegarde vide et une restauration protégée par un mot de passe à un caractère.
- Les deux ABI Android et l'APK à point d'entrée normal ont été recompilés. Les vérifications d'égalité des bibliothèques natives source/fusionnée et dépouillée/APK ont réussi. L'intégration d'exécution Android n'a pas été répétée pour cette seule modification de longueur ; le dispositif de test natif utilise désormais un mot de passe à un caractère pour la prochaine exécution sur appareil.
Ces empreintes remplacent les anciens enregistrements d'artefacts. Le journal de compilation est
target/password-length-android-build.log ; les empreintes ABI détaillées se trouvent dans
target/password-length-artifacts.json.
| Artefact | SHA-256 |
|---|---|
| CLI Windows (compilation historique) | 0b35b8becadccfcb82d41ccca6c231880fa29003f60eb84ac590953ddf4ed10d |
| Bibliothèque FFI Windows (compilation historique) | 2556e0bc894584520b6b7311e1889680a5cd28bc9c36a180f8b986ce59aca04c |
mobile/build/app/outputs/flutter-apk/app-debug.apk |
4167422819f7ed8ec5cd41faab7e0ac598b26d40e0869cec8f81906de6efc2d3 |
Suivi des cartes, des métadonnées protégées et des OTP
Les vérifications fonctionnelles et artefacts suivants remplacent les empreintes de compilation de base enregistrées plus loin dans ce document. Tous les identifiants secrets utilisés pendant la validation étaient synthétiques ; aucun identifiant de compte fourni ni serveur de courrier n'a été utilisé.
- Régression de l'espace de travail Rust : 25 réussis. Le scénario IPC CLI étendu et les vérifications RFC 6238/entrées mal formées ont aussi réussi après leurs derniers ajouts de tests. Deux tests auxiliaires sont délibérément ignorés lors de la découverte et exécutés explicitement par le scénario IPC (injection d'identifiants secrets et sudo de processus voisin).
- Formatage Rust et Clippy sur l'espace de travail/toutes les cibles avec
-D warnings: réussis. Les vérifications de débogage Windows ont utiliséD:/memories-build-cache/cardset-j 2. - Analyse Flutter et les 12 tests de widgets : réussis. La couverture comprend un graphe de taille téléphone, les liens retour dirigés, les aperçus masqués, l'autorisation OTP privée, l'expiration et la fermeture du dialogue OTP lors du passage en arrière-plan/verrouillage.
- L'espace de travail Windows de production a été recompilé. Une véritable CLI de production avec un stockage chiffré temporaire a enregistré Python 3.13.1 et son répertoire exécutable, marqué le coffre comme local uniquement et retrouvé l'observation par recherche de carte. Le dispositif et le démon ont été supprimés après la vérification.
- Les bibliothèques FFI Android ARM64/x86_64 ont été recompilées. L'émulateur API 35 x86_64 a réussi le
véritable test d'intégration FFI : cartes/liens/graphe, recherche dotenv limitée aux clés, génération
TOTP, refus de lecture d'identifiants secrets, audit et verrouillage/déverrouillage. Journal :
target/cards-android-native-test.log. - L'APK de développement à point d'entrée normal a été recompilé et installé après le test
d'intégration. Le démarrage, l'initialisation du mot de passe, la création de bibliothèque et l'ouverture du nouveau
formulaire de carte protégée ont réussi. La soumission manuelle supplémentaire du formulaire de compte a été
interrompue lorsque l'émulateur a disparu d'ADB ; ce scénario manuel supplémentaire
n'est pas enregistré comme réussi. XML de démarrage :
target/cards-android-startup.xml; journal de compilation :target/cards-android-build.log. - Les bibliothèques natives empaquetées ont été vérifiées par ABI : la source est égale à la sortie fusionnée
de Gradle, et la sortie dépouillée de ses symboles est égale à l'entrée APK. Preuves et tailles :
target/cards-artifacts.json.
Les tests de sécurité du cœur couvrent le stockage chiffré séparé des identifiants secrets, l'échec atomique, l'absence de secrets dans recherche/liste/graphe/MCP/audit et les octets en clair de la base, le refus de remplacement des références, la restriction d'hôte/l'injection d'en-têtes, l'exclusion des données locales uniquement de l'appairage/synchronisation/sauvegarde et les références OTP après synchronisation/restauration. La couverture RFC 6238 comprend les six horodatages standard pour SHA-1/SHA-256/SHA-512, ainsi que la sortie à six chiffres et le rejet de graines/périodes mal formées. Les tests d'en-têtes HTTP utilisent des valeurs synthétiques et vérifient le marquage des en-têtes sensibles ; aucune requête authentifiée à un service de production n'a été effectuée.
Artefacts actuels (compilation de développement, non signée pour distribution) :
| Artefact | SHA-256 |
|---|---|
| CLI Windows (compilation historique) | 9ff3d67b145508935e793dd7ce9b773d9f373549a8b08479de2f9c31a499dbd3 |
| Relais Windows (compilation historique) | 4aae7b45fbe9e009a7f118a384d246b3c878f2e43da821110c8e4bb5ef5a091a |
mobile/build/app/outputs/flutter-apk/app-debug.apk |
4551a72acab24cfdfb6279f2e27507ca24a938ee716417fb99e4bad96847a9fe |
SHA-256 Rust empaqueté :
| ABI | SHA-256 |
|---|---|
arm64-v8a |
eb8013d2bde1041412d08deb074f3fbbab7a24400e7cdde4cec890398b58f6a9 |
x86_64 |
cf34d3a09ba0c417460625d2f2ddf102cb891241e64de97f09479b63449f1aa9 |
Les limitations des plateformes à la fin de ce document s'appliquent toujours. Cette section enregistre la validation locale ; aucun résultat CI distant n'y est revendiqué.
Espace de travail Rust Windows de référence
Hôte : Windows x86_64, Rust stable 1.98, chaîne MSVC, SQLite intégré.
| Vérification | Résultat |
|---|---|
cargo fmt --all --check |
Réussie |
cargo clippy --workspace --all-targets --locked -j 1 -- -D warnings |
Réussie |
cargo test --workspace --locked -j 1 -- --test-threads=1 |
18 réussis, 1 auxiliaire intentionnellement ignoré |
cargo build -p memories -p memories-relay --release --locked -j 1 |
Réussie |
cargo ndk -t arm64-v8a check -p memories --locked -j 1 |
Réussie ; compilation uniquement du code conditionnel Unix |
Le test ignoré est l'exécutable enfant utilisé par le test IPC et il est explicitement exécuté dans ce contexte avec injection d'identifiants secrets. Ce n'est pas un scénario de sécurité omis.
Les tests exercent le chiffrement authentifié et l'altération du transport, l'état SQLite chiffré, les mots de passe incorrects, la troncature des points de contrôle, l'ordre des fragments, les permissions, l'approbation et la révocation des appareils, le refus de réautorisation d'identité, l'appartenance partagée, le rejeu, les révisions simultanées, la résolution des divergences de politique et la restauration indépendante de sauvegarde. Un véritable test de démon CLI couvre le déverrouillage, sudo au terminal, le refus de lecture des identifiants secrets, l'approbation d'empreinte exécutable, la suppression des sorties enfants, l'audit signé, le périmètre MCP et le verrouillage. Un véritable test WebSocket vérifie le routage actif et le nettoyage des salles après déconnexion.
L'implémentation des tubes nommés Windows utilise un cadrage bloquant. Une tentative
d'implémentation PIPE_NOWAIT a échoué à la régression du démon réel et a été remplacée ;
les limites de disponibilité pour un même utilisateur sont documentées dans SECURITY.md.
Artefacts Windows de référence (chemins relatifs à la copie de travail ; les sorties de compilation sont ignorées par
Git). La CLI a également réussi l'exécution de --version et --help :
| Artefact | SHA-256 |
|---|---|
| CLI Windows (compilation historique) | c9086eb0dfabc0fbdb0ce8ba37a8f82b837c551138aa8d2fe900df2e6d4b7495 |
| Relais Windows (compilation historique) | 7a3713068f28d10e4c839a5c0587b85e1502b1a8bc7fe4ef6e42b8c349244b77 |
Flutter et bibliothèques mobiles natives
Chaîne d'outils : Flutter 3.44.2 / Dart 3.12.2, Android NDK 28.2.13676358, plateformes Android SDK 35, 36 et 37.0, Gradle 9.1.0.
| Vérification | Résultat |
|---|---|
dart format --output=none --set-exit-if-changed lib test integration_test |
Réussie |
flutter analyze |
Réussie, aucun problème |
flutter test |
3 tests de widgets réussis |
| Compilations de production Rust FFI Android ARM64 et x86_64 | Réussies |
| Test d'intégration natif sur émulateur Android API 35 x86_64 | Réussi |
| Installation APK Android normale et parcours de fumée de l'interface | Réussis |
Les tests de widgets vérifient qu'un échec de démarrage natif laisse la bibliothèque verrouillée, que le passage en arrière-plan ferme les dialogues de contenu et efface l'état d'autorisation, et que l'expiration après inactivité ferme aussi un dialogue de contenu déjà ouvert. Les réponses asynchrones tardives sont rejetées après le changement de génération d'autorisation mobile. Le test d'intégration natif utilise une base temporaire sur l'appareil plutôt qu'un serveur simulé. Il initialise le véritable service Rust, écrit et lit une mémoire, exige l'élévation pour ajouter des identifiants secrets, refuse leur lecture, vérifie la chaîne d'audit, verrouille tous les handles natifs et déverrouille le contenu persistant sans restaurer l'élévation. Le répertoire du dispositif est supprimé après le test.
L'émulateur exécute une image API 35 x86_64 existante en mode lecture seule, sans
enregistrer d'instantané. La sortie des tests est disponible localement dans
target/android-native-test.log. La compilation Android émet un ancien avertissement de version XML du SDK
provenant de la chaîne d'outils d'un plugin, mais cela n'a pas empêché la compilation ni l'exécution
native. Le SDK de compilation de l'application est 37 pour satisfaire les exigences du plugin de stockage sécurisé.
L'APK final à point d'entrée normal a été recompilé après les tests d'intégration, installé
et exercé par automatisation de l'interface Android. Les vérifications ont réussi pour le démarrage avec le
véritable plugin de stockage sécurisé, l'initialisation du mot de passe, la création d'une bibliothèque et d'une
mémoire, la lecture de cette mémoire, le passage en arrière-plan avec contenu ouvert, le retour à un
écran verrouillé et le déverrouillage pour relire le contenu persistant. Cela vérifie
l'application normale, pas seulement le point d'entrée des tests d'intégration. Les preuves de l'interface sont stockées dans
target/android-ui-startup.xml, target/android-ui-initialized.xml,
target/android-ui-memory-saved.xml, target/android-ui-content-open.xml,
target/android-ui-background-locked.xml et
target/android-ui-unlocked-persisted-content.xml. Seules des données de test synthétiques ont été
utilisées. L'émulateur en lecture seule a été arrêté après vérification.
APK de référence : mobile/build/app/outputs/flutter-apk/app-debug.apk, 177,630,089 octets.
SHA-256 : 1d671906316c139eca786e89a5cca2c5d7895a825c0d58f4c32e71e6ff8be382.
Il s'agit d'un APK de développement signé pour le débogage, pas d'une version de boutique.
arm64-v8a et x86_64 incluent tous deux le moteur Flutter et la bibliothèque Rust FFI.
Les bibliothèques JNI sources correspondent aux bibliothèques fusionnées de Gradle ; les bibliothèques
de Gradle dépouillées de leurs symboles correspondent au contenu de l'APK final. La suppression des symboles explique pourquoi une comparaison directe
des empreintes source/APK diffère. Valeurs SHA-256 des bibliothèques Rust empaquetées :
| ABI | SHA-256 |
|---|---|
arm64-v8a |
6475026924b2e0434b1bbb945b21f9fa1684c53760ba228a72e062e519835d8c |
x86_64 |
3a208026380c0cc164f1f80c25de6daad3120857c4f2c9e96bf34e91912e9c1e |
Le cache de compilation de débogage Windows a été déplacé vers
D:/memories-build-cache/20260908/windows-debug pour libérer de l'espace disque pour la validation
de l'émulateur. Les sources et artefacts de production restent dans la copie de travail. Les compilations Android
ont utilisé un target/gradle-home propre à la tâche pour éviter l'ancienne configuration de proxy
de l'hôte, ainsi qu'un dépôt local contenant les JAR exacts du moteur Flutter
vérifiés avec les métadonnées HTTPS officielles. Aucun code moteur ni source du cache de plugin
n'a été modifié. Les répertoires caches, wrapper et jdks de ce répertoire Gradle
sont des jonctions vers le cache Gradle de l'hôte.
Plateformes et validation restante
- Les vérifications d'exécution de bureau Linux et macOS n'ont pas été exécutées sur cet hôte Windows. La compilation croisée Android n'établit pas la correction de l'exécution Linux ou macOS.
- La compilation Xcode iOS, l'exécution sur simulateur/appareil, la signature, le comportement de Keychain et le XCTest natif nécessitent un hôte macOS et n'ont pas été exécutés ici.
- L'exécution sur appareil Android ARM64 physique n'a pas eu lieu ; une compilation croisée réussie seule n'établit pas le comportement matériel ni les garanties de stockage sécurisé.
- La CI définit des vérifications Rust Windows/Linux/macOS et Flutter, mais aucun résultat CI distant n'est revendiqué. Aucune signature de production ni publication en boutique n'a eu lieu.
- Aucune revue cryptographique indépendante, test d'intrusion ni test de ressources à grande échelle
n'a été effectué. Consultez
SECURITY.mdavant d'utiliser de véritables secrets.
Valeurs par défaut du client et génération de compétence (2026-10-01)
memories default set/get/deleteeffectue un aller-retour sous un--homejetable, rejette les clés inconnues et les valeurstypeinvalides, et supprimedefaults.jsonlorsqu'il est vide.- Les commandes de liste appliquent les valeurs par défaut
vault/type/categorylorsque les options sont omises. - Les commandes world/thing/event de persona déterminent le coffre/la ressource omis à partir des valeurs par défaut
persona/vault(VAULT/ASSET, forme avec barre oblique ou ressource avec coffre par défaut). memories skill generate/agents generateécrivent AGENTS.md ou unSKILL.mddisposé en compétence hors ligne sans persona ; elles refusent l'écrasement sans--force.cargo test --workspace --lockedcouvre les tests unitaires et d'intégration de ces chemins.