Skip to content

feat: rotação de sessão por teto de contexto vivo — reseed compacto no lugar de sessões gigantes - #48

Merged
elberrd merged 1 commit into
mainfrom
feat/rotacao-sessao
Aug 23, 2026
Merged

feat: rotação de sessão por teto de contexto vivo — reseed compacto no lugar de sessões gigantes#48
elberrd merged 1 commit into
mainfrom
feat/rotacao-sessao

Conversation

@elberrd

@elberrd elberrd commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Contexto

No estudo do info-move, 94% de todos os tokens (≈755M de 804M) eram cache reads do prefixo de sessões por-agente-por-run: build → fix_* → fix_ui compartilham UMA sessão que cresceu até 7–9,4M de contexto, e cada turno relê o prefixo inteiro (custo quadrático no número de turnos — uma fase build sozinha chegou a 36M tokens/US$22). Retomar uma sessão de 180k custa ~180k de cache read POR TURNO; uma sessão nova paga um cache write pequeno uma vez — o break-even é um punhado de turnos, e fases de build rodam centenas.

O que muda

  • defaults.session_rotation_context (default 180000, 0 = nunca): acima do teto de contexto VIVO, a próxima fase do agente inicia sessão nova com um preâmbulo de reseed compacto (<2KB) no user prompt: paths que o run já mudou (cap de 50), transcript arquivado como referência read-only e as regras de autoridade do workspace. O system prompt permanece byte-estável (regra de caching preservada).
  • Decisão só no início da fase — correções dentro da fase continuam a sessão; um marker de engine-death na fase desarma a rotação (o preâmbulo de continuação já reseeda); relay legs herdam a decisão.
  • Pi: pi_session.jsonl é renomeado pi_session.<n>.rotated.jsonl (nunca apagado). Claude: o adapter passa a reportar context_tokens = contexto vivo do último turno (input+cache_read+cache_write), não o acumulado da invocação (que era inútil para qualquer decisão). Cursor: sem usage ⇒ nunca rotaciona (documentado).
  • Cada rotação é impressa e traceada (session_rotation, tipo log — visível nos filtros existentes do viewer); agent_map.json ganha context_tokens por agente.

Superfícies

fia.config.yaml (knob comentado no defaults), DOCS.md (yaml de exemplo + seção nova "Session rotation" ao lado do relay), cookbook run_fda.md (o evento é normal, não defeito).

Testes

test/fia-session-rotation.test.js (harness de engines fake do fia-relay, nenhum CLI spawnnado): rotação dispara no cap com preâmbulo e sessão nova; abaixo do cap resume; 0 desliga; arquivo Pi arquivado com conteúdo intacto e citado no preâmbulo; system prompt idêntico entre rotações; normalizador tolerante do knob. Suite completa 1436 pass + lint limpo.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NPYaKxNaVRhPumKbawFNT3

…o lugar de retomar sessões gigantes

Medido em projeto real: 94% de TODOS os tokens eram cache reads do prefixo de
sessões por-agente-por-run que cresciam até 7-9M de contexto — cada turno relê
o prefixo inteiro (custo quadrático no nº de turnos). Uma fase build sozinha
chegou a 36M tokens.

- defaults.session_rotation_context (default 180000, 0 = off): acima do teto,
  a PRÓXIMA fase do agente inicia sessão nova com preâmbulo de reseed compacto
  (<2KB: paths mudados pelo run com cap de 50, transcript arquivado, regras de
  autoridade do workspace) no user prompt — system byte-estável para caching.
- Decisão só no início da fase (correções dentro da fase continuam a sessão);
  marker de engine-death na fase desarma a rotação (o preâmbulo de continuação
  já reseeda); sessão Pi é renomeada pi_session.<n>.rotated.jsonl (nunca
  apagada); evento log session_rotation + note no console.
- Adapter claude passa a reportar context_tokens = contexto VIVO do último
  turno (input+cache_read+cache_write), não o acumulado da invocação; o agent
  map persiste context_tokens por agente.
- fia.config.yaml, DOCS.md (§9 defaults + seção "Session rotation") e cookbook
  run_fda.md documentam o knob e o evento.
- Testes em test/fia-session-rotation.test.js (harness de engines fake do
  fia-relay): rotação no cap, resume abaixo do cap, 0 desliga, arquivo Pi
  arquivado, system prompt idêntico entre rotações.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPYaKxNaVRhPumKbawFNT3
@elberrd
elberrd merged commit aa3b7c3 into main Aug 23, 2026
7 checks passed
@elberrd
elberrd deleted the feat/rotacao-sessao branch August 23, 2026 20:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant