Use when modifying or adding code under control/ — the observing-run lifecycle, start/stop transactions, the config and validation system, daemons, or the transfer queue. For Quabo UDP packet work use working-with-quabo-driver.
Use when modifying or adding code under grpc/ (panoseti_grpc) — gRPC servicers, clients, .proto files, the unified server, the daq_data gateway/edge path, or a new service.
Use when running, writing, or debugging tests or CI for control/ or grpc/ code, when a test or CI run fails or hangs, or when test state leaks between runs.
Use when running, scripting, or explaining the pseti command — the observing-run lifecycle, hardware/daemon configuration, status/ledger, or the transfer queue. Not for writing or debugging tests (use testing-panoseti).
Use when starting any task in the panoseti observatory codebase and unsure where code, tests, or reference docs live, or which subsystem (control, grpc, daq, analysis) or which CLAUDE.md / wiki page applies.
Use when reading, iterating, parsing, or converting raw PFF data files captured by hashpipe — frame headers and binary image blocks, per-frame metadata or timestamps, the pypff library, or PFF→Zarr conversion.
Use when sending commands to or reading packets from Quabo detector boards — the UDP command/housekeeping interface, the QUABO driver class, DAQ_PARAMS / acquisition-mode bits, the MAROC serial command, HV/baseline calibration, or firmware/TFTP reboot.