fix(bin): attach replay-safe context to actionable wakes - #2801
Conversation
Confidence Score: 5/5The PR appears safe to merge because no blocking failure remains. No blocking failure remains. Reviews (9): Last reviewed commit: "no-mistakes(document): Document safe wak..." | Re-trigger Greptile |
|
Speaking as Kun's firstmate: VISION: aligns. Token efficiency is first-class: actionable wakes currently spend frontier turns reconstructing crew state. Scripts own that mechanics; Class: corrective. Fixes #1692 on the existing always-on wake path. Not a new default product behavior. Security: none. Local Overlap: CI: HEAD Workflows approved: yes (CI 32595118059, NM 32595117981). Land-eligible: NO. Waiting on CI; even a green CI still needs a matching NM attestation from the author. Not waiting on the captain. Captain-flag NOW: no. |
|
The updated head f96caaa contains the reviewed and tested bounded wake-context fix. Both CI workflows are currently blocked with action_required because this pull request originates from a fork. A maintainer of kunchenguid/firstmate needs to approve and run the workflows for this head. |
|
Head 8e4b399 now includes the Greptile P1 fix, the post-presentation redrain fix, the lock-loss read-only fallback, and the scoped removal of Pi ENOBUFS handling. The no-mistakes attestation for this exact head is published. Please approve and run workflows 32754863467 (Require no-mistakes) and 32754863582 (CI), which are currently action_required for this fork pull request. |
|
Speaking as Kun's firstmate: Scheduled 11:10am PT 8/24 pass. VISION.md read in full from current main VISION (inspected Class recirc: default-behavior (was corrective on 8/22). Wakes grow by default; not opt-in. Security: none. Local present/drain only; 0600 cache; packet/status/file bounds; no workflow-file / secret / injection path. Greptile is not a gate. Overlap: CI / NM: HEAD Workflows approved this pass: CI 32760559545, Require no-mistakes 32760559622. Not green at comment time. Land-eligible rec: NO (default-behavior; NM attestation mismatch; CI not yet green). Captain-flag NOW: no. This is a captain-decision if it should ever land as always-on wake growth. It is also waiting-on-author to regenerate |
|
Speaking as Kun's firstmate: recirc on current class=default-behavior. Bounded wake-context attaches to actionable wakes without an opt-in flag. Never auto-eligible. VISION.md: honest interface / token-lean context aligns; authority does not align as auto (new default presentation on every wake). Scripts align. Restart aligns. Spine mixed. Vendor aligns. Scope aligns. This HEAD: Waiting on author for a HEAD-matching |
|
Speaking as Kun's firstmate: recirc on current class=default-behavior. VISION.md (inspected
This HEAD: Security: none. Overlap: Land-eligible rec: NO. Captain-flag NOW: no (NM attestation mismatch is an author/CI blocker; the always-on product call waits until green CI + matching NM + no other blockers). This is a captain-decision if it should ever land as always-on wake growth. It is also waiting-on-author to regenerate |
Intent
Corriger sur l’unique PR #2801 le P1 Greptile où un timeout ou fallback peut publier WAKE_ACK_REQUIRED avant le staging durable du status cursor, ce qui permet un ACK sans avancer le curseur et rejoue des statuts. Garder le changement chirurgical et les tests comportementaux déterministes, y compris queue vide et identité de status invalidée. Ne pas traiter crash pendant ACK, replay transactionnel général, buffer Pi, pannes d’I/O ou processus hostiles. Mettre à jour uniquement la PR existante #2801, aucune seconde PR et aucun merge. Conserver toutes les fonctions modifiées par cette livraison à 20 lignes maximum.
What Changed
fm-wake-context.v1projection with one aggregate collection deadline and durable post-presentation fallback receipts, then attach it to actionable Claude, Codex, and Pi wakes.WAKE_ACK_REQUIRED: ordinary drains commit the cursor first, wake-context drains stage it first, and the matching ACK merges the stage without regressing rotated status identities.Risk Assessment
✅ Low: Captain, les chemins queue vide et non vide bloquent désormais l’ACK si l’identité du status est invalidée, avec staging durable préalable et sans régression source substantielle détectée.
Testing
Le test comportemental ciblé est passé. Les deux parcours CLI démontrent qu’une identité invalidée bloque l’ACK sans avancer le curseur, puis qu’un retry permet l’ACK sans rejeu. Le transcript est l’artefact reviewer-visible adapté à cette modification CLI.
Evidence: Preuve CLI end-to-end curseur/ACK
Source: Preuve CLI end-to-end curseur/ACK
Queue non vide et vide : premier drain exit=1, aucun ACK, curseur inchangé; retry avec ACK exact; aucun rejeu après ACK.Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 2 issues found → auto-fixed ✅
bin/fm-wake-drain.sh:313- Le fallback manuel laisse encore publier WAKE_ACK_REQUIRED sans curseur durable. Si l’identité d’un status change après le snapshot, status_commit_presentation_snapshot échoue, mais cette ligne transforme l’échec en succès hors mode non-mutant. L’ACK est ensuite publié, consomme la queue sans avancer le curseur, puis le status est rejoué. Ne jamais absorber l’échec de staging dans cette frontière partagée, y compris pour la queue vide.bin/fm-classify-lib.sh:677- Contradiction avec le critère obligatoire « Conserver toutes les fonctions modifiées par cette livraison à 20 lignes maximum. » Dix fonctions touchées le dépassent, notamment status_open_decisions_incremental (112 lignes), status_commit_presentation_snapshot (23), status_merge_presentation_cursor (27), ordinary_wake_line (25), deux fonctions de fm-test-run.sh (105 et 123), ainsi que quatre fonctions englobantes ou de test (28 à 390 lignes). Il faut confirmer l’application littérale du critère puis extraire les branches ajoutées.🔧 Fix: Sécurise le staging du curseur avant tout ACK
✅ Re-checked - no issues remain.
✅ **Test** - passed
✅ No issues found.
bin/fm-test-run.sh tests/fm-wake-context.test.shParcours CLI defm-wake-drain.shavec invalidation atomique du status pendant la présentation, pour queue non vide puis queue videRetry du drain, exécution de l’ACK exact, puis troisième drain vérifiant l’absence de rejeugit status --shortaprès suppression du pilote temporairebin/fm-wake-drain.sh:136- Le message utilisateur affirme que les statuts ne seront pas réaffichés après cette présentation, mais le chemin wake-context les rejoue volontairement si l’ACK est interrompu. Sa correction relève du code exécutable, interdit dans cette phase documentaire.🔧 Fix: Confirm wake documentation remains accurate
1 warning still open:
bin/fm-wake-drain.sh:136- Le message promet que les statuts ne seront pas réaffichés, alors que le curseur n’est validé qu’à l’ACK et qu’une interruption avant ACK provoque leur rejeu. La même formulation existe dans tests/fm-wake-context.test.sh:75. Leur correction relève du code exécutable et des tests, interdits dans cette phase documentaire.✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.