Changelog
v1.5.1 — 13 juin 2026
Section intitulée « v1.5.1 — 13 juin 2026 »Security follow-up to v1.5.0. Extension des backends Keychain à Linux (libsecret / D-Bus) et Windows (DPAPI).
- Keychain Linux —
libsecretvia D-Bus. Stockage des credentials dans le keyring GNOME/KDE sans passer par~/.seshat/config.json. Fallback automatique si libsecret est absent. (#651) - Keychain Windows — DPAPI (Data Protection API). Les secrets sont chiffrés avec les credentials Windows de l’utilisateur courant. (#653)
v1.5.0 — 12 juin 2026
Section intitulée « v1.5.0 — 12 juin 2026 »Sécurité des credentials + qualité de vie CLI.
Sécurité
Section intitulée « Sécurité »- macOS Keychain — Les credentials (tokens, clés privées) sont désormais stockés dans le Keychain macOS via Keychain Services.
~/.seshat/config.jsonne contient plus de secrets en clair. Gérer avecseshat secrets set/get/list/delete. (#574)
-
seshat uninstall— Teardown guidé avec export de sécurité. Exporte la base SQLite, révoque les webhooks GitHub App, nettoie~/.seshat/. Propose une étape “sauvegarde bundles légaux” avant suppression. (#573) -
effort_hoursdéclaratif —seal_*etannotateacceptent maintenant un paramètreeffort_hoursdirect. L’horodatage d’audit n’est plus ajouté automatiquement. Le chemin Jira/Notion reste disponible en parallèle. Résout le tracking #448. (#646)
v1.4.2 — 27 mai 2026
Section intitulée « v1.4.2 — 27 mai 2026 »Session de fixes Alberto Esperón. Six corrections + un nouvel outil MCP, tous déclenchés par un test end-to-end externe (24 frictions remontées en une session). Les quatre frictions critiques et deux high sont livrées dans cette version.
Sécurité
Section intitulée « Sécurité »- Scan automatique des secrets avant scellement —
seal_contentetseal_fileanalysent le contenu AVANT toute persistance (fichier, ledger, IP Secure) pour détecter mots de passe, tokens API, clés privées, chaînes de connexion DB en clair. Le sceau est refusé si une fuite est trouvée, avec un payload structuré pour que l’agent propose une version expurgée. Override possible viaforce_secret_scan: trueaprès revue manuelle. (#410)
-
Troncature silencieuse des descriptions à 200 caractères — le schéma MCP accepte 500 chars mais SESHAT amputait silencieusement à 200 dans le ledger. Les métadonnées bibliographiques (titre + revue + DOI + ISSN) étaient mutilées sur le certificat eIDAS. Désormais 500 chars sont conservés intégralement, et
annotaterejette explicitement les valeurs >500 au lieu de tronquer en silence. (#411) -
Dashboard inutilisable au premier lancement — sans
ODATA_USER/PASS, tous les endpoints renvoyaient 503 et 6 composants Lit plantaient surundefined. Le dashboard est maintenant booté sans configuration sur loopback (127.0.0.1/::1/localhost) — la sécurité non-loopback reste fail-closed (#324 préservé). Les composants ont un fallback gracieux quand l’API renvoie une erreur. (#408) -
seshat updatese figeait dans un contexte non-interactif — le prompt de confirmation gardait la boucle d’événements Bun vivante (interactif) et signalait un faux succès silencieux (non-interactif). Désormais : détection robuste (!stdin.isTTY,CI=*,SESHAT_NON_INTERACTIVE=1), erreur claire avec exit code 1 hors TTY, timeout de 60s de sécurité sur le prompt. Nouvel alias--yespour--force. (#409) -
seshat doctorflaguait à tort des entrées vérifiables — le check étiquetait “invalid fingerprints” toutes les entrées non re-hachables, mélangeant lesfile:*vérifiables depuis le vault avec lesjira:*/n8n:*/notion:*(sources dynamiques sans snapshot). Trichotomie introduite : verified (vault re-hashé) / non re-verifiable (source dynamique) / invalid (corruption réelle). (#414)
- Nouvel outil
fetch_certificate— IP Secure / Certigna génère le certificat eIDAS de manière asynchrone :ipsecure_certificate_urlest souventnulldans la réponse immédiate d’un seal. Ce nouvel outil va le chercher quelques minutes plus tard à partir d’unledger_id(préféré) ou d’un couple(ipsecure_project_id, contribution_id). Statuts retournés :ready,already_persisted,pending,not_configured. Total des outils MCP : 18 → 19. (#415)
Limitation connue (à traiter dans v1.4.3)
Section intitulée « Limitation connue (à traiter dans v1.4.3) »effort_hoursreste non-déclaratif — aucun outil de scellement n’accepte un paramètrehours, etannotatene peut pas mettre à joureffort_hours. Le seul chemin actuel est via les worklogs Jira ou la propriété NotionHours— ce qui implique un workflow de tracking RH, contraire au principe « SESHAT enregistre une déclaration de l’utilisateur, pas une mesure observée ». Tracking en cours dans #448.
v1.4.1 — 25 mai 2026
Section intitulée « v1.4.1 — 25 mai 2026 »self_updaterenvoyait une erreur trompeuse en l’absence de cosign (#387) — le tool MCPself_updateconfondait “download + checksum réussis mais cosign manquant” avec “download échoué”. La réponse est maintenant discriminée :download_failed,checksum_mismatch,cosign_not_installed(avec trois options de remédiation),signature_invalid.
v1.4.0 — 25 mai 2026
Section intitulée « v1.4.0 — 25 mai 2026 »Faits marquants
Section intitulée « Faits marquants »Deux correctifs convergents, déclenchés par un retour utilisateur réel (Alberto, via report_issue) :
- Dashboard SPA embarqué dans le binaire compilé — plus d’erreur “Not Found” en cas d’absence de
dashboard.tar.gz(install.shskippait silencieusement le download sur problème réseau).src/dashboard/est désormais encodé dans le binaire (~525 KB) et servi depuis une carte mémoire si~/.seshat/dashboard/est absent. (#379) - GIT_HOST_TOKEN exfiltré dans les configs MCP client (#376) —
seshat configforwarderait le PAT GitHub depuis~/.seshat/config.json(0600) vers le fichier de config MCP (0644, lu par Claude Desktop & co). Le blocenvn’est plus émis : le binaire lit~/.seshat/config.jsonau démarrage. Action requise : rotater le PAT GitHub si déjà ajouté avant cette version.
- Pipeline de build —
npm run buildexécutebun scripts/embed-dashboard.tsavanttsc/bun build --compile. Le fichiersrc/dashboard-embedded.tsest commité pour quetscpasse sur un checkout frais sans build préalable. - Workflow de release —
dashboard.tar.gzn’est plus généré ni publié.
v1.3.x — Stabilisation Jinnove
Section intitulée « v1.3.x — Stabilisation Jinnove »Bascule de l’ancrage blockchain (EAS / Base L2) vers IP Secure / Jinnove (Certigna, eIDAS QTSP). L’ancrage blockchain a été retiré ; les colonnes eas_uid / tx_hash du ledger sont conservées en lecture pour les données historiques. SESHAT fonctionne sans IP Secure (sceau local uniquement) — c’est l’option souveraine par défaut.
v1.2.x — IP Secure Hub (architecture)
Section intitulée « v1.2.x — IP Secure Hub (architecture) »Introduction du Push-to-Hub : seal_* met les preuves dans une queue locale (hub_push_queue) qu’un worker en arrière-plan dépile vers un Hub d’entreprise (Next.js / Prisma). Invariant : un Hub down ne bloque jamais un scellement local.
v1.1.x — Faisceau d’indices
Section intitulée « v1.1.x — Faisceau d’indices »Ajout du graphe de relations entre preuves (ledger_relations : derives_from, implements, refines, releases). Permet de tisser un faisceau d’indices entre une note de recherche, un commit, une PR et une release — la valeur juridique vient de la convergence des sources indépendantes, pas du hash isolé.
v1.0.0 — Première version stable
Section intitulée « v1.0.0 — Première version stable »- Serveur MCP avec les outils de base
- Multi-plateforme : Forgejo, GitHub, GitLab
- CLI :
init,config,status,seal,serve - Bundle légal pour dépôt APP / INPI
Versions antérieures (beta)
Section intitulée « Versions antérieures (beta) »Les versions v0.x-beta (janvier–février 2026) ne sont plus supportées. Le pipeline de migration vers v1.x est automatique au premier démarrage d’un binaire ≥ 1.0 sur une base existante.