Merge "iwyu: //aos/vision/..."
diff --git a/aos/events/epoll.cc b/aos/events/epoll.cc
index 8c5c3e1..61c346e 100644
--- a/aos/events/epoll.cc
+++ b/aos/events/epoll.cc
@@ -1,14 +1,20 @@
 #include "aos/events/epoll.h"
 
+#include <errno.h>
 #include <fcntl.h>
 #include <sys/epoll.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/timerfd.h>
+#include <time.h>
 #include <unistd.h>
 
+#include <algorithm>
 #include <atomic>
 #include <cstring>
+#include <ostream>
+#include <string>
+#include <utility>
 #include <vector>
 
 #include "glog/logging.h"
diff --git a/aos/events/epoll.h b/aos/events/epoll.h
index 526c6a7..80ae721 100644
--- a/aos/events/epoll.h
+++ b/aos/events/epoll.h
@@ -1,13 +1,12 @@
 #ifndef AOS_EVENTS_EPOLL_H_
 #define AOS_EVENTS_EPOLL_H_
 
-#include <fcntl.h>
+#include <stdint.h>
 #include <sys/epoll.h>
-#include <sys/timerfd.h>
-#include <unistd.h>
 
 #include <atomic>
 #include <functional>
+#include <memory>
 #include <vector>
 
 #include "aos/time/time.h"
diff --git a/aos/events/event_loop_event.h b/aos/events/event_loop_event.h
index 588b851..4d1ff07 100644
--- a/aos/events/event_loop_event.h
+++ b/aos/events/event_loop_event.h
@@ -1,6 +1,10 @@
 #ifndef AOS_EVENTS_EVENT_LOOP_EVENT_H
 #define AOS_EVENTS_EVENT_LOOP_EVENT_H
 
+#include <stddef.h>
+
+#include <chrono>
+
 #include "glog/logging.h"
 
 #include "aos/time/time.h"
diff --git a/aos/events/logging/boot_timestamp.h b/aos/events/logging/boot_timestamp.h
index e9c7877..dc5967c 100644
--- a/aos/events/logging/boot_timestamp.h
+++ b/aos/events/logging/boot_timestamp.h
@@ -1,7 +1,13 @@
 #ifndef AOS_EVENTS_LOGGING_BOOT_TIMESTAMP_H_
 #define AOS_EVENTS_LOGGING_BOOT_TIMESTAMP_H_
 
+#include <stddef.h>
+#include <stdint.h>
+
+#include <chrono>
+#include <compare>
 #include <iostream>
+#include <limits>
 
 #include "glog/logging.h"
 
diff --git a/aos/events/logging/file_operations.cc b/aos/events/logging/file_operations.cc
index 04e695e..d54c8b6 100644
--- a/aos/events/logging/file_operations.cc
+++ b/aos/events/logging/file_operations.cc
@@ -1,5 +1,8 @@
 #include "aos/events/logging/file_operations.h"
 
+#include <algorithm>
+#include <ostream>
+
 #include "absl/strings/match.h"
 #include "glog/logging.h"
 
diff --git a/aos/events/logging/file_operations.h b/aos/events/logging/file_operations.h
index 0c2133d..5f87ca5 100644
--- a/aos/events/logging/file_operations.h
+++ b/aos/events/logging/file_operations.h
@@ -1,8 +1,11 @@
 #ifndef AOS_EVENTS_LOGGING_FILE_OPERATIONS_H_
 #define AOS_EVENTS_LOGGING_FILE_OPERATIONS_H_
 
+#include <stddef.h>
+
 #include <filesystem>
 #include <string>
+#include <string_view>
 #include <vector>
 
 namespace aos::logger::internal {
diff --git a/aos/ipc_lib/aos_sync.cc b/aos/ipc_lib/aos_sync.cc
index b1a9fb0..78c6b2c 100644
--- a/aos/ipc_lib/aos_sync.cc
+++ b/aos/ipc_lib/aos_sync.cc
@@ -7,18 +7,16 @@
 
 #include <linux/futex.h>
 #include <pthread.h>
-#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
 #include <sys/syscall.h>
-#include <sys/types.h>
 #include <unistd.h>
 
 #include <cassert>
 #include <cerrno>
 #include <cinttypes>
 #include <climits>
-#include <cstddef>
-#include <cstdint>
-#include <cstring>
+#include <ostream>
 
 #include "aos/ipc_lib/shm_observers.h"
 
@@ -26,9 +24,6 @@
 #include <sanitizer/tsan_interface_atomic.h>
 #endif
 
-#include <algorithm>
-#include <type_traits>
-
 #include "absl/base/call_once.h"
 #include "glog/logging.h"
 
diff --git a/aos/ipc_lib/aos_sync.h b/aos/ipc_lib/aos_sync.h
index 157c1b2..0cdab30 100644
--- a/aos/ipc_lib/aos_sync.h
+++ b/aos/ipc_lib/aos_sync.h
@@ -1,11 +1,8 @@
 #ifndef AOS_IPC_LIB_SYNC_H_
 #define AOS_IPC_LIB_SYNC_H_
 
-#include <signal.h>
-#include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
-#include <stdlib.h>
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/aos/ipc_lib/core_lib.c b/aos/ipc_lib/core_lib.c
index bfe80c1..6f9aad2 100644
--- a/aos/ipc_lib/core_lib.c
+++ b/aos/ipc_lib/core_lib.c
@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "aos/ipc_lib/aos_sync.h"
 #include "aos/ipc_lib/shared_mem_types.h"
 
 static uint8_t aos_8max(uint8_t l, uint8_t r) { return (l > r) ? l : r; }
diff --git a/aos/ipc_lib/core_lib.h b/aos/ipc_lib/core_lib.h
index d62f602..a3a5ba8 100644
--- a/aos/ipc_lib/core_lib.h
+++ b/aos/ipc_lib/core_lib.h
@@ -1,10 +1,9 @@
 #ifndef _AOS_CORE_LIB_H_
 #define _AOS_CORE_LIB_H_
 
+#include <stddef.h>
 #include <stdint.h>
 
-#include "aos/ipc_lib/aos_sync.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif  // __cplusplus
diff --git a/aos/ipc_lib/event.cc b/aos/ipc_lib/event.cc
index 6b58e33..fd5bcaf 100644
--- a/aos/ipc_lib/event.cc
+++ b/aos/ipc_lib/event.cc
@@ -1,6 +1,10 @@
 #include "aos/ipc_lib/event.h"
 
+#include <time.h>
+
 #include <chrono>
+#include <ostream>
+#include <ratio>
 
 #include "glog/logging.h"
 
diff --git a/aos/ipc_lib/event_test.cc b/aos/ipc_lib/event_test.cc
index eda9156..5a8e644 100644
--- a/aos/ipc_lib/event_test.cc
+++ b/aos/ipc_lib/event_test.cc
@@ -1,6 +1,7 @@
 #include "aos/ipc_lib/event.h"
 
 #include <chrono>
+#include <memory>
 #include <thread>
 
 #include "gtest/gtest.h"
diff --git a/aos/ipc_lib/eventfd_latency.cc b/aos/ipc_lib/eventfd_latency.cc
index efd326e..4a5616f 100644
--- a/aos/ipc_lib/eventfd_latency.cc
+++ b/aos/ipc_lib/eventfd_latency.cc
@@ -1,18 +1,21 @@
+#include <inttypes.h>
+#include <string.h>
 #include <sys/eventfd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
+#include <unistd.h>
 
+#include <algorithm>
 #include <chrono>
+#include <compare>
 #include <random>
+#include <ratio>
 #include <thread>
 
 #include "gflags/gflags.h"
+#include "glog/logging.h"
 
 #include "aos/events/epoll.h"
-#include "aos/init.h"
 #include "aos/ipc_lib/latency_lib.h"
 #include "aos/logging/implementations.h"
-#include "aos/logging/logging.h"
 #include "aos/realtime.h"
 #include "aos/time/time.h"
 
diff --git a/aos/ipc_lib/futex_latency.cc b/aos/ipc_lib/futex_latency.cc
index 80ba711..eee015e 100644
--- a/aos/ipc_lib/futex_latency.cc
+++ b/aos/ipc_lib/futex_latency.cc
@@ -1,18 +1,19 @@
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
+#include <inttypes.h>
+#include <signal.h>
 
+#include <algorithm>
 #include <chrono>
+#include <compare>
 #include <random>
+#include <ratio>
 #include <thread>
 
 #include "gflags/gflags.h"
+#include "glog/logging.h"
 
 #include "aos/condition.h"
-#include "aos/init.h"
 #include "aos/ipc_lib/latency_lib.h"
 #include "aos/logging/implementations.h"
-#include "aos/logging/logging.h"
 #include "aos/mutex/mutex.h"
 #include "aos/realtime.h"
 #include "aos/time/time.h"
diff --git a/aos/ipc_lib/index.h b/aos/ipc_lib/index.h
index 75f1e9b..c4cc64a 100644
--- a/aos/ipc_lib/index.h
+++ b/aos/ipc_lib/index.h
@@ -2,10 +2,8 @@
 #define AOS_IPC_LIB_INDEX_H_
 
 #include <stdint.h>
-#include <sys/types.h>
 
-#include <atomic>
-#include <string>
+#include <limits>
 
 #include "glog/logging.h"
 
@@ -25,10 +23,6 @@
 
 namespace aos::ipc_lib {
 
-struct AtomicQueueIndex;
-class AtomicIndex;
-class Index;
-
 namespace testing {
 class QueueIndexTest;
 }  // namespace testing
diff --git a/aos/ipc_lib/index_test.cc b/aos/ipc_lib/index_test.cc
index 8e0da6d..334696e 100644
--- a/aos/ipc_lib/index_test.cc
+++ b/aos/ipc_lib/index_test.cc
@@ -1,5 +1,7 @@
 #include "aos/ipc_lib/index.h"
 
+#include <ostream>
+
 #include "glog/logging.h"
 #include "gtest/gtest.h"
 
diff --git a/aos/ipc_lib/ipc_comparison.cc b/aos/ipc_lib/ipc_comparison.cc
index f15db53..8bb78d7 100644
--- a/aos/ipc_lib/ipc_comparison.cc
+++ b/aos/ipc_lib/ipc_comparison.cc
@@ -1,23 +1,30 @@
+#include <arpa/inet.h>
+#include <errno.h>
 #include <fcntl.h>
+#include <inttypes.h>
 #include <mqueue.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <pthread.h>
 #include <semaphore.h>
+#include <stdio.h>
+#include <string.h>
 #include <sys/eventfd.h>
+#include <sys/ipc.h>
 #include <sys/msg.h>
 #include <sys/sem.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/un.h>
+#include <unistd.h>
 
 #include <atomic>
 #include <chrono>
+#include <compare>
 #include <cstdint>
 #include <memory>
 #include <string>
 #include <thread>
+#include <utility>
 
 #include "gflags/gflags.h"
 
@@ -25,7 +32,6 @@
 #include "aos/init.h"
 #include "aos/ipc_lib/event.h"
 #include "aos/logging/implementations.h"
-#include "aos/logging/logging.h"
 #include "aos/mutex/mutex.h"
 #include "aos/realtime.h"
 #include "aos/time/time.h"
diff --git a/aos/ipc_lib/latency_lib.cc b/aos/ipc_lib/latency_lib.cc
index 0fcb8de..a31df1d 100644
--- a/aos/ipc_lib/latency_lib.cc
+++ b/aos/ipc_lib/latency_lib.cc
@@ -1,8 +1,9 @@
 #include "aos/ipc_lib/latency_lib.h"
 
+#include <algorithm>
 #include <chrono>
+#include <compare>
 #include <random>
-#include <thread>
 
 #include "aos/logging/logging.h"
 #include "aos/realtime.h"
diff --git a/aos/ipc_lib/latency_lib.h b/aos/ipc_lib/latency_lib.h
index 97bc434..8206f3e 100644
--- a/aos/ipc_lib/latency_lib.h
+++ b/aos/ipc_lib/latency_lib.h
@@ -2,10 +2,8 @@
 #define AOS_IPC_LIB_LATENCY_LIB_H_
 
 #include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <chrono>
+#include <string.h>
+#include <unistd.h>
 
 #include "glog/logging.h"
 
diff --git a/aos/ipc_lib/lockless_queue.cc b/aos/ipc_lib/lockless_queue.cc
index 57a2e9e..ae3a493 100644
--- a/aos/ipc_lib/lockless_queue.cc
+++ b/aos/ipc_lib/lockless_queue.cc
@@ -2,21 +2,25 @@
 
 #include <linux/futex.h>
 #include <pwd.h>
+#include <sched.h>
+#include <string.h>
+#include <sys/syscall.h>
 #include <sys/types.h>
-#include <syscall.h>
 #include <unistd.h>
 
 #include <algorithm>
+#include <chrono>
+#include <compare>
 #include <iomanip>
 #include <iostream>
-#include <sstream>
+#include <string>
+#include <string_view>
 
 #include "absl/strings/escaping.h"
 #include "gflags/gflags.h"
 #include "glog/logging.h"
 
 #include "aos/ipc_lib/lockless_queue_memory.h"
-#include "aos/realtime.h"
 #include "aos/util/compiler_memory_barrier.h"
 
 DEFINE_bool(dump_lockless_queue_data, false,
diff --git a/aos/ipc_lib/lockless_queue.h b/aos/ipc_lib/lockless_queue.h
index 462b2b6..ce067e6 100644
--- a/aos/ipc_lib/lockless_queue.h
+++ b/aos/ipc_lib/lockless_queue.h
@@ -1,14 +1,18 @@
 #ifndef AOS_IPC_LIB_LOCKLESS_QUEUE_H_
 #define AOS_IPC_LIB_LOCKLESS_QUEUE_H_
 
-#include <sys/signalfd.h>
-#include <sys/types.h>
+#include <signal.h>
+#include <stdint.h>
 
-#include <csignal>
+#include <atomic>
+#include <functional>
+#include <iosfwd>
 #include <optional>
+#include <utility>
 #include <vector>
 
 #include "absl/types/span.h"
+#include "glog/logging.h"
 
 #include "aos/events/context.h"
 #include "aos/ipc_lib/aos_sync.h"
diff --git a/aos/ipc_lib/lockless_queue_death_test.cc b/aos/ipc_lib/lockless_queue_death_test.cc
index bc5ebb7..c61c62c 100644
--- a/aos/ipc_lib/lockless_queue_death_test.cc
+++ b/aos/ipc_lib/lockless_queue_death_test.cc
@@ -1,31 +1,25 @@
-#include <dlfcn.h>
-#include <elf.h>
-#include <linux/futex.h>
+#include <stdio.h>
 #include <sys/mman.h>
-#include <sys/procfs.h>
-#include <sys/ptrace.h>
-#include <sys/syscall.h>
-#include <sys/uio.h>
-#include <unistd.h>
-#include <wait.h>
 
 #include <chrono>
 #include <cinttypes>
 #include <functional>
 #include <memory>
-#include <thread>
+#include <optional>
+#include <ostream>
 
-#include "gflags/gflags.h"
 #include "glog/logging.h"
 #include "gtest/gtest.h"
 
-#include "aos/ipc_lib/aos_sync.h"
+#include "aos/events/context.h"
+#include "aos/ipc_lib/index.h"
 #include "aos/ipc_lib/lockless_queue.h"
 #include "aos/ipc_lib/lockless_queue_memory.h"
 #include "aos/ipc_lib/lockless_queue_stepping.h"
-#include "aos/ipc_lib/shm_observers.h"
-#include "aos/realtime.h"
+#include "aos/ipc_lib/robust_ownership_tracker.h"
 #include "aos/testing/test_logging.h"
+#include "aos/time/time.h"
+#include "aos/uuid.h"
 
 namespace aos::ipc_lib::testing {
 
diff --git a/aos/ipc_lib/lockless_queue_memory.h b/aos/ipc_lib/lockless_queue_memory.h
index 70fc8a8..12aec89 100644
--- a/aos/ipc_lib/lockless_queue_memory.h
+++ b/aos/ipc_lib/lockless_queue_memory.h
@@ -1,6 +1,7 @@
 #ifndef AOS_IPC_LIB_LOCKLESS_QUEUE_MEMORY_H_
 #define AOS_IPC_LIB_LOCKLESS_QUEUE_MEMORY_H_
 
+#include <stdint.h>
 #include <sys/types.h>
 
 #include <cstddef>
@@ -8,7 +9,6 @@
 #include "aos/ipc_lib/aos_sync.h"
 #include "aos/ipc_lib/index.h"
 #include "aos/ipc_lib/lockless_queue.h"
-#include "aos/time/time.h"
 
 namespace aos::ipc_lib {
 
diff --git a/aos/ipc_lib/lockless_queue_stepping.cc b/aos/ipc_lib/lockless_queue_stepping.cc
index 40d1631..a7bd233 100644
--- a/aos/ipc_lib/lockless_queue_stepping.cc
+++ b/aos/ipc_lib/lockless_queue_stepping.cc
@@ -1,24 +1,30 @@
 #include "aos/ipc_lib/lockless_queue_stepping.h"
 
-#include <dlfcn.h>
+#include <assert.h>
 #include <elf.h>
-#include <linux/futex.h>
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
 #include <sys/mman.h>
 #include <sys/procfs.h>
 #include <sys/ptrace.h>
 #include <sys/syscall.h>
 #include <sys/uio.h>
+#include <sys/wait.h>
 #include <unistd.h>
-#include <wait.h>
 
-#include <memory>
+#include <atomic>
+#include <new>
+#include <optional>
+#include <ostream>
+#include <string>
 #include <thread>
+#include <utility>
 
 #include "glog/logging.h"
 #include "gtest/gtest.h"
 
 #include "aos/ipc_lib/aos_sync.h"
-#include "aos/ipc_lib/lockless_queue_memory.h"
 #include "aos/ipc_lib/shm_observers.h"
 #include "aos/libc/aos_strsignal.h"
 #include "aos/testing/prevent_exit.h"
diff --git a/aos/ipc_lib/lockless_queue_stepping.h b/aos/ipc_lib/lockless_queue_stepping.h
index 590534f..8be7b44 100644
--- a/aos/ipc_lib/lockless_queue_stepping.h
+++ b/aos/ipc_lib/lockless_queue_stepping.h
@@ -1,11 +1,14 @@
 #ifndef AOS_IPC_LIB_LOCKLESS_QUEUE_STEPPING_H_
 #define AOS_IPC_LIB_LOCKLESS_QUEUE_STEPPING_H_
 
+#include <stdlib.h>
+#include <unistd.h>
+
 #include <cinttypes>
 #include <functional>
+#include <tuple>
 
 #include "aos/ipc_lib/lockless_queue.h"
-#include "aos/ipc_lib/lockless_queue_memory.h"
 
 namespace aos::ipc_lib::testing {
 
diff --git a/aos/ipc_lib/lockless_queue_test.cc b/aos/ipc_lib/lockless_queue_test.cc
index a2c0992..4169c93 100644
--- a/aos/ipc_lib/lockless_queue_test.cc
+++ b/aos/ipc_lib/lockless_queue_test.cc
@@ -1,21 +1,26 @@
 #include "aos/ipc_lib/lockless_queue.h"
 
-#include <sys/mman.h>
-#include <unistd.h>
-#include <wait.h>
+#include <sched.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/signalfd.h>
 
+#include <algorithm>
 #include <chrono>
 #include <cinttypes>
+#include <compare>
 #include <csignal>
-#include <memory>
+#include <new>
+#include <ostream>
 #include <random>
+#include <ratio>
 #include <thread>
+#include <type_traits>
 
 #include "gflags/gflags.h"
 #include "gtest/gtest.h"
 
 #include "aos/events/epoll.h"
-#include "aos/ipc_lib/aos_sync.h"
 #include "aos/ipc_lib/event.h"
 #include "aos/ipc_lib/lockless_queue_memory.h"
 #include "aos/ipc_lib/lockless_queue_stepping.h"
diff --git a/aos/ipc_lib/memory_mapped_queue.cc b/aos/ipc_lib/memory_mapped_queue.cc
index dc457fe..8daf5a1 100644
--- a/aos/ipc_lib/memory_mapped_queue.cc
+++ b/aos/ipc_lib/memory_mapped_queue.cc
@@ -1,10 +1,22 @@
 #include "aos/ipc_lib/memory_mapped_queue.h"
 
+#include <errno.h>
 #include <fcntl.h>
 #include <sys/mman.h>
+#include <sys/stat.h>
 #include <unistd.h>
 
+#include <chrono>
+#include <limits>
+#include <ostream>
+#include <thread>
+
 #include "absl/strings/str_cat.h"
+#include "flatbuffers/string.h"
+#include "glog/logging.h"
+
+#include "aos/ipc_lib/index.h"
+#include "aos/util/file.h"
 
 namespace aos::ipc_lib {
 
diff --git a/aos/ipc_lib/memory_mapped_queue.h b/aos/ipc_lib/memory_mapped_queue.h
index bd766c1..f16f88e 100644
--- a/aos/ipc_lib/memory_mapped_queue.h
+++ b/aos/ipc_lib/memory_mapped_queue.h
@@ -1,6 +1,12 @@
 #ifndef AOS_IPC_LIB_MEMORY_MAPPED_QUEUE_H_
 #define AOS_IPC_LIB_MEMORY_MAPPED_QUEUE_H_
 
+#include <stddef.h>
+#include <stdint.h>
+
+#include <string>
+#include <string_view>
+
 #include "absl/types/span.h"
 
 #include "aos/configuration.h"
diff --git a/aos/ipc_lib/named_pipe_latency.cc b/aos/ipc_lib/named_pipe_latency.cc
index 032b72e..023853d 100644
--- a/aos/ipc_lib/named_pipe_latency.cc
+++ b/aos/ipc_lib/named_pipe_latency.cc
@@ -1,17 +1,22 @@
+#include <fcntl.h>
+#include <inttypes.h>
+#include <string.h>
 #include <sys/stat.h>
-#include <sys/types.h>
+#include <unistd.h>
 
+#include <algorithm>
 #include <chrono>
+#include <compare>
 #include <random>
+#include <ratio>
 #include <thread>
 
 #include "gflags/gflags.h"
+#include "glog/logging.h"
 
 #include "aos/events/epoll.h"
-#include "aos/init.h"
 #include "aos/ipc_lib/latency_lib.h"
 #include "aos/logging/implementations.h"
-#include "aos/logging/logging.h"
 #include "aos/realtime.h"
 #include "aos/time/time.h"
 
diff --git a/aos/ipc_lib/print_lockless_queue_memory.cc b/aos/ipc_lib/print_lockless_queue_memory.cc
index 2cbcf12..4bad81c 100644
--- a/aos/ipc_lib/print_lockless_queue_memory.cc
+++ b/aos/ipc_lib/print_lockless_queue_memory.cc
@@ -1,7 +1,11 @@
 #include <fcntl.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
-#include <sys/types.h>
+#include <unistd.h>
+
+#include <ostream>
+
+#include "glog/logging.h"
 
 #include "aos/ipc_lib/lockless_queue.h"
 
diff --git a/aos/ipc_lib/queue_racer.cc b/aos/ipc_lib/queue_racer.cc
index 2797c24..67ed6c5 100644
--- a/aos/ipc_lib/queue_racer.cc
+++ b/aos/ipc_lib/queue_racer.cc
@@ -1,11 +1,20 @@
 #include "aos/ipc_lib/queue_racer.h"
 
+#include <stdio.h>
+
+#include <algorithm>
 #include <cinttypes>
 #include <cstring>
 #include <limits>
+#include <optional>
+#include <ostream>
+#include <thread>
 
+#include "absl/types/span.h"
+#include "glog/logging.h"
 #include "gtest/gtest.h"
 
+#include "aos/events/context.h"
 #include "aos/ipc_lib/event.h"
 
 namespace aos::ipc_lib {
diff --git a/aos/ipc_lib/queue_racer.h b/aos/ipc_lib/queue_racer.h
index 2cbe3ed..1c07c49 100644
--- a/aos/ipc_lib/queue_racer.h
+++ b/aos/ipc_lib/queue_racer.h
@@ -1,9 +1,18 @@
 #ifndef AOS_IPC_LIB_QUEUE_RACER_H_
 #define AOS_IPC_LIB_QUEUE_RACER_H_
 
-#include <cstring>
+#include <stdint.h>
 
+#include <atomic>
+#include <chrono>
+#include <cstring>
+#include <functional>
+#include <vector>
+
+#include "aos/ipc_lib/index.h"
 #include "aos/ipc_lib/lockless_queue.h"
+#include "aos/time/time.h"
+#include "aos/uuid.h"
 
 namespace aos::ipc_lib {
 
diff --git a/aos/ipc_lib/robust_ownership_tracker.cc b/aos/ipc_lib/robust_ownership_tracker.cc
index 13edebc..449e151 100644
--- a/aos/ipc_lib/robust_ownership_tracker.cc
+++ b/aos/ipc_lib/robust_ownership_tracker.cc
@@ -1,7 +1,5 @@
 #include "aos/ipc_lib/robust_ownership_tracker.h"
 
-#include "aos/ipc_lib/lockless_queue.h"
-
 namespace aos::ipc_lib {
 
 ::std::string RobustOwnershipTracker::DebugString() const {
diff --git a/aos/ipc_lib/robust_ownership_tracker.h b/aos/ipc_lib/robust_ownership_tracker.h
index a8bbca3..34c8b7a 100644
--- a/aos/ipc_lib/robust_ownership_tracker.h
+++ b/aos/ipc_lib/robust_ownership_tracker.h
@@ -1,11 +1,20 @@
 #ifndef AOS_IPC_LIB_ROBUST_OWNERSHIP_TRACKER_H_
 #define AOS_IPC_LIB_ROBUST_OWNERSHIP_TRACKER_H_
 
+#include <assert.h>
 #include <linux/futex.h>
+#include <stdint.h>
 #include <sys/syscall.h>
+#include <unistd.h>
 
+#include <atomic>
+#include <limits>
+#include <optional>
+#include <ostream>
 #include <string>
 
+#include "glog/logging.h"
+
 #include "aos/ipc_lib/aos_sync.h"
 #include "aos/util/top.h"
 
diff --git a/aos/ipc_lib/robust_ownership_tracker_test.cc b/aos/ipc_lib/robust_ownership_tracker_test.cc
index b204886..8df5da0 100644
--- a/aos/ipc_lib/robust_ownership_tracker_test.cc
+++ b/aos/ipc_lib/robust_ownership_tracker_test.cc
@@ -1,5 +1,7 @@
 #include "aos/ipc_lib/robust_ownership_tracker.h"
 
+#include <errno.h>
+#include <stdlib.h>
 #include <sys/mman.h>
 #include <sys/wait.h>
 
diff --git a/aos/ipc_lib/shared_mem.cc b/aos/ipc_lib/shared_mem.cc
index e5de366..30dd173 100644
--- a/aos/ipc_lib/shared_mem.cc
+++ b/aos/ipc_lib/shared_mem.cc
@@ -1,8 +1,8 @@
 #include "aos/ipc_lib/shared_mem.h"
 
 #include <fcntl.h>
+#include <stdint.h>
 #include <sys/mman.h>
-#include <sys/types.h>
 #include <unistd.h>
 
 #include <cassert>
@@ -10,11 +10,11 @@
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
+#include <ostream>
 
 #include "glog/logging.h"
 
 #include "aos/ipc_lib/aos_sync.h"
-#include "aos/ipc_lib/core_lib.h"
 
 // the path for the shared memory segment. see shm_open(3) for restrictions
 #define AOS_SHM_NAME "/aos_shared_mem"
diff --git a/aos/ipc_lib/shared_mem.h b/aos/ipc_lib/shared_mem.h
index 89a700e..4c2d8d7 100644
--- a/aos/ipc_lib/shared_mem.h
+++ b/aos/ipc_lib/shared_mem.h
@@ -2,8 +2,6 @@
 #define _SHARED_MEM_H_
 
 #include <stddef.h>
-#include <time.h>
-#include <unistd.h>
 
 #include "aos/ipc_lib/shared_mem_types.h"
 
diff --git a/aos/ipc_lib/shm_base.cc b/aos/ipc_lib/shm_base.cc
index 22bf915..5db25d3 100644
--- a/aos/ipc_lib/shm_base.cc
+++ b/aos/ipc_lib/shm_base.cc
@@ -1,5 +1,7 @@
 #include "aos/ipc_lib/shm_base.h"
 
+#include <string>
+
 DEFINE_string(shm_base, "/dev/shm/aos",
               "Directory to place queue backing mmaped files in.");
 namespace aos::testing {
diff --git a/aos/ipc_lib/shm_base.h b/aos/ipc_lib/shm_base.h
index b70df06..1d06a69 100644
--- a/aos/ipc_lib/shm_base.h
+++ b/aos/ipc_lib/shm_base.h
@@ -1,6 +1,8 @@
 #ifndef AOS_IPC_LIB_SHM_BASE_H_
 #define AOS_IPC_LIB_SHM_BASE_H_
 
+#include <string_view>
+
 #include "gflags/gflags.h"
 
 DECLARE_string(shm_base);
diff --git a/aos/ipc_lib/signal_stress.cc b/aos/ipc_lib/signal_stress.cc
index 0559bce..b2749af 100644
--- a/aos/ipc_lib/signal_stress.cc
+++ b/aos/ipc_lib/signal_stress.cc
@@ -1,17 +1,21 @@
+#include <inttypes.h>
 #include <sys/signalfd.h>
+#include <unistd.h>
 
+#include <algorithm>
 #include <chrono>
+#include <compare>
 #include <csignal>
 #include <random>
+#include <ratio>
 #include <thread>
 
 #include "gflags/gflags.h"
+#include "glog/logging.h"
 
 #include "aos/events/epoll.h"
-#include "aos/init.h"
 #include "aos/ipc_lib/latency_lib.h"
 #include "aos/logging/implementations.h"
-#include "aos/logging/logging.h"
 #include "aos/realtime.h"
 #include "aos/time/time.h"
 
diff --git a/aos/ipc_lib/signalfd.cc b/aos/ipc_lib/signalfd.cc
index d25151d..384baaa 100644
--- a/aos/ipc_lib/signalfd.cc
+++ b/aos/ipc_lib/signalfd.cc
@@ -1,8 +1,10 @@
 #include "aos/ipc_lib/signalfd.h"
 
+#include <string.h>
 #include <sys/types.h>
 
 #include <csignal>
+#include <ostream>
 #if __has_feature(memory_sanitizer)
 #include <sanitizer/msan_interface.h>
 #endif
diff --git a/aos/ipc_lib/signalfd.h b/aos/ipc_lib/signalfd.h
index 014ad5c..a2c2549 100644
--- a/aos/ipc_lib/signalfd.h
+++ b/aos/ipc_lib/signalfd.h
@@ -1,8 +1,8 @@
 #ifndef AOS_IPC_LIB_SIGNALFD_H_
 #define AOS_IPC_LIB_SIGNALFD_H_
 
+#include <signal.h>
 #include <sys/signalfd.h>
-#include <sys/types.h>
 
 #include <initializer_list>
 
diff --git a/aos/ipc_lib/signalfd_test.cc b/aos/ipc_lib/signalfd_test.cc
index 2f349c1..025d66b 100644
--- a/aos/ipc_lib/signalfd_test.cc
+++ b/aos/ipc_lib/signalfd_test.cc
@@ -1,5 +1,8 @@
 #include "aos/ipc_lib/signalfd.h"
 
+#include <memory>
+#include <thread>
+
 #include "glog/logging.h"
 #include "gtest/gtest.h"
 
diff --git a/aos/libc/aos_strerror.cc b/aos/libc/aos_strerror.cc
index 9d270c0..3c37a19 100644
--- a/aos/libc/aos_strerror.cc
+++ b/aos/libc/aos_strerror.cc
@@ -1,7 +1,5 @@
 #include "aos/libc/aos_strerror.h"
 
-#include <sys/types.h>
-
 #include <cassert>
 #include <cstdio>
 #include <cstring>
diff --git a/aos/libc/aos_strerror_test.cc b/aos/libc/aos_strerror_test.cc
index 06a012a..5b328d7 100644
--- a/aos/libc/aos_strerror_test.cc
+++ b/aos/libc/aos_strerror_test.cc
@@ -1,6 +1,9 @@
 #include "aos/libc/aos_strerror.h"
 
+#include <string.h>
+
 #include <cerrno>
+#include <string>
 
 #include "gtest/gtest.h"
 
diff --git a/aos/libc/aos_strsignal.cc b/aos/libc/aos_strsignal.cc
index 12838b4..6a91973 100644
--- a/aos/libc/aos_strsignal.cc
+++ b/aos/libc/aos_strsignal.cc
@@ -1,5 +1,9 @@
 #include "aos/libc/aos_strsignal.h"
 
+#include <features.h>
+#include <stdio.h>
+#include <string.h>
+
 #include <csignal>
 
 #include "glog/logging.h"
diff --git a/aos/libc/aos_strsignal_test.cc b/aos/libc/aos_strsignal_test.cc
index 7e91d46..7a607bd 100644
--- a/aos/libc/aos_strsignal_test.cc
+++ b/aos/libc/aos_strsignal_test.cc
@@ -1,6 +1,10 @@
 #include "aos/libc/aos_strsignal.h"
 
+#include <string.h>
+
 #include <csignal>
+#include <functional>
+#include <memory>
 #include <thread>
 
 #include "gtest/gtest.h"
diff --git a/aos/libc/dirname.cc b/aos/libc/dirname.cc
index e73030c..324d71c 100644
--- a/aos/libc/dirname.cc
+++ b/aos/libc/dirname.cc
@@ -1,5 +1,7 @@
 #include "aos/libc/dirname.h"
 
+#include <stddef.h>
+
 namespace aos::libc {
 namespace {
 
diff --git a/aos/libc/dirname_test.cc b/aos/libc/dirname_test.cc
index 501b752..26ae23c 100644
--- a/aos/libc/dirname_test.cc
+++ b/aos/libc/dirname_test.cc
@@ -1,6 +1,7 @@
 #include "aos/libc/dirname.h"
 
 #include <libgen.h>
+#include <string.h>
 
 #include "gtest/gtest.h"
 
diff --git a/aos/logging/context.cc b/aos/logging/context.cc
index 5e5d53c..00b7f3c 100644
--- a/aos/logging/context.cc
+++ b/aos/logging/context.cc
@@ -8,11 +8,14 @@
 #include <sanitizer/msan_interface.h>
 #endif
 #include <sys/prctl.h>
-#include <sys/types.h>
 #include <unistd.h>
 
-#include <cerrno>
+#include <algorithm>
+#include <cstddef>
 #include <cstring>
+#include <limits>
+#include <optional>
+#include <ostream>
 #include <string>
 
 extern char *program_invocation_name;
@@ -20,8 +23,6 @@
 
 #include "glog/logging.h"
 
-#include "aos/logging/implementations.h"
-
 namespace aos::logging::internal {
 namespace {
 
diff --git a/aos/logging/context.h b/aos/logging/context.h
index bb53b99..10993e8 100644
--- a/aos/logging/context.h
+++ b/aos/logging/context.h
@@ -3,10 +3,7 @@
 
 #include <sys/types.h>
 
-#include <atomic>
 #include <cinttypes>
-#include <climits>
-#include <cstddef>
 #include <memory>
 #include <string_view>
 
diff --git a/aos/logging/dynamic_logging.cc b/aos/logging/dynamic_logging.cc
index a3461b5..48c9dcb 100644
--- a/aos/logging/dynamic_logging.cc
+++ b/aos/logging/dynamic_logging.cc
@@ -1,5 +1,9 @@
 #include "aos/logging/dynamic_logging.h"
 
+#include <ostream>
+#include <string_view>
+
+#include "flatbuffers/string.h"
 #include "glog/logging.h"
 
 namespace aos::logging {
diff --git a/aos/logging/dynamic_logging.h b/aos/logging/dynamic_logging.h
index e3d3a6f..352d4b7 100644
--- a/aos/logging/dynamic_logging.h
+++ b/aos/logging/dynamic_logging.h
@@ -1,9 +1,8 @@
 #include <string>
 
-#include "glog/logging.h"
-
 #include "aos/events/event_loop.h"
 #include "aos/logging/dynamic_log_command_generated.h"
+#include "aos/macros.h"
 
 // The purpose of this class is to listen for /aos aos.logging.DynamicLogCommand
 // and make changes to the log level of the current application based on that
diff --git a/aos/logging/dynamic_logging_test.cc b/aos/logging/dynamic_logging_test.cc
index 70e491d..21e0c36 100644
--- a/aos/logging/dynamic_logging_test.cc
+++ b/aos/logging/dynamic_logging_test.cc
@@ -1,12 +1,18 @@
 #include "aos/logging/dynamic_logging.h"
 
-#include <sys/stat.h>
+#include <chrono>
+#include <memory>
+#include <ostream>
 
+#include "flatbuffers/buffer.h"
+#include "flatbuffers/flatbuffer_builder.h"
 #include "glog/logging.h"
 #include "gtest/gtest.h"
 
+#include "aos/configuration.h"
 #include "aos/events/event_loop.h"
 #include "aos/events/simulated_event_loop.h"
+#include "aos/flatbuffers.h"
 #include "aos/testing/path.h"
 
 using aos::testing::ArtifactPath;
diff --git a/aos/logging/implementations.cc b/aos/logging/implementations.cc
index da9e72b..042a09b 100644
--- a/aos/logging/implementations.cc
+++ b/aos/logging/implementations.cc
@@ -1,8 +1,6 @@
 #include "aos/logging/implementations.h"
 
-#include <algorithm>
 #include <chrono>
-#include <cinttypes>
 #include <cstdarg>
 
 #include "aos/logging/printf_formats.h"
diff --git a/aos/logging/implementations.h b/aos/logging/implementations.h
index 4e740f5..294750b 100644
--- a/aos/logging/implementations.h
+++ b/aos/logging/implementations.h
@@ -2,18 +2,13 @@
 #define AOS_LOGGING_IMPLEMENTATIONS_H_
 
 #include <sys/types.h>
-#include <unistd.h>
 
-#include <atomic>
-#include <climits>
-#include <cstdarg>
 #include <cstdint>
-#include <cstdio>
-#include <cstring>
 #include <functional>
 #include <memory>
 #include <string>
 #include <string_view>
+#include <utility>
 
 #include "aos/logging/context.h"
 #include "aos/logging/interface.h"
diff --git a/aos/logging/implementations_test.cc b/aos/logging/implementations_test.cc
index 693a91e..08fdc7b 100644
--- a/aos/logging/implementations_test.cc
+++ b/aos/logging/implementations_test.cc
@@ -1,5 +1,8 @@
 #include "aos/logging/implementations.h"
 
+#include <signal.h>
+#include <stdlib.h>
+
 #include <chrono>
 #include <cinttypes>
 #include <string>
diff --git a/aos/logging/interface.cc b/aos/logging/interface.cc
index e0ce6a8..326f28e 100644
--- a/aos/logging/interface.cc
+++ b/aos/logging/interface.cc
@@ -1,9 +1,12 @@
 #include "aos/logging/interface.h"
 
+#include <algorithm>
 #include <cstdarg>
 #include <cstdio>
 #include <cstring>
-#include <functional>
+#include <memory>
+#include <ostream>
+#include <string>
 #include <type_traits>
 
 #include "glog/logging.h"
@@ -11,6 +14,7 @@
 #include "aos/die.h"
 #include "aos/logging/context.h"
 #include "aos/logging/implementations.h"
+#include "aos/time/time.h"
 
 namespace aos::logging {
 namespace internal {
diff --git a/aos/logging/interface.h b/aos/logging/interface.h
index d2663e7..9889078 100644
--- a/aos/logging/interface.h
+++ b/aos/logging/interface.h
@@ -1,9 +1,9 @@
 #ifndef AOS_LOGGING_INTERFACE_H_
 #define AOS_LOGGING_INTERFACE_H_
 
+#include <stddef.h>
+
 #include <cstdarg>
-#include <functional>
-#include <string>
 #include <string_view>
 
 #include "aos/logging/logging.h"
@@ -13,8 +13,6 @@
 
 namespace aos {
 
-struct MessageType;
-
 namespace logging {
 
 // Takes a message and logs it. It will set everything up and then call DoLog
diff --git a/aos/logging/log_namer.cc b/aos/logging/log_namer.cc
index 412c74e..4b65687 100644
--- a/aos/logging/log_namer.cc
+++ b/aos/logging/log_namer.cc
@@ -1,23 +1,19 @@
 #include "aos/logging/log_namer.h"
 
 #include <dirent.h>
-#include <fcntl.h>
 #include <mntent.h>
-#include <pwd.h>
-#include <sys/types.h>
 #include <unistd.h>
 
 #include <cerrno>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
-#include <ctime>
+#include <ostream>
 #include <string>
 
+#include "gflags/gflags.h"
 #include "glog/logging.h"
 
-#include "aos/configuration.h"
-
 #if defined(__clang)
 #pragma clang diagnostic ignored "-Wformat-nonliteral"
 #elif defined(__GNUC__)
diff --git a/aos/scoped/scoped_fd.cc b/aos/scoped/scoped_fd.cc
index 846736d..f2375ab 100644
--- a/aos/scoped/scoped_fd.cc
+++ b/aos/scoped/scoped_fd.cc
@@ -1,5 +1,9 @@
 #include "aos/scoped/scoped_fd.h"
 
+#include <unistd.h>
+
+#include <ostream>
+
 #include "glog/logging.h"
 
 namespace aos {
diff --git a/aos/scoped/scoped_fd.h b/aos/scoped/scoped_fd.h
index e393e89..bd52657 100644
--- a/aos/scoped/scoped_fd.h
+++ b/aos/scoped/scoped_fd.h
@@ -1,10 +1,6 @@
 #ifndef AOS_SCOPED_SCOPED_FD_H_
 #define AOS_SCOPED_SCOPED_FD_H_
 
-#include <unistd.h>
-
-#include "aos/macros.h"
-
 namespace aos {
 
 // Smart "pointer" (container) for a file descriptor.
diff --git a/aos/stl_mutex/stl_mutex.h b/aos/stl_mutex/stl_mutex.h
index 5aaa6b6..c719805 100644
--- a/aos/stl_mutex/stl_mutex.h
+++ b/aos/stl_mutex/stl_mutex.h
@@ -2,6 +2,7 @@
 #define AOS_STL_MUTEX_H_
 
 #include <mutex>
+#include <ostream>
 
 #include "glog/logging.h"
 
diff --git a/aos/stl_mutex/stl_mutex_test.cc b/aos/stl_mutex/stl_mutex_test.cc
index 5343974..0eb50d4 100644
--- a/aos/stl_mutex/stl_mutex_test.cc
+++ b/aos/stl_mutex/stl_mutex_test.cc
@@ -1,5 +1,7 @@
 #include "aos/stl_mutex/stl_mutex.h"
 
+#include <memory>
+
 #include "gtest/gtest.h"
 
 #include "aos/die.h"
diff --git a/aos/testing/gtest_main.cc b/aos/testing/gtest_main.cc
index 6071bde..1940988 100644
--- a/aos/testing/gtest_main.cc
+++ b/aos/testing/gtest_main.cc
@@ -1,7 +1,3 @@
-#include <getopt.h>
-
-#include <iostream>
-
 #include "gflags/gflags.h"
 #include "glog/logging.h"
 #include "gtest/gtest.h"
diff --git a/aos/testing/test_logging.cc b/aos/testing/test_logging.cc
index 56875bb..15cb64b 100644
--- a/aos/testing/test_logging.cc
+++ b/aos/testing/test_logging.cc
@@ -1,6 +1,12 @@
 #include "aos/testing/test_logging.h"
 
+#include <string.h>
+
+#include <algorithm>
 #include <cstdio>
+#include <memory>
+#include <mutex>
+#include <string_view>
 #include <vector>
 
 #include "absl/base/call_once.h"
@@ -8,6 +14,7 @@
 
 #include "aos/logging/implementations.h"
 #include "aos/stl_mutex/stl_mutex.h"
+#include "aos/time/time.h"
 
 using ::aos::logging::LogMessage;
 
diff --git a/aos/testing/test_logging.h b/aos/testing/test_logging.h
index 3671aa1..b7e8977 100644
--- a/aos/testing/test_logging.h
+++ b/aos/testing/test_logging.h
@@ -1,8 +1,6 @@
 #ifndef AOS_TESTING_TEST_LOGGING_H_
 #define AOS_TESTING_TEST_LOGGING_H_
 
-#include "aos/time/time.h"
-
 namespace aos::testing {
 
 // Enables the logging framework for use during a gtest test.
diff --git a/aos/testing/test_logging_test.cc b/aos/testing/test_logging_test.cc
index 5731545..b37bec4 100644
--- a/aos/testing/test_logging_test.cc
+++ b/aos/testing/test_logging_test.cc
@@ -1,5 +1,6 @@
 #include "aos/testing/test_logging.h"
 
+#include <memory>
 #include <thread>
 
 #include "gtest/gtest.h"
diff --git a/aos/testing/test_shm.cc b/aos/testing/test_shm.cc
index 1b168ea..4922b63 100644
--- a/aos/testing/test_shm.cc
+++ b/aos/testing/test_shm.cc
@@ -1,9 +1,9 @@
 #include "aos/testing/test_shm.h"
 
+#include <stddef.h>
 #include <sys/mman.h>
 
-#include "gflags/gflags.h"
-
+#include "aos/ipc_lib/shared_mem.h"
 #include "aos/logging/logging.h"
 #include "aos/testing/test_logging.h"
 
diff --git a/aos/testing/test_shm.h b/aos/testing/test_shm.h
index 658a72d..24c87ce 100644
--- a/aos/testing/test_shm.h
+++ b/aos/testing/test_shm.h
@@ -1,7 +1,7 @@
 #ifndef AOS_TESTING_TEST_SHM_H_
 #define AOS_TESTING_TEST_SHM_H_
 
-#include "aos/ipc_lib/shared_mem.h"
+#include "aos/ipc_lib/shared_mem_types.h"
 
 namespace aos::testing {
 
diff --git a/aos/time/time.cc b/aos/time/time.cc
index e75fe45..fe8422b 100644
--- a/aos/time/time.cc
+++ b/aos/time/time.cc
@@ -1,11 +1,16 @@
 #include "aos/time/time.h"
 
+#include <ctype.h>
+#include <errno.h>
+#include <sys/time.h>
+
 #include <algorithm>
 #include <chrono>
-#include <cinttypes>
-#include <cstring>
+#include <compare>
+#include <cstdint>
 #include <ctime>
 #include <iomanip>
+#include <ratio>
 #include <sstream>
 
 #ifdef __linux__
diff --git a/aos/time/time.h b/aos/time/time.h
index 8462625..f0b3a06 100644
--- a/aos/time/time.h
+++ b/aos/time/time.h
@@ -1,14 +1,14 @@
 #ifndef AOS_TIME_H_
 #define AOS_TIME_H_
 
-#include <sys/time.h>
-
 #include <chrono>
-#include <cstdint>
 #include <ctime>
+#include <limits>
 #include <optional>
 #include <ostream>
-#include <thread>
+#include <string>
+#include <string_view>
+#include <thread>  // IWYU pragma: keep
 
 namespace aos {
 
diff --git a/aos/time/time_test.cc b/aos/time/time_test.cc
index 97116b0..eb97859 100644
--- a/aos/time/time_test.cc
+++ b/aos/time/time_test.cc
@@ -1,13 +1,11 @@
 #include "aos/time/time.h"
 
-#include <thread>
+#include <sys/time.h>
 
-#include "glog/logging.h"
+#include <memory>
+
 #include "gtest/gtest.h"
 
-#include "aos/macros.h"
-#include "aos/util/death_test_log_implementation.h"
-
 namespace aos::time::testing {
 
 namespace chrono = std::chrono;
diff --git a/aos/type_traits/type_traits_test.cpp b/aos/type_traits/type_traits_test.cpp
index 4c060bb..dc18887 100644
--- a/aos/type_traits/type_traits_test.cpp
+++ b/aos/type_traits/type_traits_test.cpp
@@ -1,5 +1,9 @@
 #include "aos/type_traits/type_traits.h"
 
+#include <stdint.h>
+#include <string.h>
+#include <memory>
+
 #include "gtest/gtest.h"
 
 namespace aos {
diff --git a/frc971/orin/doflash_frc971.sh b/frc971/orin/doflash_frc971.sh
index f8cbbc3..ff4a705 100755
--- a/frc971/orin/doflash_frc971.sh
+++ b/frc971/orin/doflash_frc971.sh
@@ -1,23 +1,31 @@
 #!/bin/bash
 set -ex
 
-TMPDIR=$(mktemp -d /tmp/yoctoflash.XXXXXXXXXX)
+# If we pass in a folder, then use that as TMPDIR and don't clean it up
+if [[ -d $1 ]]; then
+    TMPDIR=$1
+else
+    TMPDIR=$(mktemp -d /tmp/yoctoflash.XXXXXXXXXX)
+    trap finish EXIT
+fi
 
 # Cleanup on exit.
 function finish {
   sudo rm -rf "${TMPDIR}"
 }
-trap finish EXIT
 
 # Call sudo to get it started here, rather than waiting for after tar/cp's
 sudo echo "Flashing orin"
 
-# Assumes that the image has been copied into ./
-tar xf frc971-image-orin-nx-8g.tegraflash.tar.gz -C "${TMPDIR}"
+# If the files haven't been extracted yet, do so now; otherwise, just
+# re-use what's already there
+if [[ ! -f ${TMPDIR}/initrd-flash ]]; then 
+    # Assumes that the image has been copied into ./
+    tar xf frc971-image-orin-nx-8g.tegraflash.tar.gz -C "${TMPDIR}"
 
-# Replace the rootfs with our new image.
-cp --sparse=always arm64_bookworm_debian_yocto.img "${TMPDIR}/frc971-image.ext4"
+    # Replace the rootfs with our new image.
+    cp --sparse=always arm64_bookworm_debian_yocto.img "${TMPDIR}/frc971-image.ext4"
+fi
 
 cd ${TMPDIR}
-
 sudo ./initrd-flash
diff --git a/tools/iwyu/by_hand.imp b/tools/iwyu/by_hand.imp
index 66dfcd9..bbbeec8 100644
--- a/tools/iwyu/by_hand.imp
+++ b/tools/iwyu/by_hand.imp
@@ -46,5 +46,8 @@
   # nlohmann
   { "include": ["<nlohmann/json.hpp>", "private", "\"nlohmann/json.hpp\"", "public"] },
   { "include": ["<nlohmann/json_fwd.hpp>", "private", "\"nlohmann/json_fwd.hpp\"", "public"] },
+
+  # aos
+  { "symbol": ["log_level", "private", "\"aos/logging/logging.h\"", "public"] },
 ]
 
diff --git a/y2024/constants/7971.json b/y2024/constants/7971.json
index 4aed3cb..c924174 100644
--- a/y2024/constants/7971.json
+++ b/y2024/constants/7971.json
@@ -6,6 +6,20 @@
 {% from 'y2024/constants/common.jinja2' import extend_zero %}
 
 {
+  "cameras": [
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_imu-7971-0_cam-24-01_2024-03-02_19-44-12.098903651.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-7971-0_cam-24-04_2024-04-07_19-59-36.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-7971-1_cam-24-02_2024-04-07_19-59-36.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_imu-7971-1_cam-24-03_2024-04-07_19-59-36.json' %}
+    }
+  ],
   "robot": {
     {% set _ = intake_pivot_zero.update(
       {
@@ -51,21 +65,7 @@
       "potentiometer_offset": 0.0
     },
     "disable_extend": false,
-    "disable_climber": false,
-    "cameras": [
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_imu-7971-0_cam-24-01_2024-03-02_19-44-12.098903651.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-7971-0_cam-24-04_2024-04-07_19-59-36.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-7971-1_cam-24-02_2024-04-07_19-59-36.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_imu-7971-1_cam-24-03_2024-04-07_19-59-36.json' %}
-      }
-    ]
+    "disable_climber": false
   },
   {% include 'y2024/constants/common.json' %}
 }
diff --git a/y2024/constants/971.json b/y2024/constants/971.json
index ce70e07..5145613 100644
--- a/y2024/constants/971.json
+++ b/y2024/constants/971.json
@@ -6,6 +6,20 @@
 {% from 'y2024/constants/common.jinja2' import extend_zero %}
 
 {
+  "cameras": [
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_imu-971-1_cam-24-05_2024-03-24_14-54-27.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-971-0_cam-24-06_2024-03-24_14-54-27.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-971-1_cam-24-07_2024-03-24_14-54-27.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_imu-971-0_cam-24-08_2024-03-01_11-02-11.json' %}
+    }
+  ],
   "robot": {
     {% set _ = intake_pivot_zero.update(
       {
@@ -51,21 +65,7 @@
       "potentiometer_offset": {{ -0.2574404033256 + 0.0170793439542 - 0.177097393974999 + 0.3473623911879  - 0.1577 - 0.0214825988393}}
     },
     "disable_extend": false,
-    "disable_climber": false,
-    "cameras": [
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_imu-971-1_cam-24-05_2024-03-24_14-54-27.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-971-0_cam-24-06_2024-03-24_14-54-27.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-971-1_cam-24-07_2024-03-24_14-54-27.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_imu-971-0_cam-24-08_2024-03-01_11-02-11.json' %}
-      }
-    ]
+    "disable_climber": false
   },
   {% include 'y2024/constants/common.json' %}
 }
diff --git a/y2024/constants/9971.json b/y2024/constants/9971.json
index 5a3e7fc..0cde2ad 100644
--- a/y2024/constants/9971.json
+++ b/y2024/constants/9971.json
@@ -6,6 +6,20 @@
 {% from 'y2024/constants/common.jinja2' import extend_zero %}
 
 {
+  "cameras": [
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_imu-9971-0_cam-24-10_2024-02-24_16-44-05.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_imu-9971-1_cam-24-12_2024-03-24_11-52-49.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-9971-0_cam-24-09_2024-03-24_11-52-49.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-9971-1_cam-24-11_2024-03-24_11-52-49.json' %}
+    },
+  ],
   "robot": {
     {% set _ = intake_pivot_zero.update(
       {
@@ -51,21 +65,7 @@
       "potentiometer_offset": 0.0
     },
     "disable_extend": false,
-    "disable_climber": false,
-    "cameras": [
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_imu-9971-0_cam-24-10_2024-02-24_16-44-05.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_imu-9971-1_cam-24-12_2024-03-24_11-52-49.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-9971-0_cam-24-09_2024-03-24_11-52-49.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/calib_files/calibration_orin1-9971-1_cam-24-11_2024-03-24_11-52-49.json' %}
-      },
-    ]
+    "disable_climber": false
   },
   {% include 'y2024/constants/common.json' %}
 }
diff --git a/y2024/constants/constants.fbs b/y2024/constants/constants.fbs
index d4d05b7..6c1480c 100644
--- a/y2024/constants/constants.fbs
+++ b/y2024/constants/constants.fbs
@@ -150,7 +150,6 @@
   extend_constants:PotAndAbsEncoderConstants (id: 5);
   disable_extend:bool (id: 6);
   disable_climber:bool (id: 7);
-  cameras:[CameraConfiguration] (id: 9);
 }
 
 table ShooterSetPoint {
@@ -224,8 +223,9 @@
 }
 
 table Constants {
-  robot:RobotConstants (id: 0);
-  common:Common (id: 1);
+  cameras:[CameraConfiguration] (id: 0);
+  robot:RobotConstants (id: 1);
+  common:Common (id: 2);
 }
 
 root_type Constants;
diff --git a/y2024/constants/test_data/test_team.json b/y2024/constants/test_data/test_team.json
index 4601f50..9d40027 100644
--- a/y2024/constants/test_data/test_team.json
+++ b/y2024/constants/test_data/test_team.json
@@ -6,6 +6,20 @@
 {% from 'y2024/constants/common.jinja2' import extend_zero %}
 
 {
+  "cameras": [
+    {
+      "calibration": {% include 'y2024/constants/test_data/calibration_cam-1.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/test_data/calibration_cam-2.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/test_data/calibration_cam-3.json' %}
+    },
+    {
+      "calibration": {% include 'y2024/constants/test_data/calibration_cam-4.json' %}
+    }
+  ],
   "robot": {
     {% set _ = intake_pivot_zero.update(
       {
@@ -51,21 +65,7 @@
       "potentiometer_offset": 0.0
     },
     "disable_extend": false,
-    "disable_climber": false,
-    "cameras": [
-      {
-        "calibration": {% include 'y2024/constants/test_data/calibration_cam-1.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/test_data/calibration_cam-2.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/test_data/calibration_cam-3.json' %}
-      },
-      {
-        "calibration": {% include 'y2024/constants/test_data/calibration_cam-4.json' %}
-      }
-    ]
+    "disable_climber": false
   },
   {% include 'y2024/constants/common.json' %}
 }
diff --git a/y2024/localizer/localizer.cc b/y2024/localizer/localizer.cc
index 2b72f94..d73d171 100644
--- a/y2024/localizer/localizer.cc
+++ b/y2024/localizer/localizer.cc
@@ -140,9 +140,9 @@
 
 std::array<Localizer::CameraState, Localizer::kNumCameras>
 Localizer::MakeCameras(const Constants &constants, aos::EventLoop *event_loop) {
-  CHECK(constants.robot()->has_cameras());
+  CHECK(constants.has_cameras());
   std::array<Localizer::CameraState, Localizer::kNumCameras> cameras;
-  for (const CameraConfiguration *camera : *constants.robot()->cameras()) {
+  for (const CameraConfiguration *camera : *constants.cameras()) {
     CHECK(camera->has_calibration());
     const frc971::vision::calibration::CameraCalibration *calibration =
         camera->calibration();
diff --git a/y2024/localizer/localizer_test.cc b/y2024/localizer/localizer_test.cc
index bd97059..e5815e0 100644
--- a/y2024/localizer/localizer_test.cc
+++ b/y2024/localizer/localizer_test.cc
@@ -104,23 +104,20 @@
       // Sanity check that the test calibration files look like what we
       // expect.
       CHECK_EQ("orin1", constants_fetcher_.constants()
-                            .robot()
-                            ->cameras()
+                            .cameras()
                             ->Get(0)
                             ->calibration()
                             ->node_name()
                             ->string_view());
       CHECK_EQ(0, constants_fetcher_.constants()
-                      .robot()
-                      ->cameras()
+                      .cameras()
                       ->Get(0)
                       ->calibration()
                       ->camera_number());
       const Eigen::Matrix<double, 4, 4> H_robot_camera =
           frc971::control_loops::drivetrain::FlatbufferToTransformationMatrix(
               *constants_fetcher_.constants()
-                   .robot()
-                   ->cameras()
+                   .cameras()
                    ->Get(0)
                    ->calibration()
                    ->fixed_extrinsics());
diff --git a/y2024/vision/vision_util.cc b/y2024/vision/vision_util.cc
index cf52507..becb1cf 100644
--- a/y2024/vision/vision_util.cc
+++ b/y2024/vision/vision_util.cc
@@ -31,9 +31,9 @@
 const frc971::vision::calibration::CameraCalibration *FindCameraCalibration(
     const y2024::Constants &calibration_data, std::string_view node_name,
     int camera_number) {
-  CHECK(calibration_data.robot()->has_cameras());
+  CHECK(calibration_data.has_cameras());
   for (const y2024::CameraConfiguration *candidate :
-       *calibration_data.robot()->cameras()) {
+       *calibration_data.cameras()) {
     CHECK(candidate->has_calibration());
     if (candidate->calibration()->node_name()->string_view() != node_name ||
         candidate->calibration()->camera_number() != camera_number) {