{
  "title": "Backend panel height",
  "beforeRevision": "084a4106040a0d64a02ac04eecf88ea8a8a8f31b",
  "afterRevision": "c183f4bc3cd3d024b8438e43a8de5be90503d3b9",
  "builds": {
    "before": "bd00d766c4f403c3",
    "after": "19aafc29ca5edbc4"
  },
  "versions": {
    "before": {
      "pins": {
        "agentServer": "1.58.1",
        "agentCanvas": "1.33.0",
        "automation": "1.25.1"
      },
      "reportedRuntime": {
        "agentServer": "1.58.1",
        "sdk": "1.58.1"
      },
      "node": "v24.22.1",
      "npm": "11.12.1",
      "browserUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.0.0 Safari/537.36",
      "automation": "Committed launcher pin 1.25.1; /api/automation/health reports status only, no independent version field."
    },
    "after": {
      "pins": {
        "agentServer": "1.58.1",
        "agentCanvas": "1.33.0",
        "automation": "1.25.1"
      },
      "reportedRuntime": {
        "agentServer": "1.58.1",
        "sdk": "1.58.1"
      },
      "node": "v24.22.1",
      "npm": "11.12.1",
      "browserUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.0.0 Safari/537.36",
      "automation": "Committed launcher pin 1.25.1; /api/automation/health reports status only, no independent version field."
    }
  },
  "implementation": {
    "before": "Measured panel height is applied as an inline height declaration.",
    "after": "The same measured height is forwarded through --add-backend-panel-height; the named CSS rule owns height and its transition property.",
    "owner": "src/components/features/backends/backend-form-modal.tsx and src/tailwind.css"
  },
  "scope": {
    "desktop": {
      "theme": "OpenHands-Neutral",
      "viewport": [
        1440,
        1000
      ],
      "sidebar": "expanded",
      "gettingStarted": "collapsed, 0 complete",
      "conversations": "empty",
      "bridge": "real --mars-web enabled",
      "llm": "unconfigured; no connect/login submitted"
    },
    "phone": {
      "theme": "Light+",
      "viewport": [
        390,
        844
      ]
    },
    "phoneSidebar": "open drawer",
    "phoneChecklist": "collapsed, 0 complete",
    "comparison": "Cloud Advanced, Local/Remote guidance, DigitalOcean form, Manage Backends entry, and reduced-motion samples; film focuses on Cloud/Local/Remote disclosure behavior."
  },
  "comparisonSummary": "12 named direct DOM samples paired; maximum observed settled geometry difference 0.0 px, 0 comparable stable-field differences. Exact scope and sampled fields are in the comparison JSON.",
  "limits": [
    "This evidence compares the specified genuine Before and After revisions; it is not a claim of pixel identity, exhaustive UI coverage, or a speed/performance improvement.",
    "The central film is curated from labelled source intervals at 25 fps without editorial speed changes. Complete original PNGs and MP4s are in the ZIP.",
    "The source recorder caps an unchanged initial lead-in at one second and holds the final frame at least one second. Per-source capture-clock and encoded durations are retained; these can differ without changing action intervals.",
    "No credentials, provider connection, login submission, or model invocation was used. The genuine unconfigured-model banner remains visible.",
    "Undefined/zero initial height fallback was not forced in the real UI; consult focused code/test validation separately.",
    "Reduced motion was exercised through browser media emulation; both actual height wrappers reported transition none in Before and After.",
    "The Light+ DigitalOcean panel heading has preexisting white text on a light surface in both revisions. No claim is made that all provider text passes contrast checks; that segment is omitted from the central film.",
    "Representative settled theme stills cover Neutral, DeepSea, Neo, Solarized Light and Light+; early transitional theme stills are excluded from the packet."
  ],
  "captureProvenance": "backend-panel-height-capture-provenance.json",
  "captureProvenanceSha256": "339dd45c75d5fc916266f267a4cc7de4f59adcfa6b2ffef33e79806723e4c8ef",
  "evidenceDownload": "backend-panel-height-evidence.zip",
  "evidenceDownloadSha256": "7dc23e1a1d19fe64e270bbed6285591af844111eb7fbb04cd7bef5b472d13a70",
  "pullRequest": "https://github.com/OpenHands/OpenHands/pull/18902",
  "film": {
    "dimensions": [
      1440,
      1120
    ],
    "fps": 25,
    "durationSeconds": 45.6,
    "scenes": [
      {
        "kind": "recording",
        "publicSourcePath": "backend-panel-height-evidence/before/neutral-desktop-disclosures.mp4",
        "sourceStart": 0,
        "label": "Before · Inline height",
        "subtitle": "Desktop · Same content fit",
        "caption": "Before: genuine desktop Cloud, Local and Remote disclosure actions. Source interval 0.00–12.80s at its existing 25 fps cadence. Recorder caps initial static lead-in at one second; no editorial speed change.",
        "phase": "before",
        "sourceRevision": "084a4106040a0d64a02ac04eecf88ea8a8a8f31b",
        "view": "Desktop",
        "cropDisclosure": "Full original viewport fitted below a separate editorial header.",
        "sourceSha256": "4fb41b6b8df10b163c8cfa3ee8c18456b38296b32f24bfbde6eeec2523744eb0",
        "sourceBytes": 665720,
        "sourceDurationSeconds": 37.08,
        "sourceFps": 25.0,
        "timelineSeconds": [
          0,
          12.8
        ],
        "presentationDurationSeconds": 12.8,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          12.8
        ],
        "fullOriginalSelected": false,
        "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": "recording",
        "publicSourcePath": "backend-panel-height-evidence/after/neutral-desktop-disclosures.mp4",
        "sourceStart": 0,
        "label": "After · CSS height",
        "subtitle": "Desktop · Same content fit",
        "caption": "After: genuine desktop Cloud, Local and Remote disclosure actions. Source interval 0.00–12.80s at its existing 25 fps cadence. Recorder caps initial static lead-in at one second; no editorial speed change.",
        "phase": "after",
        "sourceRevision": "c183f4bc3cd3d024b8438e43a8de5be90503d3b9",
        "view": "Desktop",
        "cropDisclosure": "Full original viewport fitted below a separate editorial header.",
        "sourceSha256": "f2935aa908b8cd262e57ca93cb4110802bfdf42f4ae3abb27eee5d6416254ea0",
        "sourceBytes": 565744,
        "sourceDurationSeconds": 22.12,
        "sourceFps": 25.0,
        "timelineSeconds": [
          12.8,
          25.6
        ],
        "presentationDurationSeconds": 12.8,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          12.8
        ],
        "fullOriginalSelected": false,
        "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": "recording",
        "publicSourcePath": "backend-panel-height-evidence/before/light-plus-phone-disclosures.mp4",
        "sourceStart": 0,
        "label": "Before · Inline height",
        "subtitle": "Phone · Same content fit",
        "caption": "Before: genuine phone Cloud, Local and Remote disclosure actions. Source interval 0.00–10.00s at its existing 25 fps cadence. Recorder caps initial static lead-in at one second; no editorial speed change.",
        "phase": "before",
        "sourceRevision": "084a4106040a0d64a02ac04eecf88ea8a8a8f31b",
        "view": "Phone",
        "cropDisclosure": "Full original viewport fitted below a separate editorial header.",
        "sourceSha256": "2fb1c0bc5e1ee47c6b7cae65f69f73745dbb2ed487125c0ceb970b43db7b28d3",
        "sourceBytes": 468622,
        "sourceDurationSeconds": 16.8,
        "sourceFps": 25.0,
        "timelineSeconds": [
          25.6,
          35.6
        ],
        "presentationDurationSeconds": 10.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          10.0
        ],
        "fullOriginalSelected": false,
        "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": "recording",
        "publicSourcePath": "backend-panel-height-evidence/after/light-plus-phone-disclosures.mp4",
        "sourceStart": 0,
        "label": "After · CSS height",
        "subtitle": "Phone · Same content fit",
        "caption": "After: genuine phone Cloud, Local and Remote disclosure actions. Source interval 0.00–10.00s at its existing 25 fps cadence. Recorder caps initial static lead-in at one second; no editorial speed change.",
        "phase": "after",
        "sourceRevision": "c183f4bc3cd3d024b8438e43a8de5be90503d3b9",
        "view": "Phone",
        "cropDisclosure": "Full original viewport fitted below a separate editorial header.",
        "sourceSha256": "f6ba4ee4b5fb32a13337d5eb423cf70f3eb09fa1fb3d4fb49c0a20dcdf3822bf",
        "sourceBytes": 457378,
        "sourceDurationSeconds": 15.92,
        "sourceFps": 25.0,
        "timelineSeconds": [
          35.6,
          45.6
        ],
        "presentationDurationSeconds": 10.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          10.0
        ],
        "fullOriginalSelected": false,
        "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."
      }
    ],
    "ambience": {
      "origin": "Original synthesized ambient pad; no external samples or provider.",
      "frequenciesHz": [
        174.61,
        220,
        261.63
      ],
      "amplitude": 0.004,
      "normalizationGain": 1.244944,
      "fadeInSeconds": 1.5,
      "fadeOutSeconds": 2,
      "meanDbfs": -52.5,
      "peakDbfs": -42.5,
      "applicationAudio": false
    },
    "recipeSha256": "30a4796f54e0c66532a0348e21402e85e4b2e50f11bdcf11e597161e943d0851"
  },
  "preview": {
    "file": "backend-panel-height-poster.jpg",
    "dimensions": [
      1440,
      1120
    ],
    "type": "poster",
    "audio": false,
    "limitation": "Still poster. Download or play the MP4 for actual disclosure behavior."
  },
  "files": {
    "backend-panel-height-capture-provenance.json": {
      "sha256": "339dd45c75d5fc916266f267a4cc7de4f59adcfa6b2ffef33e79806723e4c8ef",
      "bytes": 34547
    },
    "backend-panel-height-comparison.json": {
      "sha256": "11cbb9402617424c4da850c72365904f6a12b10d6cf06dfd2a8971d439640d35",
      "bytes": 23704
    },
    "backend-panel-height-before-after.mp4": {
      "sha256": "590dfda2189af72dbe5f3f3465823a2c4c49ff792d5c444d021d3882031b75be",
      "bytes": 3001280
    },
    "backend-panel-height-evidence.zip": {
      "sha256": "7dc23e1a1d19fe64e270bbed6285591af844111eb7fbb04cd7bef5b472d13a70",
      "bytes": 4540812
    },
    "backend-panel-height-poster.jpg": {
      "sha256": "e79e3c2ef1435e3b04c37fcd98143eb65842ed88660821b43fb2d614a2ec6a14",
      "bytes": 84849
    },
    "backend-panel-height-captions.vtt": {
      "sha256": "ebfc04cab04db6acdedf09931603412c02e5e9a2ebc6396feff63e76d87ac63a",
      "bytes": 969
    }
  }
}
