Hello, I found a possible inconsistency between the documented behavior of :colnames nil and its actual behavior in Org Babel.
According to the Org manual, section Environment of a Code Block, nil is the default value for :colnames, and should mean that the first row is treated as column names only when the second row is a horizontal line. However, explicitly specifying :colnames nil appears to behave like :colnames yes. Minimal example: #+name: tab | 1 | | 2 | | 3 | #+begin_src emacs-lisp :results verbatim :var x=tab x #+end_src #+RESULTS: : ((1) (2) (3)) #+begin_src emacs-lisp :results verbatim :colnames nil :var x=tab x #+end_src #+RESULTS: : ((2) (3)) #+begin_src emacs-lisp :results verbatim :colnames yes :var x=tab x #+end_src #+RESULTS: : ((2) (3)) #+begin_src emacs-lisp :results verbatim :colnames no :var x=tab x #+end_src #+RESULTS: : ((1) (2) (3)) So the observed behavior is: unspecified -> ((1) (2) (3)) :colnames nil -> ((2) (3)) :colnames yes -> ((2) (3)) :colnames no -> ((1) (2) (3)) I would have expected the unspecified case and explicit :colnames nil case to behave identically. It seems that an explicitly supplied nil may be interpreted as the string "nil", which is non-nil internally, causing it to enable column-name handling in the same way as "yes". Is this intended behavior? If so, the manual may need clarification. Otherwise, this may be an implementation bug in the handling of the :colnames header argument. Best regards, Haiteng ------------------------------------------------------------------------ Emacs : GNU Emacs 30.2 (build 1, aarch64-apple-darwin25.5.0, NS appkit-2685.60 Version 26.5.1 (Build 25F80)) of 2026-06-12 Package: Org mode version 9.8.8 (9.8.8-c75ffe @ /Users/haiteng/.emacs.d/elpa/org-9.8.8/)
