aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-22 20:25:44 -0500
committerCraig Jennings <c@cjennings.net>2026-05-22 20:25:44 -0500
commit61adf68a0e14ad76c276fd6f39162f25f78302b1 (patch)
tree874cefdff5d1a15f097fad4129f883f2b36b7cce
parentb2c07430724ffd057aa6301eb50b70283d53395a (diff)
downloaddotemacs-61adf68a0e14ad76c276fd6f39162f25f78302b1.tar.gz
dotemacs-61adf68a0e14ad76c276fd6f39162f25f78302b1.zip
docs(todo): record TRAMP/dirvish "?" root cause, leave fix to verify
I traced why remote dirvish shows "?" for dates: dirvish fetches remote attributes through an async `ls -1lahi` parser that only runs when the connection has direct-async and the remote has GNU ls. It falls back to skipping `file-attributes` (rendering "?") when either gate is shut. That's why the earlier dired-listing-switches attempts missed the real path, and why disabling direct-async made it worse. The config already enables direct-async, so the rest is per-host and needs a live remote. I left the three diagnostic evals and the likely fixes in the task body.
-rw-r--r--todo.org30
1 files changed, 15 insertions, 15 deletions
diff --git a/todo.org b/todo.org
index 53e93d3d..e42f817c 100644
--- a/todo.org
+++ b/todo.org
@@ -4105,28 +4105,28 @@ Repeatable installs and safe rollbacks.
Treesitter grammars are downloaded separately by treesit-auto on first use.
For true offline reproducibility, need to cache treesitter grammars separately.
-** TODO [#C] Investigate TRAMP/dirvish showing question marks for file dates :bug:
+** TODO [#C] TRAMP/dirvish "?" for remote dates — verify the fix per host :bug:
:PROPERTIES:
:LAST_REVIEWED: 2026-05-22
:END:
-Remote directories in dirvish show "?" instead of actual modification dates.
-Tried several approaches without success - needs deeper investigation.
+Root cause is traced (see the dated investigation entry below). What's left needs a live remote: open each remote host in dirvish and run the three diagnostic evals to find which gate is closed, then close it.
-**Attempted fixes (all reverted):**
-1. Connection-local dired-listing-switches with -alh (didn't help)
-2. Disabling tramp-direct-async-process (reported to cause this, but disabling didn't fix it)
-3. Hook to set different listing switches for remote vs local (didn't help)
+Diagnostics (run with point in a remote dirvish buffer):
+- =M-: (dirvish-prop :remote-async)= — nil means =tramp-direct-async-process-p= is failing for this method/host, so dirvish's remote attribute fetch never runs.
+- =M-: (dirvish-prop :gnuls)= — nil means the remote has no GNU =ls= (the =ls --version= probe failed), so the parser gate stays shut. Likely on truenas (FreeBSD).
+- =M-: (tramp-direct-async-process-p)= — confirms whether direct-async is actually active for the connection.
-**Possible causes to investigate:**
-- dirvish may be using its own attribute fetching that bypasses dired-listing-switches
-- May need dirvish-specific configuration for remote file attributes
-- Could be an Emacs 29/30 + TRAMP + dirvish interaction issue
-- May require changes to how dirvish renders the file-size attribute on remote
+Likely fixes, by which gate is closed:
+- =:gnuls= nil → install GNU coreutils on the remote (FreeBSD: =pkg install coreutils=) and make =ls= resolve to GNU on the TRAMP path, or accept "?" on that host.
+- =:remote-async= nil → the scp/sshx method isn't advertising direct-async; switch to a method that supports it or check =tramp-direct-async-process= is taking effect for that protocol.
-**Files involved:**
-- modules/tramp-config.el
-- modules/dirvish-config.el
+Files involved: =modules/tramp-config.el=, =modules/dirvish-config.el=.
+
+*** 2026-05-22 Fri @ 20:24:44 -0500 Traced the root cause through dirvish source
+Remote dates/sizes don't come from the dired =ls= listing or =dired-listing-switches=. They come from =dirvish-data-for-dir= (=dirvish-tramp.el:95=), which runs =ls -1lahi= on the remote and parses the columns into the attribute cache. That method only fires when both =(dirvish-prop :remote-async)= is a number and =(dirvish-prop :gnuls)= is a string. When either gate is shut, dirvish falls back to its default, which deliberately skips =(file-attributes f-name)= for remote files (=dirvish.el:904=, a perf guard) — leaving attrs nil, so the file-size and file-time widgets render "?" (=dirvish-widgets.el:216,247=).
+
+That explains why every prior fix missed: dired-listing-switches feed a different code path entirely, and disabling =tramp-direct-async-process= shuts the =:remote-async= gate, which is the one path that populates remote attributes — exactly backwards. The config already enables direct-async for ssh/sshx (=tramp-config.el:79-88=), so the remaining closed gate is per-host: =:gnuls= (no GNU ls on FreeBSD-based truenas) or direct-async not taking effect for the method. Could not verify on a live remote from the work session — handed the per-host diagnostics up into the task body.
** TODO [#C] Finish terminal GPG pinentry configuration :feature:
:PROPERTIES: