From 790a28fdfd5bc312e6fd5dcb4d000ec348ad09ba Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Mon, 9 Nov 2026 09:58:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(webui):=20=E8=A1=A5=E6=8F=90=E4=BA=A4=20ker?= =?UTF-8?q?nel=5Fbuttons=20=E5=88=A4=E6=8D=AE=E7=9A=84=20package/import=20?= =?UTF-8?q?=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 事故:上一个 commit 只提交了 rename,没提交内容改动 `fb67703` 用 `git mv` 把 `kernel_buttons_render_test.go` 移进 `test/`, 但改 `package webui → package test`、`dashboardHTML → webui.DashboardPage()` 这些编辑留在工作区没进暂存区。结果 **HEAD 的 `test/` 目录里放着一个 `package webui` 的文件**: found packages test (chat_ack_timeout_test.go) and webui (kernel_buttons_render_test.go) in internal/plugins/webui/test 本仓 `.gitignore` 忽略 `build/`,本地 `go test ./...` 也过了 —— 但那是 **带未提交改动的工作区**过了,不是这个 commit 过了。干净 worktree 复验: git worktree add /tmp/cleanchk HEAD go test ./internal/plugins/webui/test/ → FAIL [setup failed] found packages test and webui 这正是 2026-11-03 定的提交纪律第 5 条要拦的事。上一批做完 `git mv` 只 `git diff --cached --stat` 看到 "0 insertions" 就该警觉 —— rename 的 staged diff 是 0,而内容改动是 unstaged,等于提交了个半成品。 ## 教训(写进流程) `git mv` 之后**必须再 `git add` 一次同名路径**,否则只提交移动本身。 以后每批提交前一律: git diff --stat # 看 unstaged 是否还有内容 git worktree add /tmp/clean # 干净检出复验 go build ./... && go test ./... ## 本提交的改动 package webui → package test dashboardHTML → webui.DashboardPage() FrontendAsset → webui.FrontendAsset import 补 internal/plugins/webui + gofmt 排序 ## 验证 干净 worktree(本提交后)复验通过,见下一条命令的输出。 --- .../plugins/webui/test/kernel_buttons_render_test.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/plugins/webui/test/kernel_buttons_render_test.go b/internal/plugins/webui/test/kernel_buttons_render_test.go index 0daebabc..67b49c54 100644 --- a/internal/plugins/webui/test/kernel_buttons_render_test.go +++ b/internal/plugins/webui/test/kernel_buttons_render_test.go @@ -1,4 +1,4 @@ -package webui +package test // 内核按钮必须**真的出现在渲染后的页面里**(2026-10-17)。 // @@ -17,13 +17,14 @@ package webui // 所以判据查的是**组装后的 dashboardHTML**(就是实际发给浏览器的字节)。 import ( + "github.com/JianFeeeee/HologramAgent/internal/plugins/webui" "strings" "testing" ) // ★★★ 判据:渲染后的页面含两个按钮的 id 与 onclick。 func TestKernelButtonsRenderedInPage(t *testing.T) { - h := dashboardHTML + h := webui.DashboardPage() if h == "" { t.Fatal("dashboardHTML 为空 —— init 没跑或 embed 失败") } @@ -48,7 +49,7 @@ func TestKernelButtonsRenderedInPage(t *testing.T) { // 判定它处于顶层。jsdom 里的行为测试做不到这点(node 不强求), // 而浏览器里 onclick 走的是全局查找。 func TestKernelFunctionsAreGlobal(t *testing.T) { - js, err := FrontendAsset("dashboard.js") + js, err := webui.FrontendAsset("dashboard.js") if err != nil { t.Fatalf("读 dashboard.js: %v", err) } @@ -68,7 +69,7 @@ func TestKernelFunctionsAreGlobal(t *testing.T) { // // 它们作用于整个服务,任何标签页都该能点到。 func TestKernelButtonsInNavFooter(t *testing.T) { - h := dashboardHTML + h := webui.DashboardPage() navIdx := strings.Index(h, `class="nav-footer"`) if navIdx < 0 { t.Fatal("找不到 nav-footer")