@@ -65,85 +65,43 @@ fn merge_personas_preserves_custom_records() {
6565}
6666
6767#[ test]
68- fn merge_personas_restores_builtin_defaults ( ) {
68+ fn merge_personas_preserves_builtin_edits ( ) {
6969 let mut edited_builtin = custom_persona ( "builtin:fizz" , "My Fizz" ) ;
7070 edited_builtin. is_builtin = true ;
7171 edited_builtin. is_active = true ;
72- let original_created_at = edited_builtin. created_at . clone ( ) ;
73- let original_updated_at = edited_builtin. updated_at . clone ( ) ;
72+ edited_builtin. system_prompt = "User-edited instructions" . to_string ( ) ;
73+ edited_builtin. name_pool = vec ! [ "User-edited name" . to_string( ) ] ;
74+ edited_builtin. env_vars =
75+ std:: collections:: BTreeMap :: from ( [ ( "USER_SETTING" . to_string ( ) , "value" . to_string ( ) ) ] ) ;
7476
75- let ( records, changed) = merge_personas ( vec ! [ edited_builtin] , "2026-03-19T00:00:00Z" ) ;
77+ let ( records, changed) = merge_personas ( vec ! [ edited_builtin. clone ( ) ] , "2026-03-19T00:00:00Z" ) ;
7678
77- assert ! ( changed) ;
79+ assert ! ( changed) ; // The remaining seeded built-ins are added.
7880 let fizz = records
7981 . iter ( )
8082 . find ( |record| record. id == "builtin:fizz" )
8183 . expect ( "fizz built-in should exist" ) ;
82- let canonical = BUILT_IN_PERSONAS
83- . iter ( )
84- . find ( |persona| persona. id == "builtin:fizz" )
85- . expect ( "fizz built-in definition should exist" ) ;
86- assert_eq ! ( fizz. display_name, canonical. display_name) ;
87- assert_eq ! ( fizz. avatar_url. as_deref( ) , canonical. avatar_url, ) ;
88- assert_eq ! ( fizz. created_at, original_created_at) ;
89- assert_eq ! ( fizz. updated_at, original_updated_at) ;
90- assert ! ( fizz. is_active) ;
84+ assert_eq ! ( fizz. display_name, edited_builtin. display_name) ;
85+ assert_eq ! ( fizz. system_prompt, edited_builtin. system_prompt) ;
86+ assert_eq ! ( fizz. name_pool, edited_builtin. name_pool) ;
87+ assert_eq ! ( fizz. env_vars, edited_builtin. env_vars) ;
88+ assert_eq ! ( fizz. is_active, edited_builtin. is_active) ;
9189}
9290
9391#[ test]
94- fn merge_personas_restores_builtin_env_vars ( ) {
95- // A hand-edited built-in record with stray env vars should be reset to
96- // the canonical (empty) env on merge. Built-ins are intended immutable —
97- // if a user wants per-persona credentials, they create or duplicate to a
98- // custom persona.
99- let mut tampered = custom_persona ( "builtin:fizz" , "Fizz" ) ;
100- tampered. is_builtin = true ;
101- tampered. avatar_url = None ;
102- tampered. is_active = true ;
103- tampered. env_vars =
104- std:: collections:: BTreeMap :: from ( [ ( "ANTHROPIC_API_KEY" . to_string ( ) , "leaked" . to_string ( ) ) ] ) ;
105-
106- let ( records, changed) = merge_personas ( vec ! [ tampered] , "2026-03-19T00:00:00Z" ) ;
107-
108- assert ! ( changed) ;
109- let fizz = records
110- . iter ( )
111- . find ( |record| record. id == "builtin:fizz" )
112- . expect ( "fizz built-in should exist" ) ;
113- // Built-in persona definitions have no `env_vars` field — they are
114- // always empty. The merge reset should clear the tampered key entirely.
115- assert ! (
116- fizz. env_vars. is_empty( ) ,
117- "expected empty, got {:?}" ,
118- fizz. env_vars
119- ) ;
120- }
121-
122- #[ test]
123- fn merge_personas_restores_builtin_name_pool_and_preserves_is_active ( ) {
124- let mut fizz = custom_persona ( "builtin:fizz" , "Fizz" ) ;
125- fizz. is_builtin = true ;
126- fizz. avatar_url = None ;
127- fizz. is_active = true ;
128- fizz. name_pool = vec ! [ "Definitely Not Fizz" . to_string( ) ] ;
92+ fn merge_personas_restores_builtin_marker_without_resetting_edits ( ) {
93+ let mut edited_builtin = custom_persona ( "builtin:fizz" , "My Fizz" ) ;
94+ edited_builtin. is_builtin = false ;
12995
130- let ( records, changed) = merge_personas ( vec ! [ fizz ] , "2026-03-19T00:00:00Z" ) ;
96+ let ( records, changed) = merge_personas ( vec ! [ edited_builtin ] , "2026-03-19T00:00:00Z" ) ;
13197
13298 assert ! ( changed) ;
13399 let fizz = records
134100 . iter ( )
135101 . find ( |record| record. id == "builtin:fizz" )
136102 . expect ( "fizz built-in should exist" ) ;
137- let expected_name_pool = BUILT_IN_PERSONAS
138- . iter ( )
139- . find ( |persona| persona. id == "builtin:fizz" )
140- . expect ( "fizz built-in definition should exist" )
141- . name_pool
142- . iter ( )
143- . map ( |name| ( * name) . to_string ( ) )
144- . collect :: < Vec < _ > > ( ) ;
145- assert_eq ! ( fizz. name_pool, expected_name_pool) ;
146- assert ! ( fizz. is_active) ;
103+ assert ! ( fizz. is_builtin) ;
104+ assert_eq ! ( fizz. display_name, "My Fizz" ) ;
147105}
148106
149107#[ test]
0 commit comments