fix(browser): live Developer Mode revocation + restart-safe artifact TTL - #91695
Merged
kshitijk4poor merged 3 commits intoAug 21, 2026
Merged
Conversation
…ection The global broker snapshotted browser.extension_control.developer_mode once at construction, so flipping it OFF in config did not revoke raw CDP/eval from already-attached controllers until process restart — a revocation failure at the highest-privilege browser surface (blocker 3 of andrexibiza's NousResearch#91535 review). select() now consults the live config on every privileged selection (explicit bool still pins for tests); off->on also unlocks without restart. Regression test drives both directions against an attached controller. Also drops the dead back-compat _artifact_store property (zero readers).
Artifact receipts live only in memory, so files left behind by a dead process were unreachable but persisted forever despite the advertised 300s TTL — a retention failure on the surface meant to be ephemeral (blocker 4 of andrexibiza's NousResearch#91535 review). A fresh ArtifactStore now removes every artifact-id-shaped file and stale *.tmp with no index entry (at construction the index is empty, so all such files are orphans). Non-artifact-shaped names are untouched. Regression: store -> recreate store over same root -> orphan+tmp gone, unrelated file kept.
… transcript _turn_transcript_messages pre-classified every message with _is_compressed_summary_message (full content flatten + prefix scan), then _message_response re-ran the same classifier inside its projection -- 2x per non-summary row, 3x per summary row on every run.completed emit. The outer guard was redundant: _message_response already yields display_kind hidden for pure handoffs. One projection call per row now. Surfaced by the post-merge simplify re-review of NousResearch#91517/NousResearch#91535.
kshitijk4poor
enabled auto-merge
August 21, 2026 17:24
This was referenced Aug 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the two live review blockers from @andrexibiza's #91535 re-review (Developer Mode revocation, restart-safe artifact TTL) plus the double-classification hot-path finding from the post-merge simplify pass.
Blockers 1 and 2 of that review (artifact scope composition, first-profile-wins store) were already fixed in #91535's merged head — the review was written against pre-fix commit
597bc49c65; see commits2b10313973/7b2b30f587on main.Changes
gateway/browser_control_broker.py: privileged capability selection (browser_evaluate/browser_cdp) now consults the LIVEdeveloper_modeconfig on everyselect()— flipping it off revokes raw CDP/eval from already-attached controllers without restart; on→off and off→on both covered. Explicit bool still pins the gate (tests/multi-tenant). Also removes the dead_artifact_storeback-compat property (zero readers).gateway/browser_control_artifacts.py: a freshArtifactStoresweeps orphan artifact-id-shaped files and stale*.tmpleft by a dead process — receipts are memory-only, so post-restart files were unreachable yet lived forever despite the advertised 300s TTL. Non-artifact-shaped names untouched.gateway/platforms/api_server.py:_turn_transcript_messagesclassifies each row once via the projection instead of pre-classifying then re-classifying inside_message_response(was 2x/3x full-content flatten per row perrun.completed).Validation
Refs #91535 (salvage of #85351 by @abundantbeing); addresses #91535 (review) (blockers 3–4).