docs(findings): the resize latch, read from viz source — and the gateway cert manifest fix #117
Open
triform-admin
wants to merge 2 commits from
docs/resize-latch-probe-a into main
pull from: docs/resize-latch-probe-a
merge into: triform:main
triform:main
triform:agent/atlas-native-codec-release-20260912
triform:agent/atlas-build-credentials-20260912
triform:agent/atlas-native-codec-20260912
triform:agent/atlas-release-ancestry-20260911
triform:capture/resize-ack-then-reconfigure
triform:fix/gateway-provenance
triform:fix/stack-yaml-describes-reality
triform:capture/audio-rearm
triform:capture/batch-c-control-kinds
triform:agent/mapdb-provenance
triform:capture/batch-b-file-chooser
triform:agent/atlas-push-recovery
triform:capture/batch-r-audio-resize-redial
triform:agent/iggygg-owner-migration-20260908
triform:docs/findings-audio-rearm-and-resize-stall
triform:feat/gateway-viewport-follow-switch
triform:test/e2e-specs-follow-auto-connect
triform:docs/claude-md-forgejo-queue
triform:capture/batch-a-rearm-clipboard-tabs
triform:docs/finding-worker-no-redial
triform:fix/broker-bye-keeps-socket
triform:ci/e2e-compose-path-align
triform:fix/gateway-certs-ownership
triform:feat/standalone-up
triform:feat/viewport-follows-window
triform:test/interactive-live-pieces
triform:docs/roadmap-ga
triform:feat/snappy-ux
triform:feat/snappy-ux-final
triform:build/rearm-final
triform:build/rearm-plus-control
triform:fix/ice-empty-candidate
triform:fix/ice-empty-candidate-final
triform:fix/dialogs-timing
triform:test/downloads-suite
triform:feat/downloads
triform:feat/downloads-final
triform:build/t8-ephemeral-request-v2
triform:test/real-user-e2e
triform:build/t8-ephemeral-request
triform:agent/e2e-drop-observability-v3
triform:build/t8-cpu-request
triform:docs/read-the-repo-first
triform:docs/known-positive-probe
triform:agent/e2e-drop-observability-v2
triform:agent/control-channel-consumer
triform:docs/verification-discipline-2
triform:docs/verification-discipline
triform:agent/cb-fidelity-wave1
triform:agent/cb-x264-thread-contract-20260819
triform:agent/cb-fidelity-t7-capacity-20260819
triform:agent/cb-fidelity-main-reconcile
triform:docs/standing-rules-merge-and-red
triform:agent/e2e-drop-observability
triform:fix/x264-hugepage-alignment
triform:fix/compose-worker-token
triform:ci/pin-and-followups
triform:feat/standalone-mode
triform:test/phase0-wire-ups
triform:chore/guest-release-44f2e20
triform:bake/main-44f2e20
triform:adm/move-out-of-compile-lane
triform:c8/three-unbuilt-tests
triform:c3/config-surface
triform:c7/transport-seam
triform:c5/reject-unknown-params
triform:verify/c4-with-tests
triform:c4b/wire-envelope-tests
triform:verify/tests-run-for-real
triform:fix/base-public-deps
triform:c4/wire-envelope-dialects
triform:fix/conformance-readme-media
triform:track6/docs-map
triform:track7/conformance-kit
triform:chore/guest-release-0a0d28c
triform:fix/ci-registry-login
triform:fix/step7-ldpath
triform:fix/t7-lane-restore-unittests
triform:feat/client-session-split
triform:fix/profile-var-rename-severed-x264
triform:agent/cb-api-pins-7727
triform:agent/a4-guest-provenance
triform:capstats-plus-rearm
triform:repin-buildjob-main
triform:cv2-capture-rearm-land
triform:cv2/ideal-guest-45b6899-capstats
triform:agent/cv2-capture-stats-health-gate
triform:cv2/gpu-death-recycle
triform:cv2/gpu-crash-watchdog
triform:cv2/idle-refresh-capturer
triform:cv2/walls-on-deployed
triform:fix/cv2-walls-guest
triform:exp/answer-buffer
triform:cv2/warm-snapshot-native-session
triform:build/cv2-ice-beginframe-v5
triform:cv2/wave-3-integration
triform:build/cv2-ice-beginframe-v4
triform:build/cv2-ice-beginframe-v3
triform:build/cv2-ice-beginframe-v2
triform:build/cv2-ice-beginframe-2e5d147
triform:cv2/framesink-retarget-resolution
triform:codex/cv2-framesink-retarget-20260609
triform:codex/controller-response-signaling-cache
triform:codex/native-ice-env-220646
triform:codex/native-env-controller-212857
triform:codex/session-reconcile-conflict-retry
triform:codex/revive-ended-browser-sessions
triform:codex/browserless-emptydir-budget
triform:cv2-96-dcsctp-verbose-capture
triform:cv2-95-dispatch-tail-trace
triform:cv2-95-input-dc-receive-trace
triform:cv2-95-setactivecapture-on-capture-start
triform:cv2-95-dc-before-transceiver
triform:fix/cv2-offerer-getstats-threading
triform:cv2/wave-2-integration
triform:cv2-guest-rtp-stats-obs
triform:cv2-ws-large-frame-reassembly
triform:cv2-compositor-redraw
triform:cv2-ice-observability
triform:cv2-89-svg-contentclient
triform:cv2-89-svg-pak-scale-fix
triform:codex/cv2-wave2-verification-20260522
triform:codex/cv2-91-native-frames
triform:build/cv2-83-65d65f0
triform:build/cv2-83-286f520
triform:build/cv2-83-6cb777d
triform:codex/cv2-wave2-recovery-20260522
triform:cv2/m5.5-pulse-env-runtime-wire
triform:cv2/m4-typed-dispatcher-runtime-wire
triform:cv2/wave-1-integration
triform:cv2/m3-r5-dc-host-adoption
triform:cv2/m3-r5-dc-host-adoption-rename
triform:cv2/m5-r1-screen-impl
triform:cv2/m4-m5-m6-runtime-wire
triform:cv2/m7-integration-staged
triform:cv2/m2-r5-rearch-rebased
triform:cv2/m2-track-source-deps
triform:cv2/m7-integration
triform:cv2/m2-r5-rearch
triform:integration/native-peer
triform:cv2/m0-ci-gate
triform:cv2/m1-native-pcf
triform:team-lead/native-webrtc-review-2026-05-13
triform:codex/chromeless-context-profile-isolation
triform:codex/chromeless-input-target-session
triform:codex/triform-sw-pool-pod-watchdog
triform:codex/phase2-idle-watchdog-env
triform:codex/chromeless-pattern-c-warm-pool
triform:codex/triform-disable-streamer-autostart
triform:codex/streamer-ice-servers
triform:codex/streamer-cdp-page-session
triform:codex/skip-disabled-signaling-smoke
triform:codex/chromeless-runtime-pool-wiring
triform:codex/chromeless-gateway-signaling-url
triform:codex/streamer-signaling-url
triform:codex/idle-watchdog-env
triform:feat/otlp-logs
triform:feat/wave-1-emitters
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
triform/chromeless!117
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "docs/resize-latch-probe-a"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Answers the resize defect's open question with a mechanism read from the pinned
Chromium source, plus one live probe. No C++ — attempt 3's code is
deliberately left unlanded.
The latch
Three attempts adjusted when we issue BeginFrames around a resize. The
blocker is upstream of that, and no ordering of our own issues can reach it:
While set,
DesiredBeginFrameDeadlineModereturnskLate(
display_scheduler.cc:618) andall_surfaces_readyis false (:597). TheDisplay never reaches a deadline, never runs the pending external-BeginFrame
callback, and our ack never arrives.
It clears in exactly two places: root-surface damage
(
display_damage_tracker.cc:101), orSetNewRootSurface(:61-66) — whoseonly path is
Display::SetLocalSurfaceId(display.cc:432) fromRootCompositorFrameSinkImpl::SubmitCompositorFrame(:569), and only whenthe submitted
LocalSurfaceIddiffers from the last activated one.That retro-explains every attempt, including why attempt 2's nudge could never
work:
Compositor::ScheduleFullRedrawdamages the browser's own layer tree(
compositor.cc:466) — neither root-surface damage nor a newLocalSurfaceId.Probe A: the renderer relays out
Fresh worker, live viewer, guest
cr7727-92539396945c(pre-attempt-3, so aclean control). Measured twice on two separate workers:
innerWidth1279 → 854 while capture freezes. The resize reaches Blink;the fault is viz-side. That closes the branch where a renderer that never
painted would have meant
RenderWidgetHostView::SetSizewas the bug.It also makes the
[diag]line legible:issued=52 acked=51at the resize,then
issued=0 acked=0on every tick after — the driver holding the chain openfor an ack the latch guarantees will never come.
Probe B failed BY INSTRUMENT, and that is worth recording
CHROMELESS_CHROME_VMODULEset fordisplay_damage_tracker/display_schedulerproduced zero lines, with known-positive controls non-zero in the same read
(
cb_devtools_agent17,cb_offerer_driver42).chromium.err.logcarries noline from any
--type=gpu-processsource at all, and those classes live in theGPU process. A silent result means "wrong log", not "no damage". Recorded
because the next person will reach for the same knob; the setting is reverted.
Where a fourth attempt starts
Nothing in
capture/ever allocates aLocalSurfaceId— grep returns onecomment. We rely entirely on the async X11
OnBoundsChangedcallback, which aheadless window with no WM may never deliver. The finding now carries the
candidate fix and the cheap confirmation that must precede it (log the id
across a resize before building anything).
Also: the gateway cert design was documented but never implemented
stack.yamlhad a 20-line comment describing a Secret-mounted cert with aseed-certinitContainer, and then declared a barecertsemptyDir.deploy.shfailed outright:
Worse, it failed after rotating the login password and Ed25519 keypair into
the Secret — an "aborted" run that was not a no-op, and the new password
existed nowhere but the Secret because the line recording it is the script's
last. Same class as #114, through a door that fix did not cover.
Verified with
kubectl apply --dry-run=server(which caught two mistakes inthis change: a duplicate
securityContext, then alivenessProbethat leakedonto the initContainer), a parsed shape match against the live gateway, and a
key-set match against main.
Verification
make verify/make lint--dry-run=server: all three Deployments "configured"ice=connected, 128 frames, 22571 audio bytesView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.