This is a step in the right direction, at least for my need.
123 %% persist_assert_pred_def(+Name, +Arity, +Module, +File, +Line)
124 % Safely persists pred_def with duplicate detection and error handling
125 % persist_assert_pred_def(Name, Arity, Module, File, Line) :-
126 % catch(
127 % ( % Check if already exists (duplicate detection)
128 % ( pred_def(Name, Arity, Module, File, Line)
129 % -> % Already exists - log warning and succeed
130 % log_warning(debug_kb_consistency,
131 % duplicate_found(pred_def(Name, Arity, Module, File, Line)))
132 % ; % Not a duplicate - proceed with assertion
133 % % Log the intent to assert
134 % log_debug(debug_kb_assert,
135 % pred_def(Name, Arity, Module, File, Line)),
136 % % Use auto-generated persist predicate
137 % assert_pred_def(Name, Arity, Module, File, Line)
138 % )
139 % ),
140 % Error,
141 % % Log failure and re-throw
142 % ( log_error(debug_kb_assert,
143 % operation_failed(pred_def(Name, Arity, Module, File, Line), Error)),
144 % throw(Error)
145 % )
146 % ).
147
148 ++55,870 persist_assert_pred_def(Name, Arity, Module, File, Line) :-
149 ++55,870 catch(
150 goal_a_success(Name, Arity, Module, File, Line),
151 Error,
152 goal_a_failure(Name, Arity, Module, File, Line, Error)
153 ).
154
155 ++55,870 goal_a_success(Name, Arity, Module, File, Line) :-
156 ( % Check if already exists (duplicate detection)
157 +20-55,850 ( pred_def(Name, Arity, Module, File, Line)
158 -> % Already exists - log warning and succeed
159 ++20 log_warning(debug_kb_consistency,
160 duplicate_found(pred_def(Name, Arity, Module, File, Line)))
161 ; % Not a duplicate - proceed with assertion
162 % Log the intent to assert
163 ++55,850 log_debug(debug_kb_assert,
164 pred_def(Name, Arity, Module, File, Line)),
165 % Use auto-generated persist predicate
166 ++55,850 assert_pred_def(Name, Arity, Module, File, Line)
167 )
168 ).
169
170 ### goal_a_failure(Name, Arity, Module, File, Line, Error) :-
171 % Log failure and re-throw
172 ( log_error(debug_kb_assert,
173 operation_failed(pred_def(Name, Arity, Module, File, Line), Error)),
174 throw(Error)
175 ).