@@ -117,3 +117,33 @@ func TestCmdHooksSyncTextShowsWarningsForRenderedBundles(t *testing.T) {
117117 t .Fatalf ("expected warning output, got %s" , output )
118118 }
119119}
120+
121+ func TestCmdHooksSyncTextShowsInvalidBundleWarnings (t * testing.T ) {
122+ root := t .TempDir ()
123+ oldWD , err := os .Getwd ()
124+ if err != nil {
125+ t .Fatalf ("getwd: %v" , err )
126+ }
127+ if err := os .Chdir (root ); err != nil {
128+ t .Fatalf ("chdir: %v" , err )
129+ }
130+ t .Cleanup (func () {
131+ _ = os .Chdir (oldWD )
132+ })
133+
134+ if err := os .MkdirAll (filepath .Join (root , ".skillshare" , "hooks" , "broken" ), 0o755 ); err != nil {
135+ t .Fatalf ("mkdir broken: %v" , err )
136+ }
137+ if err := os .WriteFile (filepath .Join (root , ".skillshare" , "hooks" , "broken" , "hook.yaml" ), []byte ("claude:\n events:\n SessionStart:\n - command: \" {OTHER_ROOT}/scripts/start.sh\" \n " ), 0o644 ); err != nil {
138+ t .Fatalf ("write broken hook: %v" , err )
139+ }
140+
141+ output := stripANSIWarnings (captureStdout (t , func () {
142+ if err := cmdHooksSync ([]string {"-p" , "broken" , "--target" , "all" }); err != nil {
143+ t .Fatalf ("cmdHooksSync: %v" , err )
144+ }
145+ }))
146+ if ! strings .Contains (output , "broken:" ) || ! strings .Contains (output , "hook.yaml" ) {
147+ t .Fatalf ("expected invalid bundle warning output, got %s" , output )
148+ }
149+ }
0 commit comments