{ "title": "DigitalOcean chooser: preserve the shared panel minimum", "pullRequest": "https://github.com/OpenHands/OpenHands/pull/18967", "beforeRevision": "62849086007d49596ed2cd0733d3ee12f879969b", "afterRevision": "6a5d1d78a92a29f3087dd397c0aa120b548e678f", "originalChooserFilmRevision": "3dd7c0f4edfbd3a6907c3e953c79276d3fcdb243", "sourceBinding": "Supplement captures exact current-main and final fixed checkout/app heads. Original 66.04s chooser film remains at its historical head; twelve class tokens are the entire product AST delta vs current main, with additive CSS.", "originals": [ { "phase": "before", "name": "desktop.png", "sha256": "13017d265677a03a5a5f17fb94bc81319da072ab67314e3bee4bc8dc1e8ce8ec", "bytes": 94030, "file": "backend-chooser-digitalocean-followup-evidence/before/desktop.png" }, { "phase": "before", "name": "desktop-provider-flow.mp4", "sha256": "b846de854abf6681ce90860c996996707436b0a9f70330aaa10dc38e2338fb9e", "bytes": 137168, "file": "backend-chooser-digitalocean-followup-evidence/before/desktop-provider-flow.mp4" }, { "phase": "before", "name": "phone.png", "sha256": "4cb897fbabe1e512dc99e66d1c97020059bbb01531c14f68d1992d43a5f5eeba", "bytes": 43936, "file": "backend-chooser-digitalocean-followup-evidence/before/phone.png" }, { "phase": "after", "name": "desktop.png", "sha256": "bb2b874ae797db924ef53ec51c33929c446e70ea4d014cb7a4df467771f399db", "bytes": 94013, "file": "backend-chooser-digitalocean-followup-evidence/after/desktop.png" }, { "phase": "after", "name": "desktop-provider-flow.mp4", "sha256": "b0ccadfdf7cc74f0c5b4c1ad1863b12d6ab8fd7f57c2029fccd5804dbfce4b07", "bytes": 121121, "file": "backend-chooser-digitalocean-followup-evidence/after/desktop-provider-flow.mp4" }, { "phase": "after", "name": "phone.png", "sha256": "4cb897fbabe1e512dc99e66d1c97020059bbb01531c14f68d1992d43a5f5eeba", "bytes": 43936, "file": "backend-chooser-digitalocean-followup-evidence/after/phone.png" } ], "comparisonFile": "backend-chooser-digitalocean-followup-comparison.json", "durationSeconds": 15.72, "filmSha256": "c0ddd8cac0d1f37c183c3018f39f6c37e9430ec70542d21796e37810e54b8f22", "zipSha256": "f2c070978006fca33ee21e22aebd7fa189f3d9f94c492829ffbe06b8c927830e", "scenes": [ { "kind": "screenshot", "phase": "before", "expectedSourceSha256": "13017d265677a03a5a5f17fb94bc81319da072ab67314e3bee4bc8dc1e8ce8ec", "expectedSourceBytes": 94030, "label": "Before \u00b7 Arbitrary panel height", "subtitle": "Real chooser context \u00b7 no sign-in", "caption": "Before \u00b7 Arbitrary panel height. Same 13.5rem minimum; actual unauthenticated Local Canvas provider panel. No credentials, model calls or resources.", "publicSourcePath": "backend-chooser-digitalocean-followup-evidence/before/desktop.png", "sourceSha256": "13017d265677a03a5a5f17fb94bc81319da072ab67314e3bee4bc8dc1e8ce8ec", "sourceBytes": 94030, "sourceDurationSeconds": null, "sourceFps": null, "timelineSeconds": [ 0, 2.48 ], "presentationDurationSeconds": 2.48, "editorialSpeedChange": false, "sourceStartSeconds": null, "sourceSelectedRangeSeconds": null, "outputCadencePaddingSeconds": 0, "fullOriginalSelected": false, "fullOriginalTimelineSelected": false, "fullOriginalViewportSelected": true, "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied." }, { "kind": "recording", "phase": "before", "expectedSourceSha256": "b846de854abf6681ce90860c996996707436b0a9f70330aaa10dc38e2338fb9e", "expectedSourceBytes": 137168, "label": "Before \u00b7 Arbitrary panel height", "subtitle": "Providers \u2192 DigitalOcean \u00b7 original action timing", "caption": "Before \u00b7 Arbitrary panel height. Same 13.5rem minimum; actual unauthenticated Local Canvas provider panel. No credentials, model calls or resources.", "publicSourcePath": "backend-chooser-digitalocean-followup-evidence/before/desktop-provider-flow.mp4", "sourceSha256": "b846de854abf6681ce90860c996996707436b0a9f70330aaa10dc38e2338fb9e", "sourceBytes": 137168, "sourceDurationSeconds": 2.92, "sourceFps": 25.0, "timelineSeconds": [ 2.48, 5.4 ], "presentationDurationSeconds": 2.92, "editorialSpeedChange": false, "sourceStartSeconds": 0, "sourceSelectedRangeSeconds": [ 0, 2.92 ], "outputCadencePaddingSeconds": 0, "fullOriginalSelected": true, "fullOriginalTimelineSelected": true, "fullOriginalViewportSelected": true, "sourcePlaybackNote": "Selected MP4 interval presented at its existing frame cadence. Recorder caps an initial static lead-in at 1 second and holds the final frame at least 1 second; action intervals retain capture timing. Presentation repeats frames only for output cadence; no motion interpolation." }, { "kind": "screenshot", "phase": "before", "expectedSourceSha256": "4cb897fbabe1e512dc99e66d1c97020059bbb01531c14f68d1992d43a5f5eeba", "expectedSourceBytes": 43936, "label": "Before \u00b7 Arbitrary panel height", "subtitle": "Phone viewport \u00b7 216px computed minimum", "caption": "Before \u00b7 Arbitrary panel height. Same 13.5rem minimum; actual unauthenticated Local Canvas provider panel. No credentials, model calls or resources.", "publicSourcePath": "backend-chooser-digitalocean-followup-evidence/before/phone.png", "sourceSha256": "4cb897fbabe1e512dc99e66d1c97020059bbb01531c14f68d1992d43a5f5eeba", "sourceBytes": 43936, "sourceDurationSeconds": null, "sourceFps": null, "timelineSeconds": [ 5.4, 7.88 ], "presentationDurationSeconds": 2.48, "editorialSpeedChange": false, "sourceStartSeconds": null, "sourceSelectedRangeSeconds": null, "outputCadencePaddingSeconds": 0, "fullOriginalSelected": false, "fullOriginalTimelineSelected": false, "fullOriginalViewportSelected": true, "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied." }, { "kind": "screenshot", "phase": "after", "expectedSourceSha256": "bb2b874ae797db924ef53ec51c33929c446e70ea4d014cb7a4df467771f399db", "expectedSourceBytes": 94013, "label": "After \u00b7 Shared panel recipe", "subtitle": "Real chooser context \u00b7 no sign-in", "caption": "After \u00b7 Shared panel recipe. Same 13.5rem minimum; actual unauthenticated Local Canvas provider panel. No credentials, model calls or resources.", "publicSourcePath": "backend-chooser-digitalocean-followup-evidence/after/desktop.png", "sourceSha256": "bb2b874ae797db924ef53ec51c33929c446e70ea4d014cb7a4df467771f399db", "sourceBytes": 94013, "sourceDurationSeconds": null, "sourceFps": null, "timelineSeconds": [ 7.88, 10.36 ], "presentationDurationSeconds": 2.48, "editorialSpeedChange": false, "sourceStartSeconds": null, "sourceSelectedRangeSeconds": null, "outputCadencePaddingSeconds": 0, "fullOriginalSelected": false, "fullOriginalTimelineSelected": false, "fullOriginalViewportSelected": true, "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied." }, { "kind": "recording", "phase": "after", "expectedSourceSha256": "b0ccadfdf7cc74f0c5b4c1ad1863b12d6ab8fd7f57c2029fccd5804dbfce4b07", "expectedSourceBytes": 121121, "label": "After \u00b7 Shared panel recipe", "subtitle": "Providers \u2192 DigitalOcean \u00b7 original action timing", "caption": "After \u00b7 Shared panel recipe. Same 13.5rem minimum; actual unauthenticated Local Canvas provider panel. No credentials, model calls or resources.", "publicSourcePath": "backend-chooser-digitalocean-followup-evidence/after/desktop-provider-flow.mp4", "sourceSha256": "b0ccadfdf7cc74f0c5b4c1ad1863b12d6ab8fd7f57c2029fccd5804dbfce4b07", "sourceBytes": 121121, "sourceDurationSeconds": 2.88, "sourceFps": 25.0, "timelineSeconds": [ 10.36, 13.24 ], "presentationDurationSeconds": 2.88, "editorialSpeedChange": false, "sourceStartSeconds": 0, "sourceSelectedRangeSeconds": [ 0, 2.88 ], "outputCadencePaddingSeconds": 0, "fullOriginalSelected": true, "fullOriginalTimelineSelected": true, "fullOriginalViewportSelected": true, "sourcePlaybackNote": "Selected MP4 interval presented at its existing frame cadence. Recorder caps an initial static lead-in at 1 second and holds the final frame at least 1 second; action intervals retain capture timing. Presentation repeats frames only for output cadence; no motion interpolation." }, { "kind": "screenshot", "phase": "after", "expectedSourceSha256": "4cb897fbabe1e512dc99e66d1c97020059bbb01531c14f68d1992d43a5f5eeba", "expectedSourceBytes": 43936, "label": "After \u00b7 Shared panel recipe", "subtitle": "Phone viewport \u00b7 216px computed minimum", "caption": "After \u00b7 Shared panel recipe. Same 13.5rem minimum; actual unauthenticated Local Canvas provider panel. No credentials, model calls or resources.", "publicSourcePath": "backend-chooser-digitalocean-followup-evidence/after/phone.png", "sourceSha256": "4cb897fbabe1e512dc99e66d1c97020059bbb01531c14f68d1992d43a5f5eeba", "sourceBytes": 43936, "sourceDurationSeconds": null, "sourceFps": null, "timelineSeconds": [ 13.24, 15.72 ], "presentationDurationSeconds": 2.48, "editorialSpeedChange": false, "sourceStartSeconds": null, "sourceSelectedRangeSeconds": null, "outputCadencePaddingSeconds": 0, "fullOriginalSelected": false, "fullOriginalTimelineSelected": false, "fullOriginalViewportSelected": true, "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied." } ], "ambience": { "origin": "Original synthesized ambient pad; no external samples or provider.", "frequenciesHz": [ 174.61, 220, 261.63 ], "amplitude": 0.004, "normalizationGain": 1.343516, "fadeInSeconds": 1.5, "fadeOutSeconds": 2, "meanDbfs": -52.5, "peakDbfs": -41.92, "applicationAudio": false }, "encoding": { "status": "PASS", "filmSha256": "c0ddd8cac0d1f37c183c3018f39f6c37e9430ec70542d21796e37810e54b8f22", "fullDecodes": 3, "duration": 15.72, "videoCodec": "h264", "pixelFormat": "yuv420p", "colorRange": "tv", "audioCodec": "aac", "fps": "25/1", "contactFrames": 6, "ambience": { "origin": "Original synthesized ambient pad; no external samples or provider.", "frequenciesHz": [ 174.61, 220, 261.63 ], "amplitude": 0.004, "normalizationGain": 1.343516, "fadeInSeconds": 1.5, "fadeOutSeconds": 2, "meanDbfs": -52.5, "peakDbfs": -41.92, "applicationAudio": false } }, "scope": "Real isolated standalone Local Canvas with real MARS web bridge, unauthenticated DigitalOcean panel only. No token filled/submitted, provider resources, model calls, automation or conversation execution. Original PNG/MP4 bytes retained. Original larger chooser film stays at historical3dd7c0f; this supplement is captured from exact main and final6a5d1d7.", "limits": [ "Unauthenticated DigitalOcean panel only; no provider account/resources, sign-in success, ACP or live embedding claimed.", "Selected roles/styles/rectangles only; no whole-page pixel or synchronized-video identity claimed.", "Phone scene is an actual held still; complete desktop native clips retain their existing recorder cadence." ], "cleanup": { "ownedRunsStoppedPurged": 2, "actualOwnedPortsClosed": 10 }, "validation": { "tests": 234, "fullLintErrors": 0, "fullLintWarnings": 390, "mainWarnings": 402, "removed": 12, "added": 0 } }