@@ -290,6 +290,33 @@ func createTestConfig(t *testing.T) *viper.Viper {
290290 return config
291291}
292292
293+ func TestFilesystemChatSessionManager_SaveSession_FilePermissions (t * testing.T ) {
294+ config := createTestConfig (t )
295+
296+ manager , err := NewFilesystemChatSessionManager (config )
297+ require .NoError (t , err )
298+
299+ messages := createTestMessages ()
300+
301+ // New session: file is created via os.Create.
302+ err = manager .SaveSession ("perm_new" , messages )
303+ require .NoError (t , err )
304+
305+ info , err := os .Stat (filepath .Join (config .GetString ("cacheDir" ), "perm_new" ))
306+ require .NoError (t , err )
307+ require .Equal (t , os .FileMode (0600 ), info .Mode ().Perm (),
308+ "new session file must be owner-only (0600), got %o" , info .Mode ().Perm ())
309+
310+ // Existing session: file is reopened via os.OpenFile with defaultFilePermissions.
311+ err = manager .SaveSession ("perm_new" , messages )
312+ require .NoError (t , err )
313+
314+ info , err = os .Stat (filepath .Join (config .GetString ("cacheDir" ), "perm_new" ))
315+ require .NoError (t , err )
316+ require .Equal (t , os .FileMode (0600 ), info .Mode ().Perm (),
317+ "reopened session file must remain owner-only (0600), got %o" , info .Mode ().Perm ())
318+ }
319+
293320func TestFilesystemChatSessionManager_GetSession_ScannerError (t * testing.T ) {
294321 config := createTestConfig (t )
295322
0 commit comments