[go-fan] Go Module Review: github.com/charmbracelet/x/exp/golden
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
変更対象は pkg/console/golden_test.go の 340、345、350、355 行目です。ここでは []byte(bar.Update(...)) が golden.RequireEqual に渡されています。近くで文字列を直接渡している既存の呼び出しと比較し、4 つのキャストを削除してください。go test ./pkg/console/... を実行し、golden フィクスチャが引き続き一致することを確認します。キャストが削除され、フィクスチャを再生成せずにテストが通れば完了です。
索引モデルが issue の本文から書いたものです。
説明
🐹 Go Fan Report: github.com/charmbracelet/x/exp/golden
Module Overview
golden is a tiny (~90 LOC) golden-file testing helper from the charmbracelet/x monorepo. It exposes one generic function, RequireEqual[T []byte | string](tb, out), that diffs test output against a testdata/<TestName>.golden fixture (escaping control/ANSI sequences before comparing), and can regenerate fixtures when run with -update.
Current Usage in gh-aw
- Files: 2 (
pkg/console/golden_test.go,pkg/workflow/wasm_golden_test.go) - Import Count: 2
- Call sites: 14 total (11 + 3)
- Key APIs Used:
golden.RequireEqualonly (current, non-deprecated API) - Golden regeneration is already wired into
make update-goldenandmake update-wasm-golden, both passing-update- exactly the workflow the module documents.
Research Findings
exp/golden/v0.1.0 (pinned in go.mod) is the only tag ever cut for this submodule and remains the latest release, even though the parent charmbracelet/x monorepo is very active (most recent push 2026-10-12, on an unrelated submodule). Nothing to upgrade to.
Recent Updates
All already baked into the pinned v0.1.0 tag:
- feat(exp/golden): accept strings on RequireEqual (2025-06-02) - added generics so callers no longer need to wrap string output in []byte(...).
- RequireEqualEscape was deprecated in favor of RequireEqual (escaping is now always on by default).
- No security advisories or breaking changes found.
Best Practices
Maintainers recommend calling RequireEqual directly with either string or []byte output (no manual conversion needed since generics landed), and exposing a -update test flag/make target for fixture regeneration.
Improvement Opportunities
🏃 Quick Wins
pkg/console/golden_test.go:340,345,350,355 still wrap ProgressBar.Update(...) (which returns string) in an unnecessary []byte(...) conversion before calling golden.RequireEqual. Every other call site in the same file (RenderTable, FormatError, RenderInfoSection, etc.) already passes the string directly. Dropping these 4 remaining casts removes a small unneeded allocation per call and makes the file internally consistent:
Affected lines
// pkg/console/golden_test.go
340: golden.RequireEqual(t, []byte(bar.Update(0)))
345: golden.RequireEqual(t, []byte(bar.Update(512*1024*1024)))
350: golden.RequireEqual(t, []byte(bar.Update(1024)))
355: golden.RequireEqual(t, []byte(bar.Update(0)))
Change each to golden.RequireEqual(t, bar.Update(...)).
✨ Feature Opportunities
None currently applicable - the only tagged release (v0.1.0) already contains every feature gh-aw relies on (string support, escaping, Windows CRLF normalization), and there is no newer upstream tag to adopt.
📏 Best Practice Alignment
- Golden regeneration already follows the documented -update flag pattern via dedicated make targets.
- No usage of the deprecated RequireEqualEscape was found anywhere in the codebase.
🔧 General Improvements
pkg/workflow/wasm_golden_test.go runs its own normalizeOutput helper (stripping env-specific flags, trimming trailing newlines) before calling RequireEqual. This is project-specific normalization and does not overlap with what the library provides (control-sequence escaping, CRLF normalization) - no redundancy to clean up.
Recommendations
- Apply the quick win above (drop the 4 redundant []byte(...) casts in pkg/console/golden_test.go) - small, safe, mechanical cleanup.
- No version bump or feature adoption needed; the module is already on its latest (and only) release and is used idiomatically elsewhere in the codebase.
Next Steps
No further action needed beyond the quick win above; re-review this module once charmbracelet/x/exp/golden cuts a new tag (none exists yet beyond v0.1.0).
Generated by Go Fan
Module summary saved to: scratchpad/mods/charmbracelet-x-exp-golden.md
Generated by 🐹 Go Fan · claude · agent · 126.8 AIC · ⊞ 6.5K · ◷
- expires on Oct 16, 2026, 12:05 AM UTC-08:00
- 主要言語
- Go
- スター
- 5.4k
- フォーク
- 584
- 平均マージ
- 3時間 38分
- マージ済み PR(30日)
- 826
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
github/gh-aw のほかの issue
-
ai-inspected
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
goroutineresourceleak (81st linter): paren_unwrap_gap across lock/cancel/channel detection, day oneオープンcookie sergo
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
github/gh-aw#68591 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
automation testing
難易度 3/5 半日 初心者へのやさしさ 15/100
メンテナーはふだん 1 日以内に返信
-
agentic-workflows
難易度 4/5 1〜2日 初心者へのやさしさ 22/100
メンテナーはふだん 1 日以内に返信
-
automation testing
難易度 1/5 1時間未満 初心者へのやさしさ 5/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:session-state issue-rating: 🦞 diamond lobster no-stale P2
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
openclaw/wacli#503 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 81/100
apache/rocketmq-dashboard#6895 ·
メンテナーはふだん 3 日以内に返信
-
agent-butler-finding chore
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
jordansmall/spindrift#5466 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
open-telemetry/opentelemetry-go-compile-instrumentation#1507 ·
メンテナーはふだん 3 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 87/100
777genius/agent-notifications#490 ·
メンテナーはふだん 1 日以内に返信