Session-close gate

Înainte ca Wednesday să zică “ok, sesiune sigură, putem închide” sau să claim-uie “good state”, rulează un checklist obligatoriu. Nu e politicos, e infrastructural. Dacă sări peste el, următoarea sesiune bootează peste state inconsistent și gate 4 (State Drift) o oprește cu STALE. Aici e ce face gate-ul.

Ce este

Session-close gate = secvența standard de update + verificare care trebuie trecută complet ÎNAINTE de orice claim de “session safe”. Codificată în două locuri (durabil cross-conversation): CLAUDE.md la vault root + feedback_session_close_protocol.md în memoria Cowork.

Triggered când:

  • Operator semnalează închidere (“ne închidem”, “save state”, “good night”)
  • Fază se termină (phase boundary)
  • Mid-task handoff la alt runtime (rate limit, switch LLM)

NU e triggered la fiecare “ne luăm o pauză” scurt — doar la închidere reală.

Cum funcționează — pașii

1. Update runtime_state.json

Fișierul canonical de stare operațională. Trei câmpuri critice:

  • top phase — faza curentă (ex: 338+19)
  • last_meaningful_session — phase + date + 1-line summary ale ultimei sesiuni încheiate
  • pending entries — trimite la 1-line, descriptive, fără verbozitate

Verbozitatea narativă se duce în runtime_state_notes.md (separat de Phase 330 round-4 ca să țină boot read-ul ≤15k tokens).

2. Append la runtime_notes_trail.json

Entry append-only cu shape strict: phase, date, note, runtime, unpushed, plus opțional realignments: [] — quote-uri verbatim unde operatorul a corectat abordarea Wednesday mid-session (“nu, nu așa”, “actually Y”, “stop doing Z”). Pattern-ul myPKA “what user realigned” — viitoarele sesiuni văd corecțiile reale, nu doar outcome-ul curatat.

3. Update scratchpad.md

  • last_updated la azi
  • current_focus = DOAR sesiunea curentă, 1-2 paragrafe MAX. Fără chain-uri precedente în body — alea se append-uiesc la scratchpad_archive.md ÎNAINTE de overwrite.
  • pending_next_steps inline, scurt

Regula durabilă: scratchpad-ul e short-range carry-over, NU diary. Dacă pare că devine istoric, se taie + arhivează.

4. Update pending_backlog.md (dacă e cazul)

Doar dacă s-a schimbat ceva operator-side (backlog de acțiuni umane).

5. Update Docker registries (dacă e cazul)

Dacă s-a schimbat state pe Gideon / Jarvis Docker: edit _raw/it_tools/nas/docker_stack_registry.md + jarvis_docker_stack_registry.md. Append la Operations Log la jos.

6. Update Task Handoff

Dacă sesiunea s-a încheiat mid-task: write task_handoff.md cu done steps + next steps + context. Dacă task-ul e complet: clear (task: "—"). Asta e ce prinde Gate 3.5 la următorul boot.

7. Voice hooks (cross-LLM, Phase 335)

  • T3 vocab capture — extract termeni organici → wednesday-vocab.md
  • Voice-gate self-check — Wednesday verifică propriul output împotriva Reject List

Spec: _infra/core/wednesday/doctrine/voice_and_tone.md § Session-Close Voice Hooks. Aplică pe toate runtime-urile.

8. KG / Honcho update

Update Knowledge Graph + Honcho memory layer pentru lessons learned + facts noi descoperite. Honcho ține memorie longitudinală peer-to-peer.

9. Re-read + Drift Gate

Acum citește din nou toate fișierele updated + rulează cross-check de consistență fazelor (same gate ca la boot, dar forward verification). Sau direct: bash _infra/scripts/wednesday-state-gate.sh.

Exit 0 = clean. Exit 1 = warn (mai continui dar logează). Exit 2 = stale, OPREȘTE + corectează + re-rulează.

10. Skill review (background)

Dacă au apărut pattern-uri reusable noi (≥3 future uses probabile), mintează skill via wednesday-skill-create.py. Săptămânal wednesday-skill-review.py face tally + promote / kill.

De ce contează

Trei motive concrete, fiecare cu istorie de cost:

1. Drift compounding. O sesiune închisă cu state inconsistent → boot-ul următor citește scratchpad-ul vechi + runtime_state nou → confuzie context → Wednesday inventează istorie. Closing gate previne asta la sursă.

2. Token budget. Phase 330 round-4 a împărțit fișierele exact pentru că scratchpad.md + runtime_state.json ajunseseră la ~12k tokens fiecare. Closing gate forțează compactarea (current_focus = 1-2 paragrafe, restul la archive).

3. Cross-LLM continuity. Dacă închizi pe Claude și bootezi pe Grok mâine, Grok citește aceleași fișiere. Dacă starea nu e curată, Grok pornește deja în drift. Closing gate e contractul cross-runtime.

Cum interacționez cu el

Tu, operator, NU trebuie să rulezi nimic manual. Wednesday face gate-ul automat când semnalezi închidere. Ce poți face însă:

  • Verifică claim-ul. Dacă Wednesday zice “session safe” dar pare suspect, spune: “run state gate”. Se rulează wednesday-state-gate.sh și raportează exit code.
  • Provocă realignments. Dacă într-o sesiune Wednesday merge în direcția greșită și o corectezi, acel quote intră în realignments: [] — viitoarea sesiune vede corecția, nu doar outcome-ul.
  • “handoff” — comandă manuală de scriere task_handoff.md. Wednesday întreabă: task name, done, next, context. Util când schimbi runtime intentional (Claude → Grok pentru cost) sau ai rate limit.

Limite / gotchas

  • Closing gate nu rulează la fiecare pauză. Doar la închidere reală sau phase boundary. Dacă vrei să forțezi, spune explicit “close session”.
  • Drift gate e bidirecțional. Aceeași verificare la boot (Gate 4) și la close. Dacă boot-ul prinde STALE, înseamnă că closing-ul anterior a fost sărit sau a eșuat — investighează acolo.
  • Voice hooks pot fi zgomotoase. T3 vocab capture poate ridica false positives pe argou tehnic. Logging-ul e append-only — corectările manuale rămân vizibile.
  • NU declara “session safe” peste un gate failed. Regula durabilă. Dacă Wednesday claim-uie state bun fără gate clean, e bug — semnalează.

Unde sunt documentate

  • CLAUDE.md la vault root — § Session-Close Discipline (autoritativ)
  • _infra/core/wednesday/feedback_session_close_protocol.md — protocol Cowork
  • _infra/core/wednesday/wednesday.md § Session close requires
  • _infra/scripts/wednesday-state-gate.sh — verificare automată
  • _infra/scripts/extract-wednesday-vocab.py — T3 capture
  • _infra/scripts/voice-gate.py — voice-gate self-check
  • _infra/scripts/wednesday-skill-review.py — skill promotion tally