Compare commits

..

1 Commits

View File

@@ -6301,4 +6301,4 @@ Original filing (2026-04-18): the session emitted `SessionStart hook (completed)
380. **Top-level `tokens --help --output-format json` hangs with zero stdout/stderr instead of returning bounded command help JSON** — dogfooded 2026-04-30 for the 02:30 nudge on current `origin/main` / rebuilt `./rust/target/debug/claw` with embedded `git_sha` `d95b230c`. After verifying #358 covered `cost --help`, a fresh adjacent probe on the token-budget surface showed the same silent failure class: repeated bounded runs of `timeout 8 ./rust/target/debug/claw tokens --help --output-format json` exited `124` with `stdout=0` and `stderr=0`. In the same rebuilt binary, `version --output-format json` returned promptly with version/build metadata, proving the binary itself and JSON output path are reachable. This is distinct from #358's cost help hang: the affected surface is the sibling `tokens` command help, which agents use before estimating prompt/session token budgets. **Required fix shape:** (a) make `tokens --help --output-format json` return static/bounded stdout JSON with `kind:"help"` or `kind:"tokens"`, `action:"help"`, usage, options, examples, supported output formats, and related slash/direct commands; (b) ensure help rendering does not initialize slow token accounting, session, or provider state; (c) if any dynamic provider is consulted, return a typed JSON timeout/unavailable error instead of hanging; (d) add regression coverage proving tokens help in JSON mode returns within a deterministic budget. **Why this matters:** token budgeting is a preflight clawability surface. If help hangs silently, automation cannot safely discover how to inspect or constrain token usage before running expensive prompts, and budget-aware wrappers stall at the discovery step. Source: gaebal-gajae dogfood follow-up for the 02:30 nudge on rebuilt `./rust/target/debug/claw` `d95b230c`.
381. **Top-level `cache --help --output-format json` hangs with zero stdout/stderr instead of returning bounded command help JSON** — dogfooded 2026-04-30 for the 03:00 nudge on current `origin/main` / rebuilt `./rust/target/debug/claw` with embedded `git_sha` `d95b230c`. After #358 and #380 landed for the cost/tokens preflight help hangs, a fresh adjacent probe on the cache-control surface showed the same silent failure class: repeated bounded runs of `timeout --kill-after=1s 8s ./rust/target/debug/claw cache --help --output-format json` exited `124` with `stdout=0` and `stderr=0`. In the same rebuilt binary, `version --output-format json` returned promptly with version/build metadata, proving the binary itself and JSON output path are reachable. This is distinct from the separate `/cache` slash-command envelope mismatch class: the affected surface here is top-level `cache` command help, where agents need bounded local discovery before deciding whether to inspect, clear, or summarize cache state. **Required fix shape:** (a) make `cache --help --output-format json` return static/bounded stdout JSON with `kind:"help"` or `kind:"cache"`, `action:"help"`, usage, options, examples, supported output formats, and related slash/direct commands; (b) ensure help rendering does not initialize slow cache/session/provider state; (c) if any dynamic provider is consulted, return a typed JSON timeout/unavailable error instead of hanging; (d) add regression coverage proving cache help in JSON mode returns within a deterministic budget. **Why this matters:** cache inspection and cleanup are recovery/control-plane operations. If cache help hangs silently, claws cannot safely discover cache semantics before attempting cleanup, and automation stalls before it can choose a non-destructive cache action. Source: gaebal-gajae dogfood follow-up for the 03:00 nudge on rebuilt `./rust/target/debug/claw` `d95b230c`.
365. **`doctor --output-format json` `system` check includes `git_sha` of the compiled binary but does not compare it against the current repository HEAD, emits no `stale_binary` warning, and reports `status:"ok"` even when the binary SHA differs from HEAD; `default_model` is `null` when no auth is configured but has no typed `reason` or `auth_required` flag** — dogfooded 2026-04-30 by Jobdori on `e939777f`. Running `./rust/target/debug/claw --output-format json doctor` when binary was compiled at `5eb1d7d8` and repo HEAD is `e939777f`: `system.git_sha: "5eb1d7d8"`, `system.status: "ok"` — no indication of staleness. No `stale`, `git_sha_matches_head`, or `head_sha` field in the system check. Separately, `system.default_model: null` with no accompanying `model_unavailable_reason`, `auth_required: bool`, or `config_source` field. Automation that reads `doctor` to validate pre-flight state cannot determine: (a) whether the binary is current; (b) why the model is null; (c) whether auth is missing or the model is intentionally unset. **Required fix shape:** (a) add `head_sha`, `git_sha_matches_head: bool` and `stale: bool` to the `system` check; (b) when `git_sha_matches_head: false`, set `status: "warn"` and add a summary message; (c) when `default_model: null`, add `model_unavailable_reason: "no_auth"|"no_config"|"other"` and `auth_required: bool`; (d) add regression coverage. Source: Jobdori live dogfood, mengmotaHost, `e939777f`, 2026-04-30.
400. **`status --output-format json` `workspace` has `session: "live-repl"` (non-null string) simultaneously with `session_id: null`, and `session_lifecycle.kind: "saved_only"` with `abandoned: true` — the session name and session ID are reported in contradictory states, and the lifecycle fields provide no `session_path` or `resume_command` to recover the abandoned session** — dogfooded 2026-04-30 by Jobdori on `e939777f`. Running `./claw --output-format json status` outside an active session returns `workspace.session: "live-repl"`, `workspace.session_id: null`, `workspace.session_lifecycle: {"abandoned":true,"kind":"saved_only","pane_command":null,"pane_id":null,"pane_path":null,"workspace_dirty":true}`. The `session` field implies an active named session, but `session_id: null` and `abandoned: true` indicate no active session; automation cannot tell from these fields alone whether a session is resumable, what file to pass to `--resume`, or whether the session name `"live-repl"` is a stable identifier. The `pane_command`/`pane_id`/`pane_path` fields are all null for abandoned sessions, providing no actionable recovery path. **Required fix shape:** (a) make `session` and `session_id` consistent — both null when no active session, both populated when active; (b) add `session_path` (path to the `.jsonl` file) and `resume_command` (full `claw --resume <path>` incantation) to the lifecycle fields when `kind:"saved_only"` so automation can recover without filesystem scraping; (c) add `workspace_dirty` explanation field (e.g., `dirty_reason: "uncommitted_changes"`); (d) add regression coverage proving the session name/ID pair is always consistent. Source: Jobdori live dogfood, `e939777f`, 2026-04-30.