codex: usage is never captured in a real run (tokens: null) because the Stop hook payload has no transcript_path — read_usage() returns before the codex-rollout parser runs
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 70/100
Línea de trabajo
Rastrea el manejo de usage desde src/bmad_loop/adapters/generic.py a través de src/bmad_loop/signals.py y compáralo con el descubrimiento de rollouts en probe.py. Añade una prueba basada en fixtures para un payload Stop sin transcript_path que siga produciendo usage a partir de un rollout de Codex, y actualiza docs/adapter-authoring-guide.md para documentar el requisito o el fallback; la prueba debería fallar cuando se elimine el descubrimiento.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
- Observed: bmad-loop 0.11.1 (installed via uv tool; source clone identical on the cited files), Windows 11, psmux backend, Codex CLI 0.153.4, profile
codex(usage_parser = "codex-rollout", hooks dialectcodex-hooks-json,.codex/hooks.jsonrelaying SessionStart + Stop tobmad_loop_hook.py). Run20260909-144751-8e8b, review stage on[adapter.review] name = "codex", model gpt-6-astra, 38-minute session that completed normally via the Stop hook. Journal:{"kind": "session-end", "task_id": "TASK-2831-review-1", "status": "completed", "tokens": null, "tokens_weighted": null}— while the dev stage (claude) on the same run reportedtokens: 19777795, tokens_weighted: 2460930. The task dirtasks/TASK-2831-review-1/holds onlyheartbeat.json+prompt.txt(nomessages.json). - The rollout files for that session exist and DO carry usage:
~/.codex/sessions/2026/09/09/rollout-2026-09-09T15-01-52-01a08530-0657-7ba1-91dd-8dd32958cdec.jsonl(39token_countevents) androllout-2026-09-09T15-02-26-01a08530-8bb7-7910-afd1-5cab56cd8bef.jsonl(18; the session spawned a subagent) —payload.type == "token_count"withpayload.info.total_token_usage.*, exactly whattally_codex_rolloutreads. - Code path:
src/bmad_loop/adapters/generic.py:1252-1254—read_usage()doesif not result.transcript_path: return Nonebeforetally_usage(self.profile.usage_parser, path)(:1262).src/bmad_loop/signals.py:113fillstranscript_path=data.get("transcript_path")from the hook payload. Codex's Stop hook payload carries notranscript_path(it is a Claude Code field), so for the codex profile the declaredusage_parseris unreachable in a real run — every codex session logstokens: null, and the[limits]token budget / cost ledgers see 0 for Codex. - Why
bmad-loop probe-adapter codex --probereports usage fine: probe mode discovers the rollout itself (probe.py~line 790, glob~/.codex/sessions/*/*/*/rollout-*.jsonl→infer_token_schema()), bypassingread_usage(); the same-day probe on this machine returnedinput_tokens: 2942, cache_read_tokens: 12928, output_tokens: 5fromrollout-2026-09-09T14-46-06-01a08521-99b8-72a0-b98b-156a48d74ca2.jsonl. The probe's captured Stop payload has notranscript_pathkey either — the JSON report keys arebinary, binary_found, captured_events, cli, declared_events, dialect, help, hooks_registered, known_profile, mode, next_steps, schema_version, tokens, transcript, usage_parser, version, warnings, withtranscript.locationcoming from the glob. - Proposed fix (either): (a) when the profile's usage parser is
codex-rolloutand the payload has notranscript_path, resolve the rollout from the Stop payload's session/thread id — rollout filenames end with the session UUID (rollout-<timestamp>-<session_id>.jsonl), so~/.codex/sessions/**/rollout-*-<session_id>.jsonlis deterministic; sum usage across the subagent rollouts spawned by that session if they can be attributed; or (b) reuse the probe's discovery (newest rollout whosepayload.cwd== the unit's cwd and whose first timestamp ≥ session start) as a fallback insideread_usage(), behind the profile (transcript_discovery = "codex-sessions-glob"). Add a zero-token test with a fixture rollout + a Stop payload lackingtranscript_paththat asserts usage is populated (ablation: remove the fallback → the test must fail). - Also worth a line in
docs/adapter-authoring-guide.md:usage_parseron a profile is only reached when the CLI's Stop payload suppliestranscript_path.
Source
found-in: bmad-loop 0.11.1 (uv tool) + source clone E:\vibe-coding\bmad-loop (main), Windows 11 · session: Claude Code 4d0f4496 (2026-09-09) · while: first color-dev-loop run with the review stage on Codex (customthing/ai-pod-auto PR #766) · evidence: journal session-end tokens null vs dev stage populated; rollout files with 39/18 token_count events; generic.py:1252-1254, signals.py:113, probe.py glob discovery
- Lenguaje dominante
- Python
- Estrellas
- 146
- Forks
- 68
- Merge medio
- 1 d 22 h
- PR fusionados (30 d)
- 46
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de bmad-code-org/bmad-loop
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
bmad-code-org/bmad-loop#835 ·
Los mantenedores suelen responder en 1 día
-
area:adapters area:psmux bug P4
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
bmad-code-org/bmad-loop#673 · 8 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
bmad-code-org/bmad-loop#865 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
bmad-code-org/bmad-loop#864 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
psmux: probe and launch the same pwsh executable (pin one absolute path, quote it in pipe_pane)Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
bmad-code-org/bmad-loop#863 ·
Los mantenedores suelen responder en 1 día
Todos los issues de bmad-code-org/bmad-loop
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
SR_SECURITY_DESCRIPTOR.fromString drops the SACL when no DACL is presentPosiblemente ocupada @paul7436 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
equinor/fmu-sumo-uploader#302 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
modelscope/evalscope#1821 ·
Los mantenedores suelen responder en 1 día
-
Sanity on ansible-core devel fails: ignore-2.23.txt references the removed import-3.9 testPosiblemente ocupada @yurnov la tomó hoy. Abiertoneeds_triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
ansible-collections/kubernetes.core#1275 ·
Los mantenedores suelen responder en 1 día