You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: specify and verify resumable incremental transcript capture across Codex rollouts #716
Cortex reads Codex rollouts and deduplicates profile updates by session. Those inspected paths do not establish a replayable append contract across continuation files, late delivery, transcript rewrites and lost acknowledgements. This is a bounded investigation finding, not proof that every capture path lacks a cursor.
Proposed solution
Audit all capture producers first. Reuse any existing cursor/idempotency mechanism; otherwise define durable progress, source identity, prefix rewrite detection and delivery identity.
Acceptance evidence
One logical session spans two rollout files; a late event from the first file cannot drop the second file.
Repeat delivery and simulate acceptance followed by acknowledgement loss; the final retained conversation has no missing or duplicated turns.
Modify an earlier turn and expose replacement/reconciliation explicitly.
Verify real native events in each advertised host, separately from synthetic hook tests.
Alternatives considered
Keep the current behavior and document its limits. This remains valid where the added guarantee has no user need; the issue should close with a documented product decision rather than assume that copying Hindsight is always appropriate. Reuse existing Cortex mechanisms before adding a second pipeline.
Scope assessment
HIGH. Raised from the October 10 Hindsight/Cortex comparison. Static observations refer to the pinned revisions below. They do not establish successful execution of Hindsight's whole pipeline or a repository-wide absence in Cortex. Priority is a proposal, not a release blocker.
Première tranche livrée dans #874 (Refs #716) : l'audit des producteurs de capture que l'issue demande en premier (docs/audits/transcript-capture-producers-2026-11-05.md, sans changement de code).
Constat principal : aucun producteur ne garde de curseur dans un transcript, rien ne découvre les rollouts Codex, et le seul lecteur de rollout n'en tire que les noms d'outils et le nombre de tours. Il n'y a donc aucun mécanisme existant à réutiliser pour le contenu des messages.
Tranches restantes, après la décision produit du propriétaire (curseur durable, ou limites documentées puis fermeture, cf. Alternatives considered) :
Test : une session sur deux fichiers rollout atteint le journal et le profil avec l'activité des deux fichiers. Le correctif commence à l'entrée Codex (session_queue.py clé le job par sha256(session_id) seul et écarte le second SessionEnd), puis la séparation des clés journal/profil pour les appels directs.
Test de redélivrance et de perte d'acquittement sur le worker de capture (il acquitte avant de stocker).
Détection de réécriture d'un tour antérieur, ou limite documentée.
Reçus d'événements natifs par hôte annoncé, séparés des tests de hooks synthétiques.
CI autopilot : mise en hold, la suite de #716 attend une décision du propriétaire.
La tranche 1 (audit des producteurs, #874) est fusionnée. Elle conclut qu'aucun mécanisme existant ne peut être réutilisé : aucun producteur ne garde de curseur, rien ne découvre les rollouts Codex, et aucun ne capture le texte des messages d'un rollout (docs/audits/transcript-capture-producers-2026-11-05.md).
Question à trancher (issue, Alternatives considered) :
A. Contrat d'ajout rejouable. L'autopilot enchaîne alors les tranches listées dans le commentaire précédent. La première change la clé du job Codex dans plugins/hypermnesia-mcp-codex/scripts/session_queue.py : sha256(session_id) plus l'identité du fichier rollout, au lieu de sha256(session_id) seul, pour qu'un second SessionEnd de la même session ne soit plus écarté. Elle sépare aussi les clés journal et profil.
B. Limites documentées puis fermeture. L'autopilot écrit la page des limites (perte du second rollout, absence de détection de réécriture, fenêtre de dédup de 1000 lignes) et l'issue se ferme sur cette décision.
Un commentaire de cdeust qui choisit A ou B lève ce hold au passage suivant.
Décision : cette issue n'attend plus de réponse du propriétaire.
Le propriétaire a demandé le 12 novembre 2026 que les issues avancent sans lui ; il ne répondra pas aux questions posées ici. Ce commentaire de cdeust lève le hold et précise la demande. Il vaut pour toute la suite de cette issue.
Tranche toi-même chaque question restée ouverte : d'abord une décision écrite et acceptée du dépôt (ADR accepté, docs/), puis ce que le texte de l'issue propose ou exclut, puis les standards du dépôt ; à défaut, la plus petite tranche qui réalise ce que l'issue demande. Une valeur qui manque se mesure, elle ne s'invente pas.
Écris la décision dans un commentaire marqué <!-- ci-autopilot decision --> (ce qui est retenu, la raison et sa source, ce qui est écarté, comment revenir en arrière), puis livre la tranche dans une PR. Une décision écrite ne se rejoue pas aux passages suivants.
Ne repose pas autopilot:hold pour une question : seulement pour l'irréversible, un accès que tu n'as pas, une dépendance nommée encore ouverte ou le plafond de tentatives, en nommant exactement ce qui manque.
Jamais de tag, de release, de montée de version du projet ni de déclenchement manuel d'un workflow.
Hold autopilot:hold levé : un commentaire de cdeust (« Décision : cette issue n'attend plus de réponse du propriétaire », 12/11/2026) a été posté après la pose du hold.
Activity
cdeust commentedon Nov 5, 2026
Première tranche livrée dans #874 (
Refs #716) : l'audit des producteurs de capture que l'issue demande en premier (docs/audits/transcript-capture-producers-2026-11-05.md, sans changement de code).Constat principal : aucun producteur ne garde de curseur dans un transcript, rien ne découvre les rollouts Codex, et le seul lecteur de rollout n'en tire que les noms d'outils et le nombre de tours. Il n'y a donc aucun mécanisme existant à réutiliser pour le contenu des messages.
Tranches restantes, après la décision produit du propriétaire (curseur durable, ou limites documentées puis fermeture, cf. Alternatives considered) :
session_queue.pyclé le job parsha256(session_id)seul et écarte le second SessionEnd), puis la séparation des clés journal/profil pour les appels directs.Generated by Claude Code
fixup! docs(audit): inventory the transcript capture producers (#716,…
Merge pull request #874 from cdeust/fix/716-rollout-capture
cdeust commentedon Nov 6, 2026
CI autopilot : mise en hold, la suite de #716 attend une décision du propriétaire.
La tranche 1 (audit des producteurs, #874) est fusionnée. Elle conclut qu'aucun mécanisme existant ne peut être réutilisé : aucun producteur ne garde de curseur, rien ne découvre les rollouts Codex, et aucun ne capture le texte des messages d'un rollout (
docs/audits/transcript-capture-producers-2026-11-05.md).Question à trancher (issue, Alternatives considered) :
plugins/hypermnesia-mcp-codex/scripts/session_queue.py:sha256(session_id)plus l'identité du fichier rollout, au lieu desha256(session_id)seul, pour qu'un second SessionEnd de la même session ne soit plus écarté. Elle sépare aussi les clés journal et profil.Un commentaire de
cdeustqui choisit A ou B lève ce hold au passage suivant.Generated by Claude Code
cdeust commentedon Nov 12, 2026
Décision : cette issue n'attend plus de réponse du propriétaire.
Le propriétaire a demandé le 12 novembre 2026 que les issues avancent sans lui ; il ne répondra pas aux questions posées ici. Ce commentaire de
cdeustlève le hold et précise la demande. Il vaut pour toute la suite de cette issue.docs/), puis ce que le texte de l'issue propose ou exclut, puis les standards du dépôt ; à défaut, la plus petite tranche qui réalise ce que l'issue demande. Une valeur qui manque se mesure, elle ne s'invente pas.<!-- ci-autopilot decision -->(ce qui est retenu, la raison et sa source, ce qui est écarté, comment revenir en arrière), puis livre la tranche dans une PR. Une décision écrite ne se rejoue pas aux passages suivants.autopilot:holdpour une question : seulement pour l'irréversible, un accès que tu n'as pas, une dépendance nommée encore ouverte ou le plafond de tentatives, en nommant exactement ce qui manque.Règle complète : #343 (comment)
Écrit par la session « écosystème autonome » sur instruction du propriétaire (12 novembre 2026).
Generated by Claude Code
cdeust commentedon Nov 12, 2026
Hold
autopilot:holdlevé : un commentaire decdeust(« Décision : cette issue n'attend plus de réponse du propriétaire », 12/11/2026) a été posté après la pose du hold.Generated by Claude Code