{"schema_version":"1","interpretation":"data_only","hub_commit":"f97266a5cdd2c600cd376397a54892f08290df20","counts":{"memories":3,"recipes":194,"references":1897},"backend":"d1_fts5","coverage":{"complete":true},"search_semantics":"all_terms_word_prefix","results":[{"adapter_license":{"paths":["recipes/pythonrobotics-planar-ik/run.py","recipes/pythonrobotics-planar-ik/requirements.txt"],"scope":"Hub-authored adapter only; upstream terms remain applicable","spdx":"MIT","verified":true},"aliases":["ik","Planar n-link inverse kinematics"],"capabilities":["algorithm","ik","executable-json","source-adaptation"],"compatibility":[{"architecture":"x86_64","controller":"json-contract-v1","observation":"explicit-json-input","os":"windows","python":"3.10","robot":"mathematical-model","runtime":"pythonrobotics","runtime_version":"cdd0cc888802","status":"hub_verified"},{"architecture":"x86_64","controller":"json-contract-v1","observation":"explicit-json-input","os":"linux","python":"3.10","robot":"mathematical-model","runtime":"pythonrobotics","runtime_version":"cdd0cc888802","status":"hub_verified"}],"evidence_level":"task_complete","execution_interface":{"abstraction_level":0,"execution_domain":"computation","input_transport":"json_file_or_inline","kind":"algorithm","language":"python","output_selector":"outputs","version":"1"},"framework":"pythonrobotics","hub_prepare":true,"id":"pythonrobotics-planar-ik","kind":"preparation_recipe","license":{"scope":"Selected PythonRobotics algorithm demonstration source under the pinned MIT license text, Copyright (c) 2016 - now Atsushi Sakai and other contributors. Preserve repository license and each selected file's author notices. This is source-text scope only; dependencies, mathematical references, generated plots and any external assets retain separate terms. GitHub's automated classifier reports NOASSERTION; the MIT identity here comes from the exact reviewed LICENSE bytes, not that classifier.","spdx":"MIT","url":"https://github.com/AtsushiSakai/PythonRobotics/blob/cdd0cc888802b584c2d654ca85e3c5460973487d/LICENSE","verified":true},"name":"Planar n-link inverse kinematics","python_requirement":">=3.10,<3.11","record_sha256":"a4517f6a3009c5504e6b0f4b2d57c2acb0514037327b09053c7c8ba48682f934","record_url":"https://hub.superfastrobotics.com/skills/pythonrobotics-planar-ik/skill.json","record_version":"1.0.0","robots":["mathematical-model"],"runtime":"pythonrobotics","runtime_verification":"task_complete","source_commit":"cdd0cc888802b584c2d654ca85e3c5460973487d","source_sha256":"6d3ccf43be4ae770a9e8dffd463c2561665847df5b7ddf693b01130004dbcee5","source_url":"https://github.com/AtsushiSakai/PythonRobotics/tree/cdd0cc888802b584c2d654ca85e3c5460973487d","summary":"Planar n-link inverse kinematics. Parameterized bounded JSON adapter; numerical operation, no hardware execution.","inspect_url":"https://api.superfastrobotics.com/v1/skills/pythonrobotics-planar-ik?record_version=1.0.0&hub_commit=f97266a5cdd2c600cd376397a54892f08290df20&include=experience","selection_reason":{"basis":"all_terms_word_prefix","matched_terms":["pythonrobotics","planar","ik"],"unmatched_terms":[],"explicit_filters":{},"caller_compatibility_verified":false},"start_url":"https://api.superfastrobotics.com/v1/start?q=pythonrobotics-planar-ik&query_mode=all_terms&hub_commit=f97266a5cdd2c600cd376397a54892f08290df20"}],"total":1,"limit":3,"offset":0,"next":null,"execution_performed":false,"next_action":"check_selected_environment_then_run_plan_within_task_scope","evidence_rule":"A search match does not establish runtime compatibility or task completion.","selected":{"id":"pythonrobotics-planar-ik","selection":"first_ranked_candidate_for_inspection; not_an_execution_decision","record":{"schema_version":"1","id":"pythonrobotics-planar-ik","name":"Planar n-link inverse kinematics","summary":"Planar n-link inverse kinematics. Parameterized bounded JSON adapter; numerical operation, no hardware execution.","capabilities":["algorithm","ik","executable-json","source-adaptation"],"aliases":["ik","Planar n-link inverse kinematics"],"source":{"repository":"https://github.com/AtsushiSakai/PythonRobotics","commit":"cdd0cc888802b584c2d654ca85e3c5460973487d","paths":["ArmNavigation/n_joint_arm_to_point_control/NLinkArm.py","ArmNavigation/n_joint_arm_to_point_control/n_joint_arm_to_point_control.py","InvertedPendulum/inverted_pendulum_lqr_control.py","LICENSE","Localization/extended_kalman_filter/ekf_with_velocity_correction.py","Localization/extended_kalman_filter/extended_kalman_filter.py","Localization/unscented_kalman_filter/unscented_kalman_filter.py","PathPlanning/AStar/a_star.py","PathPlanning/BSplinePath/bspline_path.py","PathPlanning/BezierPath/bezier_path.py","PathPlanning/BidirectionalAStar/bidirectional_a_star.py","PathPlanning/BidirectionalBreadthFirstSearch/bidirectional_breadth_first_search.py","PathPlanning/BreadthFirstSearch/breadth_first_search.py","PathPlanning/Catmull_RomSplinePath/catmull_rom_spline_path.py","PathPlanning/CubicSpline/cubic_spline_planner.py","PathPlanning/DepthFirstSearch/depth_first_search.py","PathPlanning/Dijkstra/dijkstra.py","PathPlanning/DubinsPath/dubins_path_planner.py","PathPlanning/DynamicWindowApproach/dynamic_window_approach.py","PathPlanning/GreedyBestFirstSearch/greedy_best_first_search.py","PathPlanning/PotentialFieldPlanning/potential_field_planning.py","PathPlanning/ProbabilisticRoadMap/probabilistic_road_map.py","PathPlanning/QuinticPolynomialsPlanner/quintic_polynomials_planner.py","PathPlanning/RRT/rrt.py","PathPlanning/RRT/rrt_with_pathsmoothing.py","PathPlanning/RRTStar/rrt_star.py","PathPlanning/ReedsSheppPath/reeds_shepp_path_planning.py","PathTracking/pure_pursuit/pure_pursuit.py","PathTracking/stanley_control/stanley_control.py","utils/__init__.py","utils/angle.py","utils/plot.py","ArmNavigation/n_joint_arm_to_point_control/__init__.py","ArmNavigation/__init__.py","__init__.py","Localization/__init__.py","PathPlanning/__init__.py","PathPlanning/CubicSpline/__init__.py","PathPlanning/DubinsPath/__init__.py","PathPlanning/RRT/__init__.py","PathPlanning/RRTStar/__init__.py","PathTracking/__init__.py"],"archive_url":"https://codeload.github.com/AtsushiSakai/PythonRobotics/tar.gz/cdd0cc888802b584c2d654ca85e3c5460973487d","archive_sha256":"6d3ccf43be4ae770a9e8dffd463c2561665847df5b7ddf693b01130004dbcee5","archive_bytes":12311789,"authors":["Atsushi Sakai and PythonRobotics contributors"]},"license":{"spdx":"MIT","url":"https://github.com/AtsushiSakai/PythonRobotics/blob/cdd0cc888802b584c2d654ca85e3c5460973487d/LICENSE","verified":true,"scope":"Selected PythonRobotics algorithm demonstration source under the pinned MIT license text, Copyright (c) 2016 - now Atsushi Sakai and other contributors. Preserve repository license and each selected file's author notices. This is source-text scope only; dependencies, mathematical references, generated plots and any external assets retain separate terms. GitHub's automated classifier reports NOASSERTION; the MIT identity here comes from the exact reviewed LICENSE bytes, not that classifier."},"compatibility":[{"runtime":"pythonrobotics","runtime_version":"cdd0cc888802","robot":"mathematical-model","controller":"json-contract-v1","observation":"explicit-json-input","os":"windows","architecture":"x86_64","python":"3.10","status":"hub_verified"},{"runtime":"pythonrobotics","runtime_version":"cdd0cc888802","robot":"mathematical-model","controller":"json-contract-v1","observation":"explicit-json-input","os":"linux","architecture":"x86_64","python":"3.10","status":"hub_verified"}],"observation":{"required":["explicit_json_task_input"],"privileged_state":false,"description":"All inputs and outputs follow interface v1. Simulation adapters query exact synthetic simulator state; no perception or physical sensor compatibility."},"requirements":{"python":">=3.10,<3.11","packages":["contourpy==1.3.2","cycler==0.12.1","fonttools==4.65.0","kiwisolver==1.5.1","matplotlib==3.9.4","numpy==1.26.4","packaging==26.3","pillow==12.3.0","pyparsing==3.3.3","python-dateutil==2.9.0.post0","scipy==1.13.1","six==1.17.0"],"hardware":["x86_64 CPU; no GPU or robot required"],"rendering":"No display. Matplotlib Agg for numerical imports; PyBullet DIRECT for simulation.","api_keys":[],"network":["Pinned source archive once during preparation","PyPI for declared dependency installation"],"dependency_lock":"Runtime dependency versions are pinned for the supported Python 3.10 x86_64 CPU environments and checked against execution receipts. Platform-specific wheel hashes are not represented as a universal artifact lock; prepare captures pip freeze."},"invocation":{"entrypoint":"python run.py","argv":["{python}","{recipe_dir}/run.py","--source-dir","{source_dir}","--example"],"inputs":{"link_lengths":[1,1,0.5],"joint_angles":[0.1,0.3,-0.2],"target_xy":[1.5,1]},"outputs":{"format":"single JSON object on stdout","payload_selector":"outputs","schema":{"type":"object","required":["joint_angles_rad","end_effector_xy_m"],"additionalProperties":false,"properties":{"joint_angles_rad":{"type":"array","minItems":2,"maxItems":8,"items":{"type":"number","minimum":-100000,"maximum":100000},"x-unit":"rad","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","description":"joint_angles_rad; units=rad; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order"},"end_effector_xy_m":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number","minimum":-100,"maximum":100},"x-unit":"m","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","x-order":["x","y"],"description":"end_effector_xy_m; units=m; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order; component order=x,y"}}}},"example":"After prepare, replace --example in next_command with --input /absolute/path/task.json; use --describe for the exact contract without execution."},"interface":{"version":"1","kind":"algorithm","abstraction_level":0,"execution_domain":"computation","language":"python","input_transport":"json_file_or_inline","output_transport":"json_stdout","conventions":{"linear_unit":"m","angular_unit":"rad","time_unit":"s","coordinate_frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","joint_order":"input_array_order","quaternion_order":"not_used"},"input_schema":{"type":"object","required":["link_lengths","joint_angles","target_xy"],"additionalProperties":false,"properties":{"link_lengths":{"type":"array","minItems":2,"maxItems":8,"items":{"type":"number","minimum":0.1,"maximum":5},"x-unit":"m","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","description":"link_lengths; units=m; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order"},"joint_angles":{"type":"array","minItems":2,"maxItems":8,"items":{"type":"number","minimum":-10,"maximum":10},"x-unit":"rad","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","description":"joint_angles; units=rad; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order"},"target_xy":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number","minimum":-100,"maximum":100},"x-unit":"m","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","x-order":["x","y"],"description":"target_xy; units=m; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order; component order=x,y"}}},"output_schema":{"type":"object","required":["joint_angles_rad","end_effector_xy_m"],"additionalProperties":false,"properties":{"joint_angles_rad":{"type":"array","minItems":2,"maxItems":8,"items":{"type":"number","minimum":-100000,"maximum":100000},"x-unit":"rad","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","description":"joint_angles_rad; units=rad; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order"},"end_effector_xy_m":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number","minimum":-100,"maximum":100},"x-unit":"m","x-frame":"arm_base_xy; +z revolute axes; base_to_tip_array_order","x-order":["x","y"],"description":"end_effector_xy_m; units=m; frame=arm_base_xy; +z revolute axes; base_to_tip_array_order; component order=x,y"}}},"preconditions":["Ideal planar serial chain; no joint limits, collision geometry or dynamics.","IK uses the upstream 0.1 m convergence tolerance and at most 1000 iterations."],"postconditions":["All declared checks must pass and all outputs must be finite.","Success applies only to this operation and model, not higher-level task completion."],"failure_codes":["invalid_input_or_environment","execution_failed","task_failed"],"composition":{"depends_on":[],"automatic_frame_conversion":false,"automatic_hardware_execution":false},"output_selector":"outputs","origin_reference_ids":[],"origin_relationship":"adapted_from; inspect declared model and inputs, not original robot compatibility"},"completion":{"success_condition":"Exit 0, status=task_complete, success=true, finite outputs satisfying interface.output_schema and all declared numerical/model checks. This is not a physical robot or general task-success claim.","timeout_seconds":30,"failure_modes":["Invalid or oversized JSON","Source checksum mismatch","Unavailable pinned dependency","No valid path or postcondition failure","Execution exceeding the declared bounded algorithm budget"],"stop_condition":"Caller must terminate the separate adapter process after 30 seconds; adapters bound iterations/scene steps and close simulation clients."},"preparation":{"recipe_path":"recipes/pythonrobotics-planar-ik","requirements_file":"recipes/pythonrobotics-planar-ik/requirements.txt","source_selection":"declared_paths","install_argv":["{python}","-m","pip","install","--only-binary=:all:","-r","{recipe_dir}/requirements.txt"],"execution_separate":true},"evidence":{"level":"task_complete","verified_by":"Hub maintainer runtime harness","date":"2026-10-19","environment":{"scope":"computation","platforms":["linux","windows"],"physical_robot":false},"commands":["python tools/verify_executable_recipes.py --source-cache SOURCE_CACHE --output OUTPUT --backend pythonrobotics"],"result":"Three frozen positive cases passed against this exact adapter; see per-case receipts. This does not estimate general accuracy.","artifacts":["https://raw.githubusercontent.com/Superfast-Robotics/robot-skill-hub/f97266a5cdd2c600cd376397a54892f08290df20/evidence/runtime/executable-conversions-v1/pythonrobotics-planar-ik.json"],"runtime_verification":"task_complete","contributor_reported":null,"hub_verification":{"runtime":"task_complete","scope":"computation","case_count":3,"source_unchanged":true}},"maintenance":{"record_version":"1.0.0","last_checked":"2026-10-19","upstream_status":"immutable_source_and_explicit_dependency_versions"},"contribution":{"allowed_paths":["catalog/records/pythonrobotics-planar-ik.json","docs/recipes/pythonrobotics-planar-ik.md","recipes/pythonrobotics-planar-ik/run.py","recipes/pythonrobotics-planar-ik/requirements.txt"],"instructions":"Preserve upstream origin/license and interface semantics. Edit the finite manifest/templates and regenerate; record new exact-byte evidence for behavior changes."}},"record_files_omitted":true,"full_record_url":"https://api.superfastrobotics.com/v1/skills/pythonrobotics-planar-ik?record_version=1.0.0&hub_commit=f97266a5cdd2c600cd376397a54892f08290df20&include=experience","findings":{"schema_version":"1","interpretation":"data_only","trust":"contributor_reported","hub_commit":"f97266a5cdd2c600cd376397a54892f08290df20","backend":"d1","coverage":{"complete":true},"results":[],"total":0,"limit":3,"offset":0,"next":null,"execution_performed":false,"applicability":"needs_applicability_check","automatic":true,"environment_filter":{},"base":{"record_version":"1.0.0","source_commit":"cdd0cc888802b584c2d654ca85e3c5460973487d","hub_commit":"f97266a5cdd2c600cd376397a54892f08290df20"},"status":"ready","index_location":"https://api.superfastrobotics.com/v1/findings"},"community":{"schema_version":"1","status":"ready","results":[],"through":1,"next_after":null,"complete":true,"trust":"contributor_reported","selection":"exact_source_and_requested_environment_then_newest; reports_attached_not_popularity_ranked","next_action":"check_applicability_then_inspect_selected_variant; report_actual_reuse_outcome"},"preparation":{"interpretation":"data_only","automatic_execution":false,"working_directory":"One caller-selected workspace; choose fresh cli and experiment directories.","prerequisites":["Git","Python matching the selected recipe requirements"],"catalog":{"url":"https://api.superfastrobotics.com/v1/skills/pythonrobotics-planar-ik?hub_commit=f97266a5cdd2c600cd376397a54892f08290df20&record_version=1.0.0&format=catalog","save_as":"./pinned-catalog.json","method":"GET","expected_hub_commit":"f97266a5cdd2c600cd376397a54892f08290df20","expected_record_version":"1.0.0","expected_source_commit":"cdd0cc888802b584c2d654ca85e3c5460973487d"},"bootstrap_argv":[["git","clone","--filter=blob:none","--sparse","--no-checkout","https://github.com/Superfast-Robotics/robot-skill-hub.git","./robot-skill-hub-cli"],["git","-C","./robot-skill-hub-cli","sparse-checkout","set","--no-cone","/skills/find-robot-skills/"],["git","-C","./robot-skill-hub-cli","checkout","--detach","f97266a5cdd2c600cd376397a54892f08290df20"]],"plan_argv":["python","./robot-skill-hub-cli/skills/find-robot-skills/scripts/rsh.py","--catalog","./pinned-catalog.json","--offline","prepare","pythonrobotics-planar-ik","--project","./experiment","--expected-source-commit","cdd0cc888802b584c2d654ca85e3c5460973487d","--expected-record-version","1.0.0","--plan","--json"],"prepare_argv":["python","./robot-skill-hub-cli/skills/find-robot-skills/scripts/rsh.py","--catalog","./pinned-catalog.json","--offline","prepare","pythonrobotics-planar-ik","--project","./experiment","--expected-source-commit","cdd0cc888802b584c2d654ca85e3c5460973487d","--expected-record-version","1.0.0","--install-deps","--json"],"prepare_effects":"Downloads pinned source and creates a project environment; dependency installation may execute package build hooks. Use within the authorized task.","execute":{"argv_from":"prepare.next_command","cwd_from":"prepare.next_command_cwd","timeout_seconds":30,"success_condition":"Exit 0, status=task_complete, success=true, finite outputs satisfying interface.output_schema and all declared numerical/model checks. This is not a physical robot or general task-success claim.","input":{"link_lengths":[1,1,0.5],"joint_angles":[0.1,0.3,-0.2],"target_xy":[1.5,1]},"input_override":"Replace --example with --input /ABSOLUTE_PATH/task.json after validating record.interface.","result_check":"Read the returned JSON and named checks; a prepared environment is not task completion."},"reuse":{"recall_argv":["python","./robot-skill-hub-cli/skills/find-robot-skills/scripts/rsh.py","recall","pythonrobotics-planar-ik","--project","./experiment","--json"],"save_scope":"Save a useful finding actually observed during the task. Existing project sharing permission is required for public delivery.","guide_url":"https://hub.superfastrobotics.com/community.md"}},"environment_check":{"supplied":{},"missing":["runtime","robot","os","python","architecture"],"status":"compare_record_requirements_then_run_plan"}},"next_url":null,"scope":"preparation_recipes_only; source_references_remain_searchable_at_/v1/search","sharing_performed":false}