From 877e79fe8a5ec50b1f05dcc1e6867ae42016726e Mon Sep 17 00:00:00 2001 From: Yuki Hayashi Date: Sun, 12 Jul 2026 10:01:30 +0000 Subject: [PATCH] feat: show .herdr directories in tree, search, and watch Add .herdr to the isNoiseDir dot-directory allowlist so herdr worktrees are browsable like .allium and .claude. Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 7 +++++++ internal/server/tree.go | 2 +- internal/server/tree_test.go | 5 +++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33010c5..f27a47f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to reefdoc are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Added +- `.herdr` directories are no longer treated as noise: they now appear in the + file tree and are included in search and live-reload watching, alongside the + existing `.allium` and `.claude` exceptions. + ## [0.12.0] - 2026-07-04 ### Added diff --git a/internal/server/tree.go b/internal/server/tree.go index a81d5a0..186e410 100644 --- a/internal/server/tree.go +++ b/internal/server/tree.go @@ -41,7 +41,7 @@ func isViewable(name string) bool { // listing or searching: dependency/VCS/hidden directories that are never of // interest to a markdown viewer and would otherwise dominate a large tree. func isNoiseDir(name string) bool { - return name == "node_modules" || (strings.HasPrefix(name, ".") && name != ".allium" && name != ".claude") + return name == "node_modules" || (strings.HasPrefix(name, ".") && name != ".allium" && name != ".claude" && name != ".herdr") } // ListDir returns the immediate children (non-noise directories and viewable diff --git a/internal/server/tree_test.go b/internal/server/tree_test.go index dd1a929..8ac82dd 100644 --- a/internal/server/tree_test.go +++ b/internal/server/tree_test.go @@ -75,6 +75,7 @@ func TestListDir_AlliumFilesAndDir(t *testing.T) { writeFile(t, filepath.Join(root, "spec.allium")) writeFile(t, filepath.Join(root, ".allium", "schema.allium")) writeFile(t, filepath.Join(root, ".claude", "settings.json")) + writeFile(t, filepath.Join(root, ".herdr", "worktrees", "repo", "README.md")) writeFile(t, filepath.Join(root, ".git", "config")) nodes, err := ListDir(root, "") @@ -85,8 +86,8 @@ func TestListDir_AlliumFilesAndDir(t *testing.T) { for _, n := range nodes { names = append(names, n.Name) } - // .allium and .claude dirs listed, .git hidden; spec.allium listed as file - want := []string{".allium", ".claude", "spec.allium"} + // .allium, .claude and .herdr dirs listed, .git hidden; spec.allium listed as file + want := []string{".allium", ".claude", ".herdr", "spec.allium"} if !reflect.DeepEqual(names, want) { t.Fatalf("got %v want %v", names, want) }