Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

session_start and task_classified telemetry fire once per user turn, not once per session

Abierto
#1,047 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
typescript

Línea de trabajo

Comienza en packages/opencode/src/session/prompt.ts, en loop() alrededor de las líneas 364 y 498; después inspecciona el bloque de telemetría alrededor de la línea 939 y cómo están disponibles el estado específico de la sesión o los mensajes anteriores del assistant. Reproduce el problema con tres mensajes e inspecciona la telemetría. Se considera terminado cuando cada sesión emite un session_start y un task_classified desde el turno inicial, mientras que el trace intencionadamente por bucle de la línea 1088 permanece sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

session_start and task_classified are emitted once per user turn, not once per session. Session counts in telemetry are therefore inflated by roughly the average number of turns per session, and task_classified re-classifies intent on every turn instead of once from the opening message.

Detail

Both events are emitted from a if (step === 1) block in packages/opencode/src/session/prompt.ts:939:

  • session_start — packages/opencode/src/session/prompt.ts:953
  • task_classified — packages/opencode/src/session/prompt.ts:1004

step is not session-scoped. It is declared inside loop():

  • let step = 0 — packages/opencode/src/session/prompt.ts:364
  • step++ — packages/opencode/src/session/prompt.ts:498

and loop() is invoked once per prompt, i.e. once per user turn. So step === 1 means "first model step of this turn", and the block runs again for every subsequent message in the same session.

Impact

  • session_start overcounts sessions. A session with N user turns emits N session_start events, all carrying the same session_id.
  • Any funnel or retention metric built on session_start counts is proportionally wrong. De-duplicating by session_id at query time recovers the true count, so historical data is salvageable, but no current dashboard is doing that unless it was written with this in mind.
  • task_classified reports the intent of whatever the user most recently typed, not the task the session was opened for. Its confidence distribution is also skewed by short follow-up messages ("thanks", "yes", "try again") being classified as tasks.
  • Cost: an extra pair of tracked events per turn, plus the classifyTaskIntent regex sweep over up to 2000 characters per turn.

Reproduction

Start a session, send three messages, and inspect the emitted telemetry (or set a breakpoint on the step === 1 block). Three session_start events are emitted with identical session_id.

Suggested fix

Gate both events on something session-scoped rather than on step. Options, roughly in order of preference:

  1. Check whether the session already has prior assistant messages before emitting — a session that has already produced output is not starting.
  2. Keep a per-session "already emitted" claim in the telemetry module, similar to how other once-per-session state is tracked.
  3. Emit at session creation instead of in the prompt loop, which is where the event name says it belongs.

Note that packages/opencode/src/session/prompt.ts:1088 also uses if (step === 1), but that one is intentionally per-loop() (it traces the system prompt once per loop invocation, and the comment there says so). Only the telemetry block at line 939 is affected.

Lenguaje dominante
TypeScript
Estrellas
813
Forks
134
Merge medio
2 d 2 h
PR fusionados (30 d)
67

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de AltimateAI/altimate-code

Todos los issues de AltimateAI/altimate-code

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.