Skip to content

test(browser): require Agent Task browser-process termination evidence - #142

Draft
seonghobae wants to merge 6 commits into
test/mv3-failure-profile-cleanup-evidencefrom
test/agent-task-browser-process-termination-evidence
Draft

test(browser): require Agent Task browser-process termination evidence#142
seonghobae wants to merge 6 commits into
test/mv3-failure-profile-cleanup-evidencefrom
test/agent-task-browser-process-termination-evidence

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Partial implementation of #28, dependency-realigned on the current PR #141 head bc9b265f31f2c4c7ddb700e865ec1f7b3daa6b01.

Buyer/reliability boundary

The controlled pinned-Chromium Agent Task must prove that the Chrome root process actually terminates after session/driver shutdown. Temporary-profile deletion alone is not sufficient because a surviving browser process can retain resources or task state.

Implemented contract

The runner:

  • binds the ChromeDriver-reported positive browser PID to its exact Linux /proc/<pid>/stat start-time identity;
  • parses command text containing spaces or closing-parenthesis characters without confusing fixed proc-stat suffix fields;
  • applies bounded process-exit waiting;
  • treats PID absence or reuse with a different start time as termination of the original identity;
  • fails closed when the same PID/start-time identity remains live at the deadline; and
  • emits browser_process_terminated: true only after the exact identity has ended.

TDD provenance

Exact test-only RED head 146f742b140b54577b1e349be9c4a815fd6691d9 established the missing PID/start-time/process-exit contract before production support existed. Subsequent commits implemented and hardened the boundary.

Stack repair

The prior branch head was still rooted at obsolete PR #141 head 42af52f77336112c4fbe1da5c5283899f6bd288e. GitHub's clean synthetic merge of that child with live #141 produced tree 642f8ed67ff1bb791504d21b9f1460e967c52243; this branch was then advanced non-destructively with merge commit 6c01e5370b0001c58f89cd772cbaf62e197db9f5, preserving the child delta while incorporating live #141.

Fresh ancestry now reports live #141 as the merge base with the branch ahead-only; no predecessor CI/review evidence is transferred.

Exact-current proof

On unchanged exact head 6c01e5370b0001c58f89cd772cbaf62e197db9f5 against exact live base bc9b265f31f2c4c7ddb700e865ec1f7b3daa6b01:

  • CI run 32606849757: success;
  • Rust contracts job 97113009399: checkout, Python repository contracts, formatting, workspace/all-target check, full tests, strict Clippy, and rustdoc success;
  • Production coverage job 97113009621: exact production function/line/region/branch measurement and enforcement success;
  • Manifest V3 Compatibility run 32606849733: success;
  • current formal reviews: none;
  • current inline review threads: none;
  • GitHub reports the Draft mergeable against its exact live prerequisite.

No prerequisite result, predecessor result, synthetic merge result, status, comment, or model output is treated as approval.

Stack / authority

This PR remains Draft while #141 and its prerequisite stack remain active. PR #143 is a descendant and is being revalidated independently on its own fresh head. No merge, approval, workflow, secret, ruleset, tag, release, or publication mutation is included.

Truth boundary

This lane proves termination of the exact Chrome root identity for the controlled Linux Agent Task path. Descendant-process-set teardown, broader process ownership, cross-platform supervision, authenticated browser provenance, and OS-wide orphan absence remain separate boundaries.

@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as ready for review August 26, 2026 22:05

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Open in Devin Review

Comment thread scripts/ci/run_mv3_compatibility.py
Comment thread scripts/ci/run_mv3_compatibility.py
@seonghobae
seonghobae marked this pull request as draft August 27, 2026 11:34
…-evidence' into test/agent-task-browser-process-termination-evidence

Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head review of 015025f2539e4fb1dbd7d259ec22dad50f944396 against #141 fbdf64f5818ce0c53b475196d5bcfa2ac9900846 (5 September 2026).

The two remaining informational findings do not warrant a source change:

  • PRRT_kwDOTulPlM6cob2c: malformed UTF-8 cannot establish a valid PID/start-time identity. A controlled decode-failure probe confirmed that the error propagates rather than becoming terminated: true. Actual absence or a successfully parsed different start time is required for termination/reuse evidence. Strict rejection may lose availability under a reused non-UTF-8 process name; it does not fabricate termination, and silently treating unreadable evidence as exit would weaken this boundary.
  • PRRT_kwDOTulPlM6cob3m: the five-second deadline is an explicit bounded cleanup gate. A controlled monotonic-clock probe confirmed one bounded poll and failure at the deadline while the exact original identity remains live. The existing caller refuses to emit successful process-termination evidence after that failure. No measured pinned-browser timeout regression was reproduced here, so no timeout increase or retry is justified.

All 187 Python contracts pass on the unchanged head, including parser ambiguity, PID reuse, live-identity timeout and successful-task termination-gate checks. The extra probes are controlled diagnostics on macOS, not live Linux process or pinned-browser execution evidence. Worktree remains unchanged.

Current hosted Rust/coverage run 33916627099 and pinned-Chromium run 33916627091 are cancelled. No current full Rust, hosted compatibility, counted approval, process-set cleanup, or protected-main delivery is claimed. This Draft remains dependent on the active parent stack.

seonghobae added a commit that referenced this pull request Sep 5, 2026
Record #249 parent adoption, #142/#143 verified failure boundaries, and the exact #255 remaining quality failures. Preserve historical snapshots and separate local proof from hosted acceptance.

Commit-Message-Assisted-by: Codex (via Codex)
Signed-off-by: Seongho Bae <me@seonghobae.me>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant