π§ͺ LinkForge Manual QA Protocolο
This protocol defines the Unified Flight Plan required before every release. It ensures that the build is stable, the UI is responsive, and the synchronization logic is bulletproof.
π Test Session Metadataο
This section is filled out by the maintainer at the start of each release cycle.
Field |
Value |
|---|---|
Maintainer Name |
(e.g., @arounamounchili) |
Date |
2026-05-19 |
Blender / OS |
(e.g., Blender 4.2 LTS / macOS Sonoma 14.4) |
LinkForge Version |
(e.g., v1.4.0) |
Build Artifact |
(e.g., linkforge-blender-1.4.0-macos_arm64.zip) |
π Scenario: The Lifecycle of a Robotο
Goal: Build a functional, synchronized robot from a single mesh to a verified URDF in 20 minutes.
π Step 1: Smoke & Installationο
Clean Install: Install the
.zip. LinkForge appears in theN-Panel. Preferences are accessible.First Link: Create a Cube. Click
Create Link from Mesh.Expected: Hierarchy is automated (
[Name]_visualis child of Link Empty). LinkForge tab is active.
π Step 2: The Core Assembly (Kinematics & Sync)ο
Create Bridge: Add a second
Empty Link. Add aJointobject to the scene.Automatic Detection: Select the Joint. Use the Auto (A) picker for Parent/Child connection.
Expected: One link is assigned as
Parentand the other asChild.
Kinematic Limits: Set joint to
REVOLUTE. SetLowerandUpperlimits (e.g., -1.57 to 1.57).Integrated Sync Test: Rename the βChildβ Link in the Outliner (e.g.,
Arm_Link).Expected: Joint properties, Sensor Attachments, and Control Dashboard entries all update instantly to the new name.
Undo/Redo Resilience: Press
Ctrl+Z(Undo rename). Verify properties reverted.Ctrl+Shift+Z(Redo).
𧬠Step 3: Physics & Intelligenceο
Collision Generation: Set
Collision TypetoMesh (Simplified). ClickGenerate Collision.Expected: Wireframe appears. Moving the decimation slider updates the mesh live in the viewport.
Inertia Visualization: Disable
Auto-Calculate Inertia. Move theInertial Originsliders.Expected: Viewport Gizmos (Sphere/Axes) move in real-time as values change.
Control Intelligence: Enable
Use ROS2 Control. Add the joint to the dashboard. Rename the joint.Expected: The dashboard joint list reflects the new name instantly.
Perception: Select a Link and click
Create Sensor. Change type toCamera.Expected: A Sensor Empty is created. Renaming the parent link updates the
Link Attachmentfield.
π Step 4: Validation & The Export Cycleο
Live Hub: Search for a component name in the Component Browser. Filter works.
Run Validation: Run the validator.
Expected: The Component Browser shows all Links, Joints, and Sensors with green βOKβ status (no error icons).
Export & Inspect: Export to
URDF/XACROwithSplit Filesenabled.Expected: Folder structure is populated. XML contains the correct
xyz/rpyandmass/inertiatags for your construction.
The βCycle of Lifeβ: Import the exported file back into a NEW Blender file.
Expected: Hierarchy, Sensors, and Physics match the original 1:1. All links are Locked π.
π‘οΈ Resilience & Security (Pre-Flight)ο
Sandbox Security: Attempt to import a URDF with a mesh path escaping the package (e.g.,
../../etc/passwd).Expected: LinkForge blocks the import with a security warning.
XACRO Math: Import a file with
${prop * 2}math expressions.Expected: Values are correctly evaluated during the import process.
π Final Verificationο
No Python tracebacks in the System Console.
Robot survives a File Save & Reload.
π‘ Known Anomaliesο
The following are intended architectural behaviors:
Selection Flash: Viewport may flash a selection outline during a property synchronization move.
Gizmo Delay: Minor lag (>50ms) possible in extremely high-poly scenes (>5M tris).
Search Case: Component Browser search is intentionally case-insensitive.
[!IMPORTANT] If any step in the Lifecycle Scenario fails, the release IS BLOCKED. Manual verification is the final βLayer of Truth.β