Observation: SecateurService resides in ui/, even though its own docstring states that it has "NO UI (Qt) dependency." It is actually a pure business service orchestrating core/intersection/ and core/export/.
Impact: A contributor looking for the plugin's business logic under core/ will not find it immediately. Moreover, the generic name "SecateurService" suggests a more central role than its location under ui/ implies.
Future direction: Move SecateurService (along with its value objects SelectionResult and ProcessResult) into core/, leaving only genuinely UI-adjacent code in ui/service.py if the team wishes to reinforce the core/ / ui/ boundary.
Observation:
SecateurServiceresides inui/, even though its own docstring states that it has "NO UI (Qt) dependency." It is actually a pure business service orchestratingcore/intersection/andcore/export/.Impact: A contributor looking for the plugin's business logic under
core/will not find it immediately. Moreover, the generic name "SecateurService" suggests a more central role than its location underui/implies.Future direction: Move
SecateurService(along with its value objectsSelectionResultandProcessResult) intocore/, leaving only genuinely UI-adjacent code inui/service.pyif the team wishes to reinforce thecore//ui/boundary.