chopratejas--headroom
0ef5fcb1c5
Security / Dependency audit (pip-audit) (push) Has been cancelled
Security / CodeQL (javascript-typescript) (push) Has been cancelled
Security / CodeQL (python) (push) Has been cancelled
Security / Secret scan (gitleaks) (push) Has been cancelled
rust / test (ubuntu) (push) Has been cancelled
rust / simulator e2e (macos-latest) (push) Has been cancelled
rust / simulator e2e (ubuntu-latest) (push) Has been cancelled
rust / simulator e2e (windows-latest) (push) Has been cancelled
rust / wheels (aarch64-apple-darwin) (push) Has been cancelled
rust / wheels (x86_64-unknown-linux-gnu) (push) Has been cancelled
rust / wheels (x86_64-apple-darwin) (push) Has been cancelled
rust / audit (push) Has been cancelled
rust / parity (nightly, allowed to fail during Phase 0) (push) Has been cancelled
CI / commitlint (push) Has been skipped
Dev Containers / validate (.devcontainer/devcontainer.json, default) (push) Failing after 0s
Dev Containers / validate (.devcontainer/memory-stack/devcontainer.json, memory-stack) (push) Failing after 0s
Dev Containers / validate-worktree (push) Failing after 0s
CI / changes (push) Failing after 4s
Deploy Documentation / validate (push) Has been skipped
Deploy Documentation / deploy (push) Failing after 1s
Init Native E2E / init-native (ubuntu-latest, claude) (push) Failing after 1s
Init Native E2E / init-native (ubuntu-latest, codex) (push) Failing after 1s
Install Native E2E / install-native (ubuntu-latest) (push) Failing after 1s
OpenCode Plugin / typecheck + build + test (push) Failing after 1s
Init Native E2E / init-native (ubuntu-latest, copilot) (push) Failing after 1s
Release Please / release-please (push) Failing after 1s
Wrap E2E / docker-wrap-e2e (push) Failing after 1s
Wrap Native E2E / wrap-native (ubuntu-latest) (push) Failing after 1s
Init E2E / docker-init-e2e (push) Failing after 4s
Merge Conflicts / merge-conflicts (push) Failing after 4s
CI / lint (push) Has been cancelled
CI / build-wheel (push) Has been cancelled
CI / build-wheel-windows (push) Has been cancelled
CI / prefetch-model (push) Has been cancelled
CI / test-dashboard-ui (push) Has been cancelled
CI / test (1) (push) Has been cancelled
CI / test (2) (push) Has been cancelled
CI / test (3) (push) Has been cancelled
CI / test (4) (push) Has been cancelled
CI / test-extras (push) Has been cancelled
CI / test-agno (push) Has been cancelled
CI / build (push) Has been cancelled
CI / workflow-validation (push) Has been cancelled
CI / docker-native-e2e (push) Has been cancelled
CI / windows-native-wrapper (push) Has been cancelled
CI / macos-native-wrapper (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-code-nonroot name:code-nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-code-slim name:code-slim]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-code-slim-nonroot name:code-slim-nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-nonroot name:nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-slim name:slim]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-slim-nonroot name:slim-nonroot]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime name:]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-code name:code]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-code-nonroot name:code-nonroot]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-code-slim name:code-slim]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-code-slim-nonroot name:code-slim-nonroot]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-nonroot name:nonroot]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-slim name:slim]) (push) Has been cancelled
Docker / docker-manifest (map[bake_target:runtime-slim-nonroot name:slim-nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime name:]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-code name:code]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-code-nonroot name:code-nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-code-slim name:code-slim]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-code-slim-nonroot name:code-slim-nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-nonroot name:nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-slim name:slim]) (push) Has been cancelled
Docker / docker-build (map[name:amd64 platform:linux/amd64 runs_on:ubuntu-24.04], map[bake_target:runtime-slim-nonroot name:slim-nonroot]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime name:]) (push) Has been cancelled
Docker / docker-build (map[name:arm64 platform:linux/arm64 runs_on:ubuntu-24.04-arm], map[bake_target:runtime-code name:code]) (push) Has been cancelled
Docker / promote-latest (push) Has been cancelled
Init Native E2E / init-native (macos-latest, claude) (push) Has been cancelled
Init Native E2E / init-native (macos-latest, codex) (push) Has been cancelled
Init Native E2E / init-native (macos-latest, copilot) (push) Has been cancelled
Install Native E2E / install-native (macos-latest) (push) Has been cancelled
Wrap Native E2E / wrap-native (macos-latest) (push) Has been cancelled
113 行
3.9 KiB
Python
113 行
3.9 KiB
Python
"""Synthetic session fixtures that reproduce known waste patterns.
|
|
|
|
These build :class:`SessionData` shaped like the real patterns Headroom Learn
|
|
must catch, so both unit tests and the RTK-loop eval (``benchmarks/
|
|
rtk_loop_learn_eval.py``) drive the analyzer from one source of truth instead
|
|
of hand-mocking calls inline.
|
|
|
|
The headline fixture is the **RTK re-fetch loop**. RTK truncates a shell
|
|
command's output; when the truncation drops what the agent needed, the agent
|
|
re-runs a *variant* to fetch more. Critically these calls SUCCEED
|
|
(``is_error=False``) — the loop is invisible to failure-only analysis, which
|
|
is exactly why it was historically under-weighted.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .models import ErrorCategory, SessionData, ToolCall
|
|
|
|
|
|
def _tc(
|
|
name: str,
|
|
command: str,
|
|
output: str,
|
|
*,
|
|
msg_index: int,
|
|
is_error: bool = False,
|
|
error_category: ErrorCategory = ErrorCategory.UNKNOWN,
|
|
) -> ToolCall:
|
|
"""Build a ToolCall, keying input on the field the tool's summary reads."""
|
|
if name.lower() in ("bash", "shell"):
|
|
input_data = {"command": command}
|
|
elif name.lower() in ("read",):
|
|
input_data = {"file_path": command}
|
|
elif name.lower() in ("grep",):
|
|
input_data = {"pattern": command}
|
|
else:
|
|
input_data = {"command": command}
|
|
return ToolCall(
|
|
name=name,
|
|
tool_call_id=f"tc_{msg_index}",
|
|
input_data=input_data,
|
|
output=output,
|
|
is_error=is_error,
|
|
error_category=error_category if is_error else ErrorCategory.UNKNOWN,
|
|
msg_index=msg_index,
|
|
output_bytes=len(output),
|
|
)
|
|
|
|
|
|
def rtk_refetch_loop_session(
|
|
session_id: str = "rtk-loop",
|
|
*,
|
|
repetitions: int = 5,
|
|
bytes_per_call: int = 4000,
|
|
) -> SessionData:
|
|
"""A session where RTK truncation forces repeated re-fetches of one command.
|
|
|
|
The agent greps a large log; RTK rewrites each invocation with an output
|
|
limit. Each call succeeds but returns a truncated window, so the agent
|
|
bumps the limit / shifts the window and re-runs — ``repetitions`` times.
|
|
None of the calls error. The fix a good guardrail should produce: fetch the
|
|
full result up front (e.g., disable RTK truncation for this command, or
|
|
grep into a file and read it once).
|
|
"""
|
|
calls: list[ToolCall] = []
|
|
limit = 50
|
|
for i in range(repetitions):
|
|
# Same base command; only the output-limit varies — the RTK signature.
|
|
command = f"grep -rn 'TimeoutError' logs/ | head -{limit}"
|
|
output = "logs/app.log:" + ("x" * (bytes_per_call - 20)) + "\n(truncated)"
|
|
calls.append(_tc("Bash", command, output, msg_index=i * 2))
|
|
limit += 50 # agent asks for more next time — still truncated
|
|
return SessionData(session_id=session_id, tool_calls=calls)
|
|
|
|
|
|
def error_loop_session(
|
|
session_id: str = "error-loop",
|
|
*,
|
|
repetitions: int = 4,
|
|
) -> SessionData:
|
|
"""A session where the same call fails repeatedly (classic retry loop)."""
|
|
calls: list[ToolCall] = []
|
|
for i in range(repetitions):
|
|
calls.append(
|
|
_tc(
|
|
"Bash",
|
|
"python3 run_tests.py",
|
|
"python3: command not found",
|
|
msg_index=i * 2,
|
|
is_error=True,
|
|
error_category=ErrorCategory.COMMAND_NOT_FOUND,
|
|
)
|
|
)
|
|
return SessionData(session_id=session_id, tool_calls=calls)
|
|
|
|
|
|
def one_off_error_session(session_id: str = "one-off") -> SessionData:
|
|
"""A session with a single, non-repeated failure — should NOT be a loop."""
|
|
return SessionData(
|
|
session_id=session_id,
|
|
tool_calls=[
|
|
_tc(
|
|
"Read",
|
|
"/etc/missing.conf",
|
|
"Error: file not found",
|
|
msg_index=0,
|
|
is_error=True,
|
|
error_category=ErrorCategory.FILE_NOT_FOUND,
|
|
),
|
|
_tc("Bash", "ls -la", "total 8\ndrwxr-xr-x", msg_index=1),
|
|
],
|
|
)
|