5cd772a22d
* dev/resolve-agent: resolve a reproduced bug (review-or-fix) and prove it Adds the step after repro-agent: given a pointer to a completed repro run — a local session link or a CI run URL (--ci-link) — resolve-agent recovers the reproduction (verdict, per-facet breakdown, journey, the authored e2e test) and drives the bug to resolution. Two paths, decided by whether an open PR already fixes the bug: - Review path: check out the existing PR, run the repro test against it (pass = it fixes the bug; fail = it doesn't), review the diff, and comment findings on that PR — no competing PR opened. - Author path: audit the repro test against the unfixed tree so it fails on real buggy behavior, root-cause, fix, add targeted tests at the changed layer, and prove every live facet goes fail->pass. Robustness on the author path: hostile-env rerun of env-default tests; an independent cross-vendor review (a codex-native reviewer child on its own diff, fed a recurring-pitfalls checklist) before opening the PR, reusing the server + runner it already runs on. Opens a ready-for-review PR; does not merge. --skip-push commits locally without pushing. dev/resolve.py mirrors dev/repro.py; tests/dev/test_resolve.py unit-tests the driver helpers. Co-authored-by: Isaac * dev/resolve-agent: address PR review — base off origin/main, stricter ci-link parse, honest guard comment Review feedback on #4127: - Base the fix worktree on the latest origin/main, not this checkout's HEAD. Running the driver from a feature branch would otherwise drag unrelated commits into the fix worktree and contaminate the PR/review. Adds _resolve_base_ref() (fetch origin/main, fall back to local main, then HEAD). - Confirm before creating the worktree, so answering "no" no longer leaves an orphaned fix/<slug> worktree + branch on disk. - Parse the --ci-link URL structurally (scheme + github.com host + anchored path) instead of an unanchored substring regex, so a string that merely contains the run path (or a different host) is rejected. Adds rejection tests. - Soften the headless_subagent_purpose_guard comment in config.yaml: it only inspects sys_session_send, not the sys_session_create that launches the reviewer child, so it does not itself constrain that child — spawn_bounds caps the fan-out and the reviewer's read-only behavior rests on its prompt + the codex bundle's guardrails. - Fix two inaccurate inline comments (worktree base, absolute-agent-path rationale) to match the actual flow. Co-authored-by: Isaac * dev/resolve-agent: recover the pasted test from CI logs (repro-agent #4207) repro-agent now pastes the complete verbatim e2e test source into its final message before the JSON handoff. The CI job log echoes that message untruncated, so on the --ci-link path the log itself now carries the full test body — prefer reading it from the inline block there, with gh run download as the fallback. (A live --session transcript is still truncated, so the disk read off the repro session's workspace stays the robust path locally.) Co-authored-by: Isaac