Repository navigation
[Bug] Continuing web session loses 25 native tools and matching prompt sections between turns #6155
poojanajani-strique
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Bug report: standard web session loses 25 native tools and matching prompt sections between turns; background job cannot be stopped
Summary
A captured two-turn web session started a managed background shell job successfully. On the next user request,
close the background task, the recorded request catalog had lost 25 native tools, includingbash,job_list,job_output, andjob_kill. Corresponding system-prompt sections also disappeared. All 225 MCP tools remained, and every retained tool schema was identical.The capability loss is confirmed in the session export. Its initiating lifecycle/configuration event is not known. This report does not claim a proven core race or a deterministic clean-install reproduction.
Environment and qualification
standard.zai/glm-5.3-flash, reasoning efforthigh. Logged provider/model configuration did not change between the two headers.ee55cf07920a021a6a609b23fcfd0c9cafcf9297, based on0.1.5-alpha.1; the relevant core files match upstream commit5dda764ed3aa172535a7967b06ff95d9cbfe536a.session.v3.jsonl, 354 JSON records, including 353 contiguous events (seq0 through 352), 2 turns, 54 tool calls with corresponding results. Private paths, account data, credentials and correlation identifiers are omitted below.Observed sequence
seq 224/ JSONL line 226 it calledbashwithrun_in_background: true;seq 225returnedstarted background job bash-1. A later shell call verified HTTP 200 from the dev server.close the background task.bashorjob_killcall was emitted during turn 2. The agent instead entered an unrelated MCP-call loop and eventually supplied manual shutdown instructions. The capture contains no successful agent-issued shutdown.These are steps observed in this incident, not a claim that waiting this long deterministically reproduces the loss. No preset switch, unmount or reconstruction event explaining the change appears in this export; absence from this log does not prove none occurred at the host level.
Request-catalog evidence
Exactly these names were removed; no new tool was added:
The remaining non-MCP tools were:
The later system-prompt event is
seq 240/ JSONL line 242. Its filesystem, shell, job-control, goal and workflow sections are absent. This is a change in Harness's recorded request context, not merely the model overlooking a tool which was still listed.Expected behavior
A continuing standard-preset session should retain its native capabilities unless configuration or policy deliberately changes them. If capabilities are intentionally removed, that transition should be observable, and loss of job-control access should be explained to the agent/user.
Relevant source and limits of attribution
The simultaneous disappearance of tools and prompt sections is consistent with composition, registration lifetime or scope visibility changing. This remains an inference. Host lifecycle logs and a reproduction are needed to distinguish those mechanisms. Ordinary preset-file generation changes preserve existing standing generations in the inspected implementation, so this report does not attribute the failure to normal file refresh.
Existing preset mount/invariant tests were run against the checkout: 57 passed across 2 files. They do not reproduce or fix this incident.
Related reports
bashafter a QQbot disposal/reconstruction path. Similar symptom, but this case is a top-level web session, explicitly records catalog and prompt shrinkage, and has no corresponding lifecycle transition in its export. A common cause is not established.Useful next diagnostic
Capture agent scope ancestry, standing-generation identity, registration disposal and resolved tool/prompt contributions before and after a continuing web session becomes idle or its plugins reload. Compare the runtime registry with the exact assembled model request. The regression should assert preservation of the shell/job tool set, not just that a second response completes.
Redacted evidence and verifier
The following allowlisted summary is derived from the export. It is not a full raw session or provider-wire trace. The accompanying verifier checks catalog changes, call/result correspondence, normalized assistant-to-dispatch identity, approval counts and stop-message ordering without executing any archived command.
Redacted event summary (JSON)
{ "kind": "allowlisted_summary_of_captured_events_not_raw_provider_wire", "records": 354, "events": 353, "catalogs": [ { "seq": 12, "jsonl_line": 14, "total": 257, "mcp": 225, "other": 32 }, { "seq": 242, "jsonl_line": 244, "total": 232, "mcp": 225, "other": 7 } ], "removed_tools": [ "ask_user_question", "bash", "create_goal", "edit", "exit_plan_mode", "get_goal", "glob", "grep", "interrupt_agent", "job_kill", "job_list", "job_output", "list_agents", "ralph", "read", "read_image", "send_message", "skill", "subagent_fork", "todo_write", "update_goal", "web_fetch", "web_search", "workflow", "write" ], "retained_schemas_identical": true, "retained_non_mcp": [ "learning_evidence", "learning_propose", "memory_mutate", "memory_read", "memory_search", "memory_stats", "subagent" ], "all_54_assistant_calls_match_dispatch_and_have_results": true, "turn_2_repeated_call": { "name": "mcp__meta_ads__ads_get_ad_accounts", "arguments": { "advertiser_request": "close the background task", "client_conversation_id": "<REDACTED>" }, "calls": [ { "seq": 244, "step": 1 }, { "seq": 251, "step": 2 }, { "seq": 255, "step": 2 }, { "seq": 265, "step": 3 }, { "seq": 272, "step": 4 }, { "seq": 282, "step": 5 }, { "seq": 289, "step": 6 }, { "seq": 299, "step": 7 }, { "seq": 310, "step": 8 }, { "seq": 317, "step": 9 }, { "seq": 324, "step": 10 }, { "seq": 334, "step": 11 }, { "seq": 341, "step": 12 } ], "approval_decisions": [ { "seq": 246, "outcome": "allowed-once" }, { "seq": 253, "outcome": "allowed-once" }, { "seq": 257, "outcome": "allowed-once" }, { "seq": 267, "outcome": "allowed-once" }, { "seq": 274, "outcome": "rejected" }, { "seq": 284, "outcome": "rejected" }, { "seq": 291, "outcome": "rejected" }, { "seq": 301, "outcome": "rejected" }, { "seq": 312, "outcome": "rejected" }, { "seq": 319, "outcome": "rejected" }, { "seq": 326, "outcome": "rejected" }, { "seq": 336, "outcome": "rejected" }, { "seq": 343, "outcome": "rejected" } ], "outcome_counts": { "allowed-once": 4, "rejected": 9 } }, "stop_message": { "seq": 307, "text": "stop calling meta ads tools" }, "calls_after_stop_admitted": 5, "repeat_reminder_seqs": [ 263, 280, 308, 332, 349 ], "shutdown_tool_calls_in_turn_2": 0 }Standalone capture verifier (Python 3)
Run locally against the original export using
python3 extract-public-evidence.py /path/to/session.v3.jsonl. The private export is intentionally not attached. This is an audit of historical evidence, not a reproduction of the initiating lifecycle change.Local inspection-plugin follow-up
A separate local skills-manager Context viewer defect was reproduced and fixed in that private plugin version 0.3.1: it duplicated historical catalogs per request until exceeding its 4 MiB response limit, and its failure response omitted the required
detailsobject. After repair, the original chat opens and refreshes successfully, preserving all 50 requests and both catalogs. This read-only inspection repair does not restore or explain the native capabilities missing from the recorded model request. It is not being reported here as an upstream defect.All reactions