Development Guidelines ====================== The **Sedaia Rig Interfaces** extension follows strict development guidelines to maintain its modular structure and ensure compatibility across multiple versions of Sakura's Character Rigs. Modular Registration -------------------- When adding a new module with multiple Blender classes, use the following `classes` list and loop-based `register()`/`unregister()` functions: .. code-block:: python from .lib import blender_utils as U classes = [ MY_CLASS_PT_panel_1, MY_CLASS_PT_panel_2, MY_OT_operator_1 ] def register(): for cls in classes: U.register_class(cls) def unregister(): for cls in classes: U.unregister_class(cls) Naming Conventions (Prefixer) ----------------------------- All classes must follow the **Prefixer** system. This system ensures unique ID names within the Blender environment and incorporates major versioning. * **Format**: `Prefixer("sacr__ui__").` * **Example**: `Prefixer("sacr_7_ui_2_global").panel` results in a `bl_idname` like `SEDAIA_RIGS_PT_sacr_7_ui_2_global`. Property Storage ---------------- Follow **Guideline 3.1: Property Storage** to prevent property pollution and ensure rig-specific configurations. * **Rule**: Never store UI properties in the global `bpy.types.Scene`. * **Standard**: Attach all UI state properties to a `PropertyGroup` on `bpy.types.Object`. * **Access**: Use `self.id_data` within property accessors to ensure you are modifying the correct rig instance. Changelog Style --------------- `CHANGELOG.md` must maintain a consistent hierarchical structure: * **Level 1 (#)**: For the major Version (e.g., `# Version 4.0.0`). * **Level 2 (##)**: For high-level Categories or Summaries (e.g., `## Rig UI Changes`). * **Level 3 (###)**: For Specific Features or Technical details (e.g., `### Prefixer System`). * **Horizontal Rules (---)**: Used as separators between major versions. * **Bullet Points (-)**: For individual change descriptions.