{
  "title": "Sidebar stacking",
  "beforeRevision": "fee10e3d2909ebbf9950578575b1ee011492171e",
  "afterRevision": "6654969d173f8df8f17ce3221715e48124f42ab1",
  "builds": {
    "before": "0d613af38d4884d7",
    "after": "6687c3c31260b0e6"
  },
  "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",
      "chromeBinary": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
      "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",
      "automationVersionEvidence": "Explicit launch override1.25.1 matches committed pin; health endpoint reports status without 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",
      "chromeBinary": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
      "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",
      "automationVersionEvidence": "Explicit launch override1.25.1 matches committed pin; health endpoint reports status without independent version field"
    }
  },
  "implementation": {
    "before": "The shared glyph layer and connected-backend dot use arbitrary z-[1] classes.",
    "after": "The same layers use standard z-1 classes, preserving computed z-index 1 above the z-index 0 surface.",
    "owners": [
      "src/components/features/sidebar/sidebar-layout.ts",
      "src/components/features/sidebar/sidebar-rail-body.tsx"
    ]
  },
  "scope": {
    "before": {
      "desktop": {
        "theme": "OpenHands-Neutral",
        "viewport": [
          1440,
          1000
        ],
        "motionPreference": "no-preference",
        "bridge": "real --mars-web enabled",
        "llm": "unconfigured; no connect/login submitted"
      },
      "sidebar": {
        "route": "/conversations before any conversation exists",
        "railWidth": 60,
        "glyphZ": 1,
        "hoverBackgroundZ": 0,
        "backendDot": {
          "status": "connected",
          "z": 1,
          "sizePx": 8
        }
      },
      "phone": {
        "theme": "Light+",
        "viewport": [
          390,
          844
        ],
        "sidebar": "unchanged expanded drawer smoke",
        "overview": "Known#16792:Hide overview label,0panel/ellipsis/content, no entry point",
        "conversation": "One owned idle row titled Overview width check; sidebar desktop captures precede arrangement and remain empty."
      }
    },
    "after": {
      "desktop": {
        "theme": "OpenHands-Neutral",
        "viewport": [
          1440,
          1000
        ],
        "motionPreference": "no-preference",
        "bridge": "real --mars-web enabled",
        "llm": "unconfigured; no connect/login submitted"
      },
      "sidebar": {
        "route": "/conversations before any conversation exists",
        "railWidth": 60,
        "glyphZ": 1,
        "hoverBackgroundZ": 0,
        "backendDot": {
          "status": "connected",
          "z": 1,
          "sizePx": 8
        }
      },
      "phone": {
        "theme": "Light+",
        "viewport": [
          390,
          844
        ],
        "sidebar": "unchanged expanded drawer smoke",
        "overview": "Known#16792:Hide overview label,0panel/ellipsis/content, no entry point",
        "conversation": "One owned idle row titled Overview width check; sidebar desktop captures precede arrangement and remain empty."
      }
    },
    "mainFilm": "Changed desktop path only; phone remains separately scoped smoke or documented blocker."
  },
  "comparisonSummary": "1 direct computed sample(s) paired, with 0 stable-field differences. Read the comparison JSON for exact scope; screenshot age text and source duration are not identity/performance claims.",
  "limits": [
    "This compares the specified genuine revisions and selected observed paths. It does not claim global pixel identity, exhaustive UI coverage, or a speed/performance improvement.",
    "Recordings use their existing 25 fps cadence without editorial speed changes. The recorder caps an initial unchanged lead-in at one second and holds the final still at least one second. Capture-clock and encoded durations are retained per source.",
    "Labelled detail scenes are actual source crops after full-viewport context leads. Held screenshots are labelled as stills in captions and provenance; full unmodified selected PNGs and MP4s remain downloadable.",
    "No model message, real credentials, login, provider connection, paid API or paid resource was used. The genuine unconfigured-model warning remains visible.",
    "Representative all-five-theme screenshots do not imply every scenario/theme/viewport combination was tested.",
    "Before source neutral-desktop-sidebar.mp4 reports 1 capture miss(es); no guarantee is made that every motion frame was captured.",
    "Desktop source durations differ because the real interactions and capture waits differ; they are not performance measurements.",
    "The main film covers the changed collapsed desktop rail. Expanded Light+ phone evidence is explicitly unchanged-path smoke with one owned idle Overview width check row and Getting started 1 complete; desktop captures precede that arrangement and have empty history.",
    "Old transitional phone stills, the generic two-DOM-copy selector failure recording, and the After title-toast attempt remain excluded from public selected sources."
  ],
  "captureProvenance": "sidebar-stacking-capture-provenance.json",
  "captureProvenanceSha256": "dc0977ea51664d3f08e06408de74947cbcd9e770203caab39965619b99e5a118",
  "evidenceDownload": "sidebar-stacking-evidence.zip",
  "evidenceDownloadSha256": "0d6c4bfae40e11e6ba37521846277ecf4d82277bd2b7775d6cdb19cc31e259e2",
  "pullRequest": "https://github.com/OpenHands/OpenHands/pull/18908",
  "film": {
    "dimensions": [
      1440,
      1120
    ],
    "fps": 25,
    "durationSeconds": 24.76,
    "scenes": [
      {
        "phase": "before",
        "sourceRevision": "fee10e3d2909ebbf9950578575b1ee011492171e",
        "kind": "screenshot",
        "publicSourcePath": "sidebar-stacking-evidence/before/neutral-desktop-customize-hover.png",
        "label": "Before · Arbitrary stacking",
        "subtitle": "Collapsed sidebar · Full context",
        "caption": "Before: authentic full 1440×1000 Neutral desktop with collapsed 60px rail, empty conversation history and connected Local backend. Still held 2 seconds.",
        "view": "Desktop context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "e6228d0b4defe5f6275f228e5a6de8c3e0a242859fc6e589bef4b073d93fd013",
        "sourceBytes": 72523,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          0,
          2.0
        ],
        "presentationDurationSeconds": 2.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "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."
      },
      {
        "phase": "before",
        "sourceRevision": "fee10e3d2909ebbf9950578575b1ee011492171e",
        "kind": "recording",
        "publicSourcePath": "sidebar-stacking-evidence/before/neutral-desktop-sidebar.mp4",
        "label": "Before · Arbitrary stacking",
        "subtitle": "Detail · Same glyph layering",
        "caption": "Before: complete original desktop recording at its existing 25 fps cadence. Actual top-left source crop x0/y65/420×315px makes the 60px rail and glyph/background layering readable. No editorial speed change; clip duration is not a performance comparison.",
        "crop": [
          0,
          65,
          420,
          315
        ],
        "view": "Navigation detail",
        "cropDisclosure": "Actual source crop x0/y65/420×315px, fitted below editorial header.",
        "sourceSha256": "bba893edef79ca0d4139c3bd18a9582cf0f193f28d357f4ee8283c48fce6638d",
        "sourceBytes": 222937,
        "sourceDurationSeconds": 6.68,
        "sourceFps": 25.0,
        "timelineSeconds": [
          2.0,
          8.68
        ],
        "presentationDurationSeconds": 6.68,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          6.68
        ],
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": true,
        "fullOriginalViewportSelected": 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."
      },
      {
        "phase": "before",
        "sourceRevision": "fee10e3d2909ebbf9950578575b1ee011492171e",
        "kind": "recording",
        "publicSourcePath": "sidebar-stacking-evidence/before/neutral-desktop-sidebar.mp4",
        "label": "Before · Arbitrary stacking",
        "subtitle": "Detail · Connected status",
        "caption": "Before: source interval 0.00–2.40s at existing 25 fps cadence. Actual bottom-left source crop x0/y650/420×350px shows the connected status dot and backend popover. Full unmodified recording remains downloadable.",
        "sourceStart": 0,
        "crop": [
          0,
          650,
          420,
          350
        ],
        "view": "Status detail",
        "cropDisclosure": "Actual source crop x0/y650/420×350px, fitted below editorial header.",
        "sourceSha256": "bba893edef79ca0d4139c3bd18a9582cf0f193f28d357f4ee8283c48fce6638d",
        "sourceBytes": 222937,
        "sourceDurationSeconds": 6.68,
        "sourceFps": 25.0,
        "timelineSeconds": [
          8.68,
          11.08
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          2.4
        ],
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": 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."
      },
      {
        "phase": "before",
        "sourceRevision": "fee10e3d2909ebbf9950578575b1ee011492171e",
        "kind": "screenshot",
        "publicSourcePath": "sidebar-stacking-evidence/before/neutral-desktop-customize-active.png",
        "label": "Before · Arbitrary stacking",
        "subtitle": "Detail · Active glyph",
        "caption": "Before: authentic Customize active state, actual top-left source crop x0/y65/420×315px. This still is held 3 seconds; it is not an extended source recording.",
        "crop": [
          0,
          65,
          420,
          315
        ],
        "view": "Active detail",
        "cropDisclosure": "Actual source crop x0/y65/420×315px, fitted below editorial header.",
        "sourceSha256": "8b01b94517829d5556e5f3344ea823b201910150c283aff55feb63760c0bede4",
        "sourceBytes": 110153,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          11.08,
          14.08
        ],
        "presentationDurationSeconds": 3.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": false,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "after",
        "sourceRevision": "6654969d173f8df8f17ce3221715e48124f42ab1",
        "kind": "screenshot",
        "publicSourcePath": "sidebar-stacking-evidence/after/neutral-desktop-customize-hover.png",
        "label": "After · Standard stacking",
        "subtitle": "Collapsed sidebar · Full context",
        "caption": "After: authentic full 1440×1000 Neutral desktop with collapsed 60px rail, empty conversation history and connected Local backend. Still held 2 seconds.",
        "view": "Desktop context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "5bd8a9e6c274941fb923c9df7d00065273ad3f041b7369967ffe8b6604de79cd",
        "sourceBytes": 73058,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          14.08,
          16.08
        ],
        "presentationDurationSeconds": 2.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "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."
      },
      {
        "phase": "after",
        "sourceRevision": "6654969d173f8df8f17ce3221715e48124f42ab1",
        "kind": "recording",
        "publicSourcePath": "sidebar-stacking-evidence/after/neutral-desktop-sidebar.mp4",
        "label": "After · Standard stacking",
        "subtitle": "Detail · Same glyph layering",
        "caption": "After: complete original desktop recording at its existing 25 fps cadence. Actual top-left source crop x0/y65/420×315px makes the 60px rail and glyph/background layering readable. No editorial speed change; clip duration is not a performance comparison.",
        "crop": [
          0,
          65,
          420,
          315
        ],
        "view": "Navigation detail",
        "cropDisclosure": "Actual source crop x0/y65/420×315px, fitted below editorial header.",
        "sourceSha256": "e73c4d1a0d504d3a4a88e072e2fadf9ddfc067320f0e24b94c6fe02fc6028e9c",
        "sourceBytes": 216187,
        "sourceDurationSeconds": 3.28,
        "sourceFps": 25.0,
        "timelineSeconds": [
          16.08,
          19.36
        ],
        "presentationDurationSeconds": 3.28,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          3.28
        ],
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": true,
        "fullOriginalViewportSelected": 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."
      },
      {
        "phase": "after",
        "sourceRevision": "6654969d173f8df8f17ce3221715e48124f42ab1",
        "kind": "recording",
        "publicSourcePath": "sidebar-stacking-evidence/after/neutral-desktop-sidebar.mp4",
        "label": "After · Standard stacking",
        "subtitle": "Detail · Connected status",
        "caption": "After: source interval 0.00–2.40s at existing 25 fps cadence. Actual bottom-left source crop x0/y650/420×350px shows the connected status dot and backend popover. Full unmodified recording remains downloadable.",
        "sourceStart": 0,
        "crop": [
          0,
          650,
          420,
          350
        ],
        "view": "Status detail",
        "cropDisclosure": "Actual source crop x0/y650/420×350px, fitted below editorial header.",
        "sourceSha256": "e73c4d1a0d504d3a4a88e072e2fadf9ddfc067320f0e24b94c6fe02fc6028e9c",
        "sourceBytes": 216187,
        "sourceDurationSeconds": 3.28,
        "sourceFps": 25.0,
        "timelineSeconds": [
          19.36,
          21.76
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          2.4
        ],
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": 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."
      },
      {
        "phase": "after",
        "sourceRevision": "6654969d173f8df8f17ce3221715e48124f42ab1",
        "kind": "screenshot",
        "publicSourcePath": "sidebar-stacking-evidence/after/neutral-desktop-customize-active.png",
        "label": "After · Standard stacking",
        "subtitle": "Detail · Active glyph",
        "caption": "After: authentic Customize active state, actual top-left source crop x0/y65/420×315px. This still is held 3 seconds; it is not an extended source recording.",
        "crop": [
          0,
          65,
          420,
          315
        ],
        "view": "Active detail",
        "cropDisclosure": "Actual source crop x0/y65/420×315px, fitted below editorial header.",
        "sourceSha256": "c1ccbc064f2c9a395ee45810e07434ae4475a82647425421f40eda338db3af5c",
        "sourceBytes": 110735,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          21.76,
          24.76
        ],
        "presentationDurationSeconds": 3.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": false,
        "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.251987,
      "fadeInSeconds": 1.5,
      "fadeOutSeconds": 2,
      "meanDbfs": -52.5,
      "peakDbfs": -42.5,
      "applicationAudio": false
    },
    "recipeSha256": "082eb3937577d674b077bab74bbfbbd074c05a92c9c8be255a00ce169704012d"
  },
  "preview": {
    "file": "sidebar-stacking-poster.jpg",
    "dimensions": [
      1440,
      1120
    ],
    "type": "poster",
    "audio": false,
    "limitation": "Still poster. Download or play the MP4 for actual sidebar interactions."
  },
  "files": {
    "sidebar-stacking-evidence.zip": {
      "sha256": "0d6c4bfae40e11e6ba37521846277ecf4d82277bd2b7775d6cdb19cc31e259e2",
      "bytes": 2926901
    },
    "sidebar-stacking-poster.jpg": {
      "sha256": "033987bfa2050574782b13df82de6650bdb165e62a00c1daa04d628e3b1d7201",
      "bytes": 87892
    },
    "sidebar-stacking-captions.vtt": {
      "sha256": "63d4499e632645a02594b3fd7a0d5870efb4aef3ba5b26c2f88be1971034788d",
      "bytes": 1835
    },
    "sidebar-stacking-comparison.json": {
      "sha256": "c59e7773e5a95a6f368219bd8038e3a22c45a20a4a550d0c9ac770113c97bb7e",
      "bytes": 5841
    },
    "sidebar-stacking-capture-provenance.json": {
      "sha256": "dc0977ea51664d3f08e06408de74947cbcd9e770203caab39965619b99e5a118",
      "bytes": 38321
    },
    "sidebar-stacking-before-after.mp4": {
      "sha256": "da0e447bce16e33506455f4822c0ca6dc2af8edaefdbd31184f0424c9421d4e6",
      "bytes": 870304
    }
  }
}
