{
 "tag": "esp32",
 "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": "ch340-bridged-esp32-stays-enumerated-across-firmware-reflash",
   "title": "CH340-bridged ESP32 stays enumerated across firmware reflash unlike native-USB boards",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "non-enumerating-device-triggers-xhci-command-timeouts-not",
   "title": "Non-enumerating device triggers xHCI command timeouts, not reconnect storms",
   "status": "provisional"
  },
  {
   "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": "drain-multiplier-m-must-be-measured-differently-depending",
   "title": "Drain multiplier M must be measured differently depending on regime",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "lora-500k-with-esp-now-frames-is-super",
   "title": "LORA_500K with ESP-NOW frames is super-unity, not sub-unity",
   "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": "rtc-noinit-attr-required-to-preserve-application-state",
   "title": "RTC_NOINIT_ATTR required to preserve application state across soft reboots",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "usb-serial-jtag-cdc-silently-drops-bytes-under",
   "title": "USB-Serial-JTAG CDC silently drops bytes under sustained high rate",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "freertos-task-scheduling-taskyield-at-elevated-priority-star",
   "title": "FreeRTOS task scheduling: taskYIELD() at elevated priority starves lower-priority tasks",
   "status": "provisional"
  },
  {
   "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": "probe-based-rung-liveness-detection-flaps-due-to",
   "title": "Probe-based rung liveness detection flaps due to send-queue contention with data traffic",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "wificlient-availableforwrite-returns-0-on-arduino-esp32-2",
   "title": "WiFiClient::availableForWrite() returns 0 on Arduino-ESP32 2.0.17 and breaks TCP flow control",
   "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": "bench-reset-sh-checks-whether-a-board-is",
   "title": "bench-reset.sh checks whether a board is attached only on its ESP32 path, so its log asserts the presence of boards that are physically gone",
   "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": "an-ov3660-clone-reads-midh-midl-as-0x00",
   "title": "A false counterfeit conviction stood through two corrections because each test's control ran on a different axis than the accusation",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "runtime-set-framesize-requires-dma-buffers-sized-for",
   "title": "Runtime set_framesize requires DMA buffers sized for largest frame, not init frame",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "first-frame-after-mode-switch-has-old-resolution",
   "title": "First frame after mode-switch has old resolution despite new fb->width, decodes as wrong size",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-clone-sensor-midh-midl-are-0x00-0x00",
   "title": "The 'counterfeit' OV3660 was genuine: every signal that convicted it was an artifact \u2014 wrong-register PLL, a stuck sensor state that survives reboot, and host-clock xclk traps",
   "status": "provisional"
  },
  {
   "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": "ch340-serial-link-to-esp32-s3-fails-above",
   "title": "CH340 serial link to ESP32-S3 is usable to 1 Mbaud and unusable above it \u2014 by two different failure modes on the same board",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-dma-line-buffer-limits-ov3660-to-1024px",
   "title": "RGB565 DMA line buffer limits OV3660 to 1024px width",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-byte-order-must-be-swapped-for-esp",
   "title": "RGB565 byte order must be swapped for esp-dl MSR01 face detector",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "framesize-96x96-jpeg-hang-on-ov3660",
   "title": "FRAMESIZE_96X96 JPEG hang on OV3660",
   "status": "provisional"
  },
  {
   "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": "ch340-uart-loses-bytes-at-2-mbaud-on",
   "title": "CH340 UART loses bytes at 2 Mbaud on this board",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "frame-buffer-allocation-is-fixed-at-esp-camera",
   "title": "Frame buffer allocation is fixed at esp_camera_init(), cannot scale up at runtime",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "first-frame-after-set-framesize-is-stale-and",
   "title": "First frame after set_framesize() is stale and mislabeled on OV3660",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ae-awb-api-freeze-uses-wrong-initial-exposure",
   "title": "AE/AWB API freeze uses wrong initial exposure on OV3660",
   "status": "provisional"
  },
  {
   "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": "sargbench1",
   "id": "rgb565-byte-order-mismatch-between-jpg2rgb565-and-esp",
   "title": "RGB565 byte-order mismatch between jpg2rgb565 and esp-dl camera buffers",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-1024-px-lcd-cam-line-buffer-limits",
   "title": "OV3660 1024-px LCD_CAM line buffer limits RGB565 capture width on ESP32-S3",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-dl-detection-libraries-absent-from-platformio-framework",
   "title": "esp-dl detection libraries absent from PlatformIO framework-arduinoespressif32",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-clone-on-xiao-esp32s3-sense-does-not",
   "title": "RETRACTED: the XIAO ESP32S3 Sense OV3660 does support hardware JPEG \u2014 35+ consecutive captures after a power cycle",
   "status": "retracted"
  },
  {
   "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": "static-ip-removes-dhcp-variance-from-cold-boot",
   "title": "Static IP removes DHCP variance from cold-boot WiFi timing",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "xclk-16-mhz-silently-fails-on-ov3660-with",
   "title": "DISPUTED: 16 MHz XCLK was recorded as delivering zero frames on an OV3660, but a later side-by-side run captured cleanly at 16 MHz on two of them",
   "status": "unverified"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-bssid-pinning-regresses-association-speed-11-on",
   "title": "WiFi BSSID pinning regresses association speed 11\u00d7 on ESP32-S3",
   "status": "provisional"
  },
  {
   "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"
  }
 ]
}