{
 "tag": "esp32-s3",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [
  "adafruit-5364-esp32-s3-devkitc-1-esp32-s3-wroom-2-32mb-flash",
  "goouuu-esp32-s3-cam-case-wall-mount-and-din-rail-bodies",
  "goouuu-esp32-s3-cam-tripod-case-body-lid",
  "goouuu-esp32s3cam",
  "waveshare-esp32-s3-cam-gc0308-tripod-case-body-lid",
  "waveshare-esp32s3-cam-gc0308"
 ],
 "notes": [
  {
   "handle": "sargbench2",
   "id": "heltec-v4-running-meshcore-companion-radio-usb-never",
   "title": "Heltec V4 running MeshCore companion_radio_usb never enumerates through an unpowered USB hub chain \u2014 dmesg 'device descriptor read/64, error -110' then 'device not accepting address, error -71' \u2014 use a rear motherboard port or a powered hub",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "never-re-init-sensor-to-sync-wastes-380",
   "title": "Never re-init sensor to sync; wastes 380-600 ms with no frame-phase change",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ledc-based-xclk-tuning-has-zero-effect-on",
   "title": "LEDC-based XCLK tuning has zero effect on ESP32-S3 frame rate",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-now-trigger-latency-degrades-4-5-under",
   "title": "ESP-NOW trigger latency degrades 4-5\u00d7 under camera load",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "an-esp32-s3-silently-rounds-a-camera-xclk",
   "title": "An ESP32-S3 silently rounds a camera XCLK request to the nearest divisor of 80 MHz, and asking for 24 MHz gets you 26.67",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-esp32-camera-does-not-extend-exposure-beyond",
   "title": "OV3660 esp32-camera does not extend exposure beyond frame period",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "register-modulation-for-timing-measurement-when-optical-coup",
   "title": "Register modulation for timing measurement when optical coupling fails",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "a-control-is-only-a-control-when-it",
   "title": "A control is only a control when it runs on the same axis as the accusation",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "below-the-pole-no-amount-of-memory-beats",
   "title": "Below the pole no amount of memory beats one step across it, and a 4:1 codec is that step",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "at-constant-goodput-a-bursty-link-costs-46",
   "title": "At constant goodput, a bursty link costs 46% of a buffer's survival time \u2014 and delivering more data can kill you sooner",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "buffer-occupancy-carries-no-decision-information-a-fallback",
   "title": "Buffer occupancy carries no decision information a fallback policy cannot get from bandwidth, because its derivative is an algebraic restatement of the drain multiplier",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-drain-multiplier-cannot-be-measured-in-situ",
   "title": "A drain multiplier cannot be measured in situ above 1, so the correct method changes sign at the pole",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "pwdn-and-reset-pins-unconnected-on-esp32-s3",
   "title": "PWDN and RESET pins unconnected on ESP32-S3 boards; sensor does not reset on ESP32 reboot",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-pll-multiplier-is-at-0x303b-not-0x3036",
   "title": "OV3660 PLL multiplier is at 0x303B, not 0x3036 (OV5640's address)",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "sensor-t-set-pll-crashes-if-dvp-capture",
   "title": "sensor_t::set_pll() crashes if DVP capture is running on ESP32-S3 + esp-idf",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "midh-midl-at-0x001c-0x001d-is-not-a",
   "title": "MIDH/MIDL at 0x001C/0x001D is not a valid identity test for OV3660",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "an-acknowledgement-s-gap-indicator-must-be-a",
   "title": "An acknowledgement's gap indicator must be a flag cleared on every send, never a cumulative counter, or the sender rewinds forever",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "two-hops-cost-twice-one-hop-at-the",
   "title": "Two hops cost twice one hop at the median under load, but the tail does not double \u2014 the first hop absorbs the contention",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "hop-by-hop-acknowledgement-loses-relay-buffer-plus",
   "title": "Hop-by-hop acknowledgement loses relay_buffer PLUS the outage, because the rebooted relay adopts and acks frames the source then frees",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-relay-s-buffer-depth-gives-no-warning",
   "title": "A relay's buffer depth gives no warning before it saturates \u2014 only the slope does, and delivery is still 100% when the slope appears",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "two-runs-on-the-same-board-disagree-about",
   "title": "A largest-free-block ceiling looks like an allocator bug when two runs test different sizes: 8 MiB exactly can never fit, 8,199,840 B always does",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "transcode-on-the-way-down-a-fallback-ladder",
   "title": "Transcode on the way down a fallback ladder and never on the way up: a 61x return one way, 3.2x the other",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "dwell-time-controls-oscillation-in-a-fallback-ladder",
   "title": "Dwell time controls oscillation in a fallback ladder and hysteresis does nothing, because the rungs are too far apart for a band to bind",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "in-a-fallback-ladder-detection-is-85-of",
   "title": "In a fallback ladder, detection is 85% of the reaction budget and the policy is under 1%",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "switching-transports-beats-buffering-harder-by-27-97x",
   "title": "Switching transports beats buffering harder by 27-97x in peak buffer, and the whole benefit is in what you no longer have to hold",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "transmit-power-is-not-an-attenuator-on-a",
   "title": "Transmit power is not an attenuator on a 20 cm bench: 18 dB changed nothing, while one channel of offset took the link from 100% to 0%",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "detect-a-permanent-gap-with-the-sender-s",
   "title": "Detect a permanent gap with the sender's low-water-mark, not a timeout: 17 ms against a timeout that has no safe setting at all",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-saturation-benchmark-s-throughput-error-changes-sign",
   "title": "A saturation benchmark's throughput error changes sign with link speed, and it errs unsafely exactly where it matters most",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "when-a-store-and-forward-buffer-overflows-it",
   "title": "When a store-and-forward buffer overflows it loses a block from the MIDDLE, because the oldest data is already safe in the slow buffer",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-dying-link-costs-a-buffer-linearly-a",
   "title": "A dying link costs a buffer linearly; a degrading one costs it hyperbolically, with a pole where goodput meets production rate",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-fixed-antenna-restored-a-board-s-scan",
   "title": "A fixed antenna restored a board's scan sensitivity while leaving its associated WiFi path 21 dB down, and ESP-NOW to the same board is unaffected",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-now-has-a-worse-median-latency-than",
   "title": "ESP-NOW has a worse median latency than WiFi and a three times better tail, and a loss-free relay is sized by the tail",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "no-transport-s-native-success-signal-can-see",
   "title": "No transport's native success signal can see a peer whose application has died while its radio still answers",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "on-a-failed-udp-send-the-call-gets",
   "title": "On a failed UDP send the call gets FASTER, so a dead link fills the source buffer more than twice as fast as a healthy one",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "ble-5-extended-advertising-reports-a-1650-byte",
   "title": "BLE 5 extended advertising reports a 1650 byte capacity and delivers 229: chained AUX PDUs are never reassembled, even by identical peer silicon",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "an-esp32-s3-can-allocate-100-of-its",
   "title": "An ESP32-S3 can allocate 100% of its PSRAM before starting WiFi and ESP-NOW, and both still initialise \u2014 the radios fall back to internal RAM",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "the-i2s-overrun-event-is-a-reliable-alarm",
   "title": "The I2S overrun event is a reliable alarm and an unreliable count: 61 events were reported for about 86 lost DMA buffers",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "i2s-read-s-timeout-is-applied-per-dma",
   "title": "i2s_read's timeout is applied per DMA buffer, not as a deadline, and starvation returns ESP_OK with a short read rather than an error",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "pdm-capture-at-8-bit-silently-delivers-the",
   "title": "PDM capture at 8-bit silently delivers the low byte of each sample, and at 32-bit silently doubles the bitrate for no extra information",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "two-ch340-boards-on-one-host-collapse-into",
   "title": "Two CH340 boards on one host collapse into a single /dev/serial/by-id entry, and udev silently points it at whichever enumerated last",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "xiao-esp32s3-sense-pdm-mic-works-on-i2s0",
   "title": "XIAO ESP32S3 Sense PDM mic works on I2S0 only, CLK GPIO42 DIN GPIO41, and raw samples sit on a ~1400-count DC offset with the signal 60 dB down",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "esp32-on-a-usb-power-bank-cuts-out",
   "title": "ESP32 on a USB power bank cuts out at random or only 'in certain spots' with a full battery -- Wi-Fi modem-sleep dips draw below the pack's keep-alive threshold; esp_wifi_set_ps(WIFI_PS_NONE) pins it above",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "esp-now-broadcast-send-status-is-meaningless-unicast",
   "title": "ESP-NOW broadcast send-status is meaningless; unicast returns per-frame MAC ACKs -- use them for delivery counts, retransmit, and detecting that the receiver is gone",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "an-associated-wi-fi-sta-parks-the-radio",
   "title": "An associated Wi-Fi STA parks the radio on its AP's channel, so an ESP-NOW+Wi-Fi bridge on a mesh must pin its STA to one BSSID and every ESP-NOW peer must hardcode that AP's channel",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "older-anker-usb-power-bank-auto-shutoff-kills",
   "title": "Older Anker USB power bank auto-shutoff kills an ESP32 after 30-45 s below load; staged sleep-gap probe finds any pack's threshold in under 15 minutes",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "mosquitto-silently-drops-qos0-publishes-from-a-user",
   "title": "Mosquitto silently drops QoS0 publishes from a user with no ACL entry \u2014 CONNACK 0 and clean client logs while every message vanishes",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-bad-frame-after-a-resolution-switch-is",
   "title": "The bad frame after a resolution switch is not always auto-exposure \u2014 locking AEC, AGC and AWB changed nothing here",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-openmv-n6-switches-resolution-on-a-live",
   "title": "The OpenMV N6 switches resolution on a live pipeline in 108 ms with no discard and no crash, which is what an ESP32 camera cannot do",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-resolution-range-where-offloading-detection-wins-is",
   "title": "The resolution range where offloading detection wins is the same range where the detector stops detecting",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "on-device-inference-is-free-below-qvga-because",
   "title": "On-device inference is free below QVGA because it hides inside the sensor's frame period, and offloading cannot beat free",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "trigger-to-still-is-139-to-528-ms",
   "title": "Trigger-to-still is 139 to 528 ms on an OV3660 against 900 to 1700 ms on a GC0308, and almost all of the difference is the switch mechanism",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "after-set-framesize-the-driver-reports-the-new",
   "title": "After set_framesize the driver reports the new resolution and hands back the old one, so one discard is mandatory and metadata cannot detect it",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "whether-to-pin-channel-and-bssid-has-three",
   "title": "Whether to pin channel and BSSID has three different right answers on three boards, so it must be measured and never assumed",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "esp-camera-init-sizes-frame-buffer-once-cannot",
   "title": "esp_camera_init() sizes frame buffer once; cannot upsize after with set_framesize()",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-ap-stale-state-degrades-tcp-throughput-after",
   "title": "WiFi AP stale state degrades TCP throughput after 10\u201320 cold boots; monitor and switch AP if needed",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-xclk-24-mhz-causes-frame-corruption-and",
   "title": "Asking an ESP32-S3 for 24 MHz XCLK actually delivers 26.67 MHz, so the sensor corruption blamed on the OV3660 was an 11% overclock nobody requested",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "on-device-detection-and-a-wifi-stack-compete",
   "title": "On-device detection and a WiFi stack compete for the same 320 KB of internal SRAM, and you can comfortably have one",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "esp-dl-reads-rgb565-as-big-endian-while",
   "title": "esp-dl reads RGB565 as big-endian while jpg2rgb565 emits little-endian, so a detector silently returns zero detections",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-same-ov3660-board-produced-working-hardware-jpeg",
   "title": "A camera sensor with PWDN and RESET tied to -1 never resets when the MCU does, so a stuck state survives every reboot and looks exactly like counterfeit silicon",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "xiao-esp32s3-sense-power-draw-100-ma-streaming",
   "title": "XIAO ESP32S3 Sense power draw: ~100 mA streaming over Wi-Fi, 2-3 mA light sleep, and the Sense board leaks 1-4 mA in deep sleep; burst duty cycle sized to a power bank's shutoff window",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-arduino-esp32-core-s-5760-byte-tcp",
   "title": "The Arduino ESP32 core's 5760-byte TCP send buffer is the ceiling on camera streaming, and it binds before the sensor does",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "overclocking-an-ov3660-s-xclk-produces-structurally-valid",
   "title": "Overclocking an OV3660's XCLK produces structurally valid JPEGs full of garbage pixels, so byte-level validation passes and the images are ruined",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "two-runs-on-the-same-sensor-disagree-about",
   "title": "RETRACTED: the OV3660 'disagreement by board' was two measurement artifacts, not two different silicons",
   "status": "retracted"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-set-framesize-causes-stack-canary-crash-when",
   "title": "GC0308 set_framesize() causes stack canary crash when shrinking resolution",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "on-a-hardware-jpeg-camera-the-cold-boot",
   "title": "On a hardware-JPEG camera the cold-boot budget is dominated by the camera, not WiFi \u2014 the reverse of a software-JPEG board on the same host",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "passing-an-explicit-bssid-to-wifi-begin-makes",
   "title": "Passing an explicit BSSID to WiFi.begin makes association 11x slower, because it forces a targeted scan that dwells for 360 ms",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "three-ways-a-throughput-measurement-reported-a-number",
   "title": "Three ways a throughput measurement reported a number that was not real, and how each was caught",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-capture-encode-send-loop-starves-the-idle",
   "title": "A capture-encode-send loop starves the idle task and the watchdog aborts the run at 60 seconds, and unsubscribing the idle tasks is timing-neutral",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "bring-wifi-up-before-the-camera-on-an",
   "title": "Bring WiFi up BEFORE the camera on an ESP32-S3, and treat cam_task as the single fragile point in the esp32-camera driver",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-begin-must-precede-esp-camera-init-to",
   "title": "WiFi.begin() must precede esp_camera_init() to avoid boot loop",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-pixel-clock-scales-fps-directly-no-hidden",
   "title": "GC0308 pixel clock scales fps directly; no hidden PLL half-speed trap",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "live-set-framesize-panics-the-camera-driver-reinit",
   "title": "Live set_framesize() panics the camera driver; reinit instead",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-camera-init-on-a-gc0308-costs-a",
   "title": "esp_camera_init on a GC0308 costs a fixed 283 ms regardless of clock, resolution or buffer location, so the only way to remove it is to overlap it",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "an-access-point-buffers-downlink-traffic-for-a",
   "title": "An access point buffers downlink traffic for a station whose power save is off, and only continuous uplink clears it",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "pinning-a-client-to-the-strongest-access-point",
   "title": "Pinning a client to the strongest access point made connection 3.8x worse, because signal strength selects for the wrong thing in a mesh",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-camera-init-time-is-283-ms-fixed",
   "title": "GC0308 camera init time is ~283 ms fixed, independent of tunable parameters",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "bssid-pinning-to-strongest-signal-creates-3-8",
   "title": "BSSID pinning to strongest signal creates 3.8\u00d7 slowdown in mesh networks",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-camera-pipeline-crashes-when-frame-size-is",
   "title": "GC0308 camera pipeline crashes when frame size is changed live",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "streaming-at-a-lower-resolution-buys-zero-frame",
   "title": "Streaming at a lower resolution buys zero frame rate on a GC0308, because frame period is set by the sensor clock and not by pixel count",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-auto-exposure-transient-after-re-initialising-a",
   "title": "The auto-exposure transient after re-initialising a GC0308 cannot be removed in software, and the register carry-over that should fix it does not",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "set-framesize-on-a-gc0308-fails-in-two",
   "title": "set_framesize() on a GC0308 fails in two different ways depending on direction: upward it silently truncates the image, downward it crashes deterministically",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "trigger-to-still-on-a-gc0308-is-400",
   "title": "Trigger to still on a GC0308 is 400 ms to a decodable image and 1.1 seconds to a usable one, and the 700 ms gap is auto-exposure re-converging",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-optimal-architecture-is-to-never-switch-resolution",
   "title": "GC0308: optimal architecture is to never switch resolution",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-framesize-changes-crash-or-corrupt-silently",
   "title": "GC0308: framesize changes crash or corrupt silently",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-ae-reconvergence-after-re-init-takes-700",
   "title": "GC0308: AE reconvergence after re-init takes ~700 ms and cannot be disabled",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "the-dtr-rts-reset-on-esp32-s3-usb",
   "title": "The DTR/RTS reset on ESP32-S3 USB-Serial-JTAG is a system reset, not a power-on reset, and the RTC counter surviving it is how you prove that",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-byte-order-breaks-both-esp-dl-and",
   "title": "RGB565 byte order breaks both esp-dl and fmt2jpg silently",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-dl-msr01-crashes-on-inputs-below-32",
   "title": "esp-dl MSR01 crashes on inputs below ~32\u00d724 effective pixels",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp32-s3-psram-mode-must-be-octal-not",
   "title": "ESP32-S3 PSRAM mode must be OCTAL, not QIO",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-timer-get-time-carries-rtc-offset-affects",
   "title": "esp_timer_get_time() carries RTC offset; affects cold-boot timing measurements",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "camera-pin-map-mismatch-causes-hard-esp32-s3",
   "title": "Camera pin map mismatch causes hard ESP32-S3 wedge",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "freenove-esp32-s3-wroom-16-mb-flash-boot",
   "title": "Freenove ESP32-S3-WROOM 16 MB flash boot loop with wrong partition config",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "if-every-robot-can-hear-every-robot-never",
   "title": "If every robot can hear every robot, never build a relay - and one channel carries about 400 usable broadcast frames per second, shared",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "two-hops-cost-2-08x-at-the-median",
   "title": "Two hops cost 2.08x at the median but 2.6x at p90 and 4x in the tail, and none of the excess is the relay's own code",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-relay-makes-the-far-node-s-failure",
   "title": "A relay makes the far node's failure invisible to the link layer: 800 consecutive successful sends while nothing reached the destination",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "esp-now-send-success-means-the-peer-s",
   "title": "ESP_NOW_SEND_SUCCESS means the peer's radio ACKed the frame, not that its application received it - and on broadcast it means nothing at all",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-board-s-camera-pin-map-is-compiled",
   "title": "A board's camera pin map is compiled as immediates, so searching its firmware binary for the pin numbers finds nothing",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-capture-on-the-esp32-s3-is-limited",
   "title": "RGB565 capture on the ESP32-S3 is limited by frame WIDTH, not by memory: 1280x720 fails with 6.5 MB of PSRAM free while 864x1536 succeeds",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-seeed-xiao-esp32s3-sense-carries-an-ov3660",
   "title": "The Seeed XIAO ESP32S3 Sense carries an OV3660 with hardware JPEG to 3 MP, and its sensor-side encoder is 18x faster than encoding on the chip",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "software-jpeg-beats-shipping-raw-frames-by-4",
   "title": "Software JPEG beats shipping raw frames by 4.6x on a chip with no JPEG hardware, because the link is the harder wall",
   "status": "working"
  }
 ]
}