diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b62801f..380f09e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,13 +1,13 @@ # R5a (docs/top-down-audit-roadmap.md §R5a step 3): unit tests + debug assemble on every -# push to master / gsd/** and every PR to master. First-party actions only (actions/*, +# push to main / gsd/** and every PR to main. First-party actions only (actions/*, # gradle/actions) pinned to major version tags — no third-party marketplace actions, no # secrets consumed (threat register T-26.5-01). name: CI on: push: - branches: [ master, "gsd/**" ] + branches: [ main, "gsd/**" ] pull_request: - branches: [ master ] + branches: [ main ] jobs: build: runs-on: ubuntu-latest @@ -24,31 +24,37 @@ jobs: # runner JDK is 17 so the JDK-21 UAST hazard doesn't apply here. - run: ./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug --no-daemon # R9 step 5 (docs/top-down-audit-roadmap.md §R9): memory-hygiene guardrail. - # Scope = the ACTIVE context set ONLY — root CLAUDE.md, the four .planning/ root - # files, and docs/. It NEVER scans the phase archive (historical vocabulary like - # "superseded"/"old approach" is CORRECT there and would false-positive), and it - # excludes docs/top-down-audit-roadmap.md, which QUOTES the stale phrases as work - # items and would self-trip the gate. Checkout only — no JDK, no Gradle. + # Scope = tracked public docs that are meant to exist in normal clones. Local-only planning/evidence + # plus AI workflow artifacts (.planning/, docs/commands/, docs/superpowers/) are intentionally outside + # this CI check; maintainer docs label local-only paths when referenced. # Link check is a deterministic bash loop, NOT a marketplace markdown-link-check # action (RESEARCH A8: unverifiable; T-26.5-06 prefers first-party/deterministic). hygiene: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Stale-phrase check (active context set only) + - name: Stale-phrase check (tracked maintainer/public docs) run: | - if grep -rn "compileSdk 35\|Architecture not yet mapped" \ - CLAUDE.md .planning/PROJECT.md .planning/REQUIREMENTS.md \ - .planning/ROADMAP.md .planning/STATE.md docs/ \ - --exclude=top-down-audit-roadmap.md; then - echo "FAIL: stale phrases found in active context files"; exit 1 + mapfile -t sources < <( + git ls-files README.md ':(glob)docs/*.md' ':(glob)docs/maintainer/*.md' \ + ':!:docs/top-down-audit-roadmap.md' \ + ':!:docs/superpowers/**' \ + ':!:docs/commands/**' + ) + if ((${#sources[@]})) && grep -rn "compileSdk 35\|Architecture not yet mapped" "${sources[@]}"; then + echo "FAIL: stale phrases found in tracked maintainer/public docs"; exit 1 fi echo "OK: no stale phrases" - - name: Dead internal-link check (active context set only) + - name: Dead internal-link check (tracked maintainer/public docs) run: | rm -f /tmp/dead-links - for src in CLAUDE.md .planning/PROJECT.md .planning/REQUIREMENTS.md \ - .planning/ROADMAP.md .planning/STATE.md docs/*.md; do + mapfile -t sources < <( + git ls-files README.md ':(glob)docs/*.md' ':(glob)docs/maintainer/*.md' \ + ':!:docs/top-down-audit-roadmap.md' \ + ':!:docs/superpowers/**' \ + ':!:docs/commands/**' + ) + for src in "${sources[@]}"; do [ -f "$src" ] || continue dir=$(dirname "$src") # Extract relative .md link targets: [text](path.md) / [text](path.md#anchor) @@ -59,7 +65,7 @@ jobs: | sort -u \ | while read -r target; do case "$target" in - http*|/*|*'\'*) continue ;; # skip URLs, absolute and Windows paths + http://*|https://*|*://*|/*|[A-Za-z]:/*|*'\'*) continue ;; # skip URLs, absolute and Windows paths esac # accept either file-relative or repo-root-relative targets if [ ! -e "$dir/$target" ] && [ ! -e "$target" ]; then diff --git a/.gitignore b/.gitignore index 710417ff..63180d29 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ Thumbs.db .claude/settings.local.json *.apk.idsig tools/__pycache__/ +.worktrees/ # Brainstorming visual-companion mockups (local only) .superpowers/ @@ -40,6 +41,10 @@ tools/__pycache__/ /CLAUDE.md .claude/skills/ docs/superpowers/ -docs/commands/ +# docs/commands/ is local-only evidence, EXCEPT the two catalog fixtures that +# CommandCatalogDriftTest (and therefore CI) requires in every clone. +docs/commands/* +!docs/commands/catalog.json +!docs/commands/printer-matrix.json docs/view_specific_notes/ docs/top-down-audit-roadmap.md diff --git a/docs/commands/catalog.json b/docs/commands/catalog.json new file mode 100644 index 00000000..2b4a4ba9 --- /dev/null +++ b/docs/commands/catalog.json @@ -0,0 +1,10749 @@ +{ + "schema_version": 2, + "generated_for_phase": "06-command-reference-capability-matrix", + "source_notes": [ + "Machine-readable sidecar for drift tests; Markdown docs remain human-facing only.", + "Full-detail rows cover Dinghy commands sent now or planned for v1; light rows cover broader official reference surface.", + "Klipper config-section options are intentionally excluded unless they expose sendable commands." + ], + "official_sources": [ + "https://www.klipper3d.org/G-Codes.html", + "https://www.klipper3d.org/Status_Reference.html", + "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "https://moonraker.readthedocs.io/en/latest/external_api/history/", + "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "https://moonraker.readthedocs.io/en/latest/external_api/jsonrpc_notifications/", + "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "https://moonraker.readthedocs.io/en/latest/external_api/webcams/", + "https://donkie.github.io/Spoolman/", + "https://github.com/Donkie/Spoolman" + ], + "commands": [ + { + "id": "KGC-ABORT", + "catalog_id": "KGC-ABORT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ABORT", + "category": "klipper_module", + "purpose": "Klipper `ABORT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "manual_probe" + }, + "predicate": { + "type": "object_present", + "name": "manual_probe" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-ACCELEROMETER_DEBUG_READ", + "catalog_id": "KGC-ACCELEROMETER_DEBUG_READ", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ACCELEROMETER_DEBUG_READ", + "category": "klipper_module", + "purpose": "Klipper `ACCELEROMETER_DEBUG_READ` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_DEBUG_READ" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_DEBUG_READ" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ACCELEROMETER_DEBUG_WRITE", + "catalog_id": "KGC-ACCELEROMETER_DEBUG_WRITE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ACCELEROMETER_DEBUG_WRITE", + "category": "klipper_module", + "purpose": "Klipper `ACCELEROMETER_DEBUG_WRITE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_DEBUG_WRITE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_DEBUG_WRITE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ACCELEROMETER_MEASURE", + "catalog_id": "KGC-ACCELEROMETER_MEASURE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ACCELEROMETER_MEASURE", + "category": "klipper_module", + "purpose": "Klipper `ACCELEROMETER_MEASURE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_MEASURE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_MEASURE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ACCELEROMETER_QUERY", + "catalog_id": "KGC-ACCELEROMETER_QUERY", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ACCELEROMETER_QUERY", + "category": "klipper_module", + "purpose": "Klipper `ACCELEROMETER_QUERY` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_QUERY" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ACCELEROMETER_QUERY" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ACTIVATE_EXTRUDER", + "catalog_id": "KGC-ACTIVATE_EXTRUDER", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ACTIVATE_EXTRUDER", + "category": "klipper_module", + "purpose": "Klipper `ACTIVATE_EXTRUDER` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ACTIVATE_EXTRUDER" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ACTIVATE_EXTRUDER" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ANGLE_CALIBRATE", + "catalog_id": "KGC-ANGLE_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ANGLE_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `ANGLE_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ANGLE_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ANGLE_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ANGLE_CHIP_CALIBRATE", + "catalog_id": "KGC-ANGLE_CHIP_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ANGLE_CHIP_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `ANGLE_CHIP_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ANGLE_CHIP_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ANGLE_CHIP_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ANGLE_DEBUG_READ", + "catalog_id": "KGC-ANGLE_DEBUG_READ", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ANGLE_DEBUG_READ", + "category": "klipper_module", + "purpose": "Klipper `ANGLE_DEBUG_READ` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ANGLE_DEBUG_READ" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ANGLE_DEBUG_READ" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ANGLE_DEBUG_WRITE", + "catalog_id": "KGC-ANGLE_DEBUG_WRITE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ANGLE_DEBUG_WRITE", + "category": "klipper_module", + "purpose": "Klipper `ANGLE_DEBUG_WRITE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ANGLE_DEBUG_WRITE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ANGLE_DEBUG_WRITE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-AXIS_TWIST_COMPENSATION_CALIBRATE", + "catalog_id": "KGC-AXIS_TWIST_COMPENSATION_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "AXIS_TWIST_COMPENSATION_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `AXIS_TWIST_COMPENSATION_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "AXIS_TWIST_COMPENSATION_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "AXIS_TWIST_COMPENSATION_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_MESH_CALIBRATE", + "catalog_id": "KGC-BED_MESH_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_CALIBRATE", + "category": "calibration", + "purpose": "Klipper `BED_MESH_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-BED_MESH_CLEAR", + "catalog_id": "KGC-BED_MESH_CLEAR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_CLEAR", + "category": "calibration", + "purpose": "Klipper `BED_MESH_CLEAR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_MESH_MAP", + "catalog_id": "KGC-BED_MESH_MAP", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_MAP", + "category": "calibration", + "purpose": "Klipper `BED_MESH_MAP` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_MESH_OFFSET", + "catalog_id": "KGC-BED_MESH_OFFSET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_OFFSET", + "category": "klipper_module", + "purpose": "Klipper `BED_MESH_OFFSET` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "BED_MESH_OFFSET" + }, + "predicate": { + "type": "gcode_command_present", + "name": "BED_MESH_OFFSET" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_MESH_OUTPUT", + "catalog_id": "KGC-BED_MESH_OUTPUT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_OUTPUT", + "category": "calibration", + "purpose": "Klipper `BED_MESH_OUTPUT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_MESH_PROFILE", + "catalog_id": "KGC-BED_MESH_PROFILE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_PROFILE", + "category": "calibration", + "purpose": "Klipper `BED_MESH_PROFILE` command from the official G-Code reference.", + "params": [ + "LOAD", + "SAVE", + "REMOVE" + ], + "key_params": [ + "LOAD", + "SAVE", + "REMOVE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_SCREWS_ADJUST", + "catalog_id": "KGC-BED_SCREWS_ADJUST", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_SCREWS_ADJUST", + "category": "klipper_module", + "purpose": "Klipper `BED_SCREWS_ADJUST` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "BED_SCREWS_ADJUST" + }, + "predicate": { + "type": "gcode_command_present", + "name": "BED_SCREWS_ADJUST" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_TILT_CALIBRATE", + "catalog_id": "KGC-BED_TILT_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_TILT_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `BED_TILT_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "BED_TILT_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "BED_TILT_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BLTOUCH_DEBUG", + "catalog_id": "KGC-BLTOUCH_DEBUG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BLTOUCH_DEBUG", + "category": "klipper_module", + "purpose": "Klipper `BLTOUCH_DEBUG` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "BLTOUCH_DEBUG" + }, + "predicate": { + "type": "gcode_command_present", + "name": "BLTOUCH_DEBUG" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BLTOUCH_STORE", + "catalog_id": "KGC-BLTOUCH_STORE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BLTOUCH_STORE", + "category": "klipper_module", + "purpose": "Klipper `BLTOUCH_STORE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "BLTOUCH_STORE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "BLTOUCH_STORE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-CALC_MEASURED_SKEW", + "catalog_id": "KGC-CALC_MEASURED_SKEW", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "CALC_MEASURED_SKEW", + "category": "klipper_module", + "purpose": "Klipper `CALC_MEASURED_SKEW` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "CALC_MEASURED_SKEW" + }, + "predicate": { + "type": "gcode_command_present", + "name": "CALC_MEASURED_SKEW" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-CANCEL_PRINT", + "catalog_id": "KGC-CANCEL_PRINT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "CANCEL_PRINT", + "category": "print_control", + "purpose": "Klipper `CANCEL_PRINT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-CLEAR_PAUSE", + "catalog_id": "KGC-CLEAR_PAUSE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "CLEAR_PAUSE", + "category": "print_control", + "purpose": "Klipper `CLEAR_PAUSE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-DELTA_ANALYZE", + "catalog_id": "KGC-DELTA_ANALYZE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "DELTA_ANALYZE", + "category": "klipper_module", + "purpose": "Klipper `DELTA_ANALYZE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "DELTA_ANALYZE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "DELTA_ANALYZE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-DELTA_CALIBRATE", + "catalog_id": "KGC-DELTA_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "DELTA_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `DELTA_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "DELTA_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "DELTA_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-DISABLE_FILAMENT_WIDTH_LOG", + "catalog_id": "KGC-DISABLE_FILAMENT_WIDTH_LOG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "DISABLE_FILAMENT_WIDTH_LOG", + "category": "klipper_module", + "purpose": "Klipper `DISABLE_FILAMENT_WIDTH_LOG` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "DISABLE_FILAMENT_WIDTH_LOG" + }, + "predicate": { + "type": "gcode_command_present", + "name": "DISABLE_FILAMENT_WIDTH_LOG" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-DISABLE_FILAMENT_WIDTH_SENSOR", + "catalog_id": "KGC-DISABLE_FILAMENT_WIDTH_SENSOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "DISABLE_FILAMENT_WIDTH_SENSOR", + "category": "klipper_module", + "purpose": "Klipper `DISABLE_FILAMENT_WIDTH_SENSOR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "DISABLE_FILAMENT_WIDTH_SENSOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "DISABLE_FILAMENT_WIDTH_SENSOR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-DUMP_TMC", + "catalog_id": "KGC-DUMP_TMC", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "DUMP_TMC", + "category": "klipper_module", + "purpose": "Klipper `DUMP_TMC` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "DUMP_TMC" + }, + "predicate": { + "type": "gcode_command_present", + "name": "DUMP_TMC" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ENABLE_FILAMENT_WIDTH_LOG", + "catalog_id": "KGC-ENABLE_FILAMENT_WIDTH_LOG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ENABLE_FILAMENT_WIDTH_LOG", + "category": "klipper_module", + "purpose": "Klipper `ENABLE_FILAMENT_WIDTH_LOG` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ENABLE_FILAMENT_WIDTH_LOG" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ENABLE_FILAMENT_WIDTH_LOG" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ENABLE_FILAMENT_WIDTH_SENSOR", + "catalog_id": "KGC-ENABLE_FILAMENT_WIDTH_SENSOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ENABLE_FILAMENT_WIDTH_SENSOR", + "category": "klipper_module", + "purpose": "Klipper `ENABLE_FILAMENT_WIDTH_SENSOR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ENABLE_FILAMENT_WIDTH_SENSOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ENABLE_FILAMENT_WIDTH_SENSOR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-ENDSTOP_PHASE_CALIBRATE", + "catalog_id": "KGC-ENDSTOP_PHASE_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ENDSTOP_PHASE_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `ENDSTOP_PHASE_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "ENDSTOP_PHASE_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "ENDSTOP_PHASE_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-EXCLUDE_OBJECT", + "catalog_id": "KGC-EXCLUDE_OBJECT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "EXCLUDE_OBJECT", + "category": "klipper_module", + "purpose": "Klipper `EXCLUDE_OBJECT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-EXCLUDE_OBJECT_DEFINE", + "catalog_id": "KGC-EXCLUDE_OBJECT_DEFINE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "EXCLUDE_OBJECT_DEFINE", + "category": "klipper_module", + "purpose": "Klipper `EXCLUDE_OBJECT_DEFINE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT_DEFINE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT_DEFINE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-EXCLUDE_OBJECT_END", + "catalog_id": "KGC-EXCLUDE_OBJECT_END", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "EXCLUDE_OBJECT_END", + "category": "klipper_module", + "purpose": "Klipper `EXCLUDE_OBJECT_END` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT_END" + }, + "predicate": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT_END" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-EXCLUDE_OBJECT_START", + "catalog_id": "KGC-EXCLUDE_OBJECT_START", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "EXCLUDE_OBJECT_START", + "category": "klipper_module", + "purpose": "Klipper `EXCLUDE_OBJECT_START` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT_START" + }, + "predicate": { + "type": "gcode_command_present", + "name": "EXCLUDE_OBJECT_START" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-FIRMWARE_RESTART", + "catalog_id": "KGC-FIRMWARE_RESTART", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "FIRMWARE_RESTART", + "category": "recovery", + "purpose": "Klipper `FIRMWARE_RESTART` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-FORCE_MOVE", + "catalog_id": "KGC-FORCE_MOVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "FORCE_MOVE", + "category": "motion", + "purpose": "Klipper `FORCE_MOVE` command from the official G-Code reference.", + "params": [ + "STEPPER", + "DISTANCE", + "VELOCITY" + ], + "key_params": [ + "STEPPER", + "DISTANCE", + "VELOCITY" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "FORCE_MOVE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "FORCE_MOVE" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G1", + "catalog_id": "KGC-G1", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G0 / G1", + "category": "motion", + "purpose": "Move axes or extrude using coordinated motion.", + "params": [ + "X", + "Y", + "Z", + "E", + "F" + ], + "key_params": [ + "X", + "Y", + "Z", + "E", + "F" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G1_EXTRUDE", + "catalog_id": "KGC-G1_EXTRUDE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G1 E", + "category": "extrusion", + "purpose": "Dinghy bounded extrude/retract wrapper.", + "params": [ + "E", + "F" + ], + "key_params": [ + "E", + "F" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "extruder" + }, + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G1_JOG", + "catalog_id": "KGC-G1_JOG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G1 relative jog", + "category": "motion", + "purpose": "Dinghy bounded relative jog wrapper.", + "params": [ + "X", + "Y", + "Z", + "F" + ], + "key_params": [ + "X", + "Y", + "Z", + "F" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G1_OVERRIDE_JOG", + "catalog_id": "KGC-G1_OVERRIDE_JOG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_KINEMATIC_POSITION + G1", + "category": "motion", + "purpose": "Explicit unhomed override jog path.", + "params": [ + "X", + "Y", + "Z", + "F" + ], + "key_params": [ + "X", + "Y", + "Z", + "F" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "FORCE_MOVE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "FORCE_MOVE" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G28", + "catalog_id": "KGC-G28", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G28", + "category": "motion", + "purpose": "Home all or selected axes.", + "params": [ + "X", + "Y", + "Z" + ], + "key_params": [ + "X", + "Y", + "Z" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G28_HOME_ALL", + "catalog_id": "KGC-G28_HOME_ALL", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G28", + "category": "motion", + "purpose": "Dinghy home-all command.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G28_HOME_AXIS", + "catalog_id": "KGC-G28_HOME_AXIS", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G28 ", + "category": "motion", + "purpose": "Dinghy single-axis home command.", + "params": [ + "X", + "Y", + "Z" + ], + "key_params": [ + "X", + "Y", + "Z" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G28_HOME_XY", + "catalog_id": "KGC-G28_HOME_XY", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G28 X Y", + "category": "motion", + "purpose": "Dinghy home-X/Y command that does not home Z.", + "params": [ + "X", + "Y" + ], + "key_params": [ + "X", + "Y" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G90", + "catalog_id": "KGC-G90", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G90", + "category": "motion", + "purpose": "Set absolute coordinate mode.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-G91", + "catalog_id": "KGC-G91", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G91", + "category": "motion", + "purpose": "Set relative coordinate mode.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-GET_CURRENT_SKEW", + "catalog_id": "KGC-GET_CURRENT_SKEW", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "GET_CURRENT_SKEW", + "category": "klipper_module", + "purpose": "Klipper `GET_CURRENT_SKEW` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "GET_CURRENT_SKEW" + }, + "predicate": { + "type": "gcode_command_present", + "name": "GET_CURRENT_SKEW" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-GET_POSITION", + "catalog_id": "KGC-GET_POSITION", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "GET_POSITION", + "category": "klipper_module", + "purpose": "Klipper `GET_POSITION` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "GET_POSITION" + }, + "predicate": { + "type": "gcode_command_present", + "name": "GET_POSITION" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-GET_RETRACTION", + "catalog_id": "KGC-GET_RETRACTION", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "GET_RETRACTION", + "category": "klipper_module", + "purpose": "Klipper `GET_RETRACTION` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "GET_RETRACTION" + }, + "predicate": { + "type": "gcode_command_present", + "name": "GET_RETRACTION" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-HELP", + "catalog_id": "KGC-HELP", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "HELP", + "category": "console", + "purpose": "Klipper `HELP` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-INIT_TMC", + "catalog_id": "KGC-INIT_TMC", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "INIT_TMC", + "category": "klipper_module", + "purpose": "Klipper `INIT_TMC` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "INIT_TMC" + }, + "predicate": { + "type": "gcode_command_present", + "name": "INIT_TMC" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LDC_CALIBRATE_DRIVE_CURRENT", + "catalog_id": "KGC-LDC_CALIBRATE_DRIVE_CURRENT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LDC_CALIBRATE_DRIVE_CURRENT", + "category": "klipper_module", + "purpose": "Klipper `LDC_CALIBRATE_DRIVE_CURRENT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "LDC_CALIBRATE_DRIVE_CURRENT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "LDC_CALIBRATE_DRIVE_CURRENT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LOAD_CELL_CALIBRATE", + "catalog_id": "KGC-LOAD_CELL_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LOAD_CELL_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `LOAD_CELL_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "LOAD_CELL_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "LOAD_CELL_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LOAD_CELL_DIAGNOSTIC", + "catalog_id": "KGC-LOAD_CELL_DIAGNOSTIC", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LOAD_CELL_DIAGNOSTIC", + "category": "klipper_module", + "purpose": "Klipper `LOAD_CELL_DIAGNOSTIC` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "LOAD_CELL_DIAGNOSTIC" + }, + "predicate": { + "type": "gcode_command_present", + "name": "LOAD_CELL_DIAGNOSTIC" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LOAD_CELL_READ_LOAD_CELL_NAME", + "catalog_id": "KGC-LOAD_CELL_READ_LOAD_CELL_NAME", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LOAD_CELL_READ load_cell=\"name\"", + "category": "klipper_module", + "purpose": "Klipper `LOAD_CELL_READ load_cell=\"name\"` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "LOAD_CELL_READ_LOAD_CELL_NAME" + }, + "predicate": { + "type": "gcode_command_present", + "name": "LOAD_CELL_READ_LOAD_CELL_NAME" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LOAD_CELL_TARE", + "catalog_id": "KGC-LOAD_CELL_TARE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LOAD_CELL_TARE", + "category": "klipper_module", + "purpose": "Klipper `LOAD_CELL_TARE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "LOAD_CELL_TARE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "LOAD_CELL_TARE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LOAD_CELL_TEST_TAP", + "catalog_id": "KGC-LOAD_CELL_TEST_TAP", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LOAD_CELL_TEST_TAP", + "category": "klipper_module", + "purpose": "Klipper `LOAD_CELL_TEST_TAP` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "LOAD_CELL_TEST_TAP" + }, + "predicate": { + "type": "gcode_command_present", + "name": "LOAD_CELL_TEST_TAP" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-LOAD_FILAMENT", + "catalog_id": "KGC-LOAD_FILAMENT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "LOAD_FILAMENT", + "category": "macro", + "purpose": "Run the user-defined `LOAD_FILAMENT` macro when present.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/Command_Templates.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "macro_present", + "name": "LOAD_FILAMENT" + }, + "predicate": { + "type": "macro_present", + "name": "LOAD_FILAMENT" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M104", + "catalog_id": "KGC-M104", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M104", + "category": "temperature", + "purpose": "Set extruder temperature using standard G-Code.", + "params": [ + "S", + "T" + ], + "key_params": [ + "S", + "T" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "extruder" + }, + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M109", + "catalog_id": "KGC-M109", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M109", + "category": "temperature", + "purpose": "Set extruder temperature and wait.", + "params": [ + "S", + "T" + ], + "key_params": [ + "S", + "T" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "extruder" + }, + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M112", + "catalog_id": "KGC-M112", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M112", + "category": "safety", + "purpose": "Emergency stop G-Code; Dinghy uses Moonraker printer.emergency_stop instead.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M140", + "catalog_id": "KGC-M140", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M140", + "category": "temperature", + "purpose": "Set bed temperature using standard G-Code.", + "params": [ + "S" + ], + "key_params": [ + "S" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "heater_bed" + }, + "predicate": { + "type": "object_present", + "name": "heater_bed" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M190", + "catalog_id": "KGC-M190", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M190", + "category": "temperature", + "purpose": "Set bed temperature and wait.", + "params": [ + "S" + ], + "key_params": [ + "S" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "heater_bed" + }, + "predicate": { + "type": "object_present", + "name": "heater_bed" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M204", + "catalog_id": "KGC-M204", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M204", + "category": "motion", + "purpose": "Set acceleration.", + "params": [ + "S", + "P", + "T" + ], + "key_params": [ + "S", + "P", + "T" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M220", + "catalog_id": "KGC-M220", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M220", + "category": "tuning", + "purpose": "Set speed factor override.", + "params": [ + "S" + ], + "key_params": [ + "S" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "gcode_move" + }, + "predicate": { + "type": "object_present", + "name": "gcode_move" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M221", + "catalog_id": "KGC-M221", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M221", + "category": "tuning", + "purpose": "Set extrude factor override.", + "params": [ + "S" + ], + "key_params": [ + "S" + ], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "gcode_move" + }, + "predicate": { + "type": "object_present", + "name": "gcode_move" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M83", + "catalog_id": "KGC-M83", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M82 / M83", + "category": "extrusion", + "purpose": "Set extruder relative mode inside Dinghy wrappers.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "extruder" + }, + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M84", + "catalog_id": "KGC-M84", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M18 / M84", + "category": "motion", + "purpose": "Disable steppers.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-M84_DISABLE_STEPPERS", + "catalog_id": "KGC-M84_DISABLE_STEPPERS", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M84", + "category": "motion", + "purpose": "Dinghy disable-steppers confirm-guard action.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-MANUAL_PROBE", + "catalog_id": "KGC-MANUAL_PROBE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "MANUAL_PROBE", + "category": "klipper_module", + "purpose": "Klipper `MANUAL_PROBE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "MANUAL_PROBE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "MANUAL_PROBE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-MANUAL_STEPPER", + "catalog_id": "KGC-MANUAL_STEPPER", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "MANUAL_STEPPER", + "category": "klipper_module", + "purpose": "Klipper `MANUAL_STEPPER` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "MANUAL_STEPPER" + }, + "predicate": { + "type": "gcode_command_present", + "name": "MANUAL_STEPPER" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-MEASURE_AXES_NOISE", + "catalog_id": "KGC-MEASURE_AXES_NOISE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "MEASURE_AXES_NOISE", + "category": "klipper_module", + "purpose": "Klipper `MEASURE_AXES_NOISE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "MEASURE_AXES_NOISE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "MEASURE_AXES_NOISE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PALETTE_CLEAR", + "catalog_id": "KGC-PALETTE_CLEAR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PALETTE_CLEAR", + "category": "klipper_module", + "purpose": "Klipper `PALETTE_CLEAR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PALETTE_CLEAR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PALETTE_CLEAR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PALETTE_CONNECT", + "catalog_id": "KGC-PALETTE_CONNECT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PALETTE_CONNECT", + "category": "klipper_module", + "purpose": "Klipper `PALETTE_CONNECT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PALETTE_CONNECT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PALETTE_CONNECT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PALETTE_CUT", + "catalog_id": "KGC-PALETTE_CUT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PALETTE_CUT", + "category": "klipper_module", + "purpose": "Klipper `PALETTE_CUT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PALETTE_CUT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PALETTE_CUT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PALETTE_DISCONNECT", + "catalog_id": "KGC-PALETTE_DISCONNECT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PALETTE_DISCONNECT", + "category": "klipper_module", + "purpose": "Klipper `PALETTE_DISCONNECT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PALETTE_DISCONNECT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PALETTE_DISCONNECT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PALETTE_SMART_LOAD", + "catalog_id": "KGC-PALETTE_SMART_LOAD", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PALETTE_SMART_LOAD", + "category": "klipper_module", + "purpose": "Klipper `PALETTE_SMART_LOAD` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PALETTE_SMART_LOAD" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PALETTE_SMART_LOAD" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PAUSE", + "catalog_id": "KGC-PAUSE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PAUSE", + "category": "print_control", + "purpose": "Klipper `PAUSE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PID_CALIBRATE", + "catalog_id": "KGC-PID_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PID_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `PID_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PID_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PID_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PROBE", + "catalog_id": "KGC-PROBE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PROBE", + "category": "calibration", + "purpose": "Klipper `PROBE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "probe" + }, + "predicate": { + "type": "object_present", + "name": "probe" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PROBE_ACCURACY", + "catalog_id": "KGC-PROBE_ACCURACY", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PROBE_ACCURACY", + "category": "calibration", + "purpose": "Klipper `PROBE_ACCURACY` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "probe" + }, + "predicate": { + "type": "object_present", + "name": "probe" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PROBE_CALIBRATE", + "catalog_id": "KGC-PROBE_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PROBE_CALIBRATE", + "category": "calibration", + "purpose": "Klipper `PROBE_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "probe" + }, + "predicate": { + "type": "object_present", + "name": "probe" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-PROBE_EDDY_CURRENT_CALIBRATE", + "catalog_id": "KGC-PROBE_EDDY_CURRENT_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PROBE_EDDY_CURRENT_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `PROBE_EDDY_CURRENT_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-PROBE_EDDY_CURRENT_TAP_CALIBRATE", + "catalog_id": "KGC-PROBE_EDDY_CURRENT_TAP_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "PROBE_EDDY_CURRENT_TAP_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `PROBE_EDDY_CURRENT_TAP_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_TAP_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_TAP_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-QUAD_GANTRY_LEVEL", + "catalog_id": "KGC-QUAD_GANTRY_LEVEL", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUAD_GANTRY_LEVEL", + "category": "calibration", + "purpose": "Klipper `QUAD_GANTRY_LEVEL` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "quad_gantry_level" + }, + "predicate": { + "type": "object_present", + "name": "quad_gantry_level" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-QUERY_ADC", + "catalog_id": "KGC-QUERY_ADC", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUERY_ADC", + "category": "klipper_module", + "purpose": "Klipper `QUERY_ADC` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "QUERY_ADC" + }, + "predicate": { + "type": "gcode_command_present", + "name": "QUERY_ADC" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-QUERY_ENDSTOPS", + "catalog_id": "KGC-QUERY_ENDSTOPS", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUERY_ENDSTOPS", + "category": "klipper_module", + "purpose": "Klipper `QUERY_ENDSTOPS` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "QUERY_ENDSTOPS" + }, + "predicate": { + "type": "gcode_command_present", + "name": "QUERY_ENDSTOPS" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-QUERY_FILAMENT_SENSOR", + "catalog_id": "KGC-QUERY_FILAMENT_SENSOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUERY_FILAMENT_SENSOR", + "category": "klipper_module", + "purpose": "Klipper `QUERY_FILAMENT_SENSOR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "QUERY_FILAMENT_SENSOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "QUERY_FILAMENT_SENSOR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-QUERY_FILAMENT_WIDTH", + "catalog_id": "KGC-QUERY_FILAMENT_WIDTH", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUERY_FILAMENT_WIDTH", + "category": "klipper_module", + "purpose": "Klipper `QUERY_FILAMENT_WIDTH` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "QUERY_FILAMENT_WIDTH" + }, + "predicate": { + "type": "gcode_command_present", + "name": "QUERY_FILAMENT_WIDTH" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-QUERY_PROBE", + "catalog_id": "KGC-QUERY_PROBE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUERY_PROBE", + "category": "calibration", + "purpose": "Klipper `QUERY_PROBE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "probe" + }, + "predicate": { + "type": "object_present", + "name": "probe" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-QUERY_RAW_FILAMENT_WIDTH", + "catalog_id": "KGC-QUERY_RAW_FILAMENT_WIDTH", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "QUERY_RAW_FILAMENT_WIDTH", + "category": "klipper_module", + "purpose": "Klipper `QUERY_RAW_FILAMENT_WIDTH` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "QUERY_RAW_FILAMENT_WIDTH" + }, + "predicate": { + "type": "gcode_command_present", + "name": "QUERY_RAW_FILAMENT_WIDTH" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESET_FILAMENT_WIDTH_SENSOR", + "catalog_id": "KGC-RESET_FILAMENT_WIDTH_SENSOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESET_FILAMENT_WIDTH_SENSOR", + "category": "klipper_module", + "purpose": "Klipper `RESET_FILAMENT_WIDTH_SENSOR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "RESET_FILAMENT_WIDTH_SENSOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "RESET_FILAMENT_WIDTH_SENSOR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESET_SMART_EFFECTOR", + "catalog_id": "KGC-RESET_SMART_EFFECTOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESET_SMART_EFFECTOR", + "category": "klipper_module", + "purpose": "Klipper `RESET_SMART_EFFECTOR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "RESET_SMART_EFFECTOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "RESET_SMART_EFFECTOR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESPOND", + "catalog_id": "KGC-RESPOND", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESPOND", + "category": "console", + "purpose": "Klipper `RESPOND` command from the official G-Code reference.", + "params": [ + "TYPE", + "MSG" + ], + "key_params": [ + "TYPE", + "MSG" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESTART", + "catalog_id": "KGC-RESTART", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESTART", + "category": "recovery", + "purpose": "Klipper `RESTART` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESTORE_DUAL_CARRIAGE_STATE", + "catalog_id": "KGC-RESTORE_DUAL_CARRIAGE_STATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESTORE_DUAL_CARRIAGE_STATE", + "category": "klipper_module", + "purpose": "Klipper `RESTORE_DUAL_CARRIAGE_STATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "RESTORE_DUAL_CARRIAGE_STATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "RESTORE_DUAL_CARRIAGE_STATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESTORE_GCODE_STATE", + "catalog_id": "KGC-RESTORE_GCODE_STATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESTORE_GCODE_STATE", + "category": "safety", + "purpose": "Klipper `RESTORE_GCODE_STATE` command from the official G-Code reference.", + "params": [ + "NAME" + ], + "key_params": [ + "NAME" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-RESUME", + "catalog_id": "KGC-RESUME", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "RESUME", + "category": "print_control", + "purpose": "Klipper `RESUME` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-Z_OFFSET_APPLY_SAVE", + "catalog_id": "KGC-Z_OFFSET_APPLY_SAVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "Z_OFFSET_APPLY_* + SAVE_CONFIG", + "category": "config", + "purpose": "Compound: apply the live Z-offset (Z_OFFSET_APPLY_PROBE/ENDSTOP) then SAVE_CONFIG, as one ordered gcode block (Live Z-Offset Save & Restart).", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { "type": "always" }, + "predicate": { "type": "always" }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Live Z-Offset Save & Restart, 2026-06-28) — single ordered dispatch to avoid the apply/save reorder race." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-SAVE_CONFIG", + "catalog_id": "KGC-SAVE_CONFIG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SAVE_CONFIG", + "category": "config", + "purpose": "Klipper `SAVE_CONFIG` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-SAVE_DUAL_CARRIAGE_STATE", + "catalog_id": "KGC-SAVE_DUAL_CARRIAGE_STATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SAVE_DUAL_CARRIAGE_STATE", + "category": "klipper_module", + "purpose": "Klipper `SAVE_DUAL_CARRIAGE_STATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SAVE_DUAL_CARRIAGE_STATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SAVE_DUAL_CARRIAGE_STATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SAVE_GCODE_STATE", + "catalog_id": "KGC-SAVE_GCODE_STATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SAVE_GCODE_STATE", + "category": "safety", + "purpose": "Klipper `SAVE_GCODE_STATE` command from the official G-Code reference.", + "params": [ + "NAME" + ], + "key_params": [ + "NAME" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SAVE_VARIABLE", + "catalog_id": "KGC-SAVE_VARIABLE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SAVE_VARIABLE", + "category": "klipper_module", + "purpose": "Klipper `SAVE_VARIABLE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SAVE_VARIABLE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SAVE_VARIABLE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SCREWS_TILT_CALCULATE", + "catalog_id": "KGC-SCREWS_TILT_CALCULATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SCREWS_TILT_CALCULATE", + "category": "calibration", + "purpose": "Klipper `SCREWS_TILT_CALCULATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "screws_tilt_adjust" + }, + "predicate": { + "type": "object_present", + "name": "screws_tilt_adjust" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-SDCARD_LOOP_BEGIN", + "catalog_id": "KGC-SDCARD_LOOP_BEGIN", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SDCARD_LOOP_BEGIN", + "category": "klipper_module", + "purpose": "Klipper `SDCARD_LOOP_BEGIN` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SDCARD_LOOP_BEGIN" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SDCARD_LOOP_BEGIN" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SDCARD_LOOP_DESIST", + "catalog_id": "KGC-SDCARD_LOOP_DESIST", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SDCARD_LOOP_DESIST", + "category": "klipper_module", + "purpose": "Klipper `SDCARD_LOOP_DESIST` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SDCARD_LOOP_DESIST" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SDCARD_LOOP_DESIST" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SDCARD_LOOP_END", + "catalog_id": "KGC-SDCARD_LOOP_END", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SDCARD_LOOP_END", + "category": "klipper_module", + "purpose": "Klipper `SDCARD_LOOP_END` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SDCARD_LOOP_END" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SDCARD_LOOP_END" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SDCARD_PRINT_FILE", + "catalog_id": "KGC-SDCARD_PRINT_FILE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SDCARD_PRINT_FILE", + "category": "print_control", + "purpose": "Klipper `SDCARD_PRINT_FILE` command from the official G-Code reference.", + "params": [ + "FILENAME" + ], + "key_params": [ + "FILENAME" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SDCARD_RESET_FILE", + "catalog_id": "KGC-SDCARD_RESET_FILE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SDCARD_RESET_FILE", + "category": "print_control", + "purpose": "Klipper `SDCARD_RESET_FILE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 16 Print-Status Terminal Dismiss, 16-03)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-SET_DIGIPOT", + "catalog_id": "KGC-SET_DIGIPOT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_DIGIPOT", + "category": "klipper_module", + "purpose": "Klipper `SET_DIGIPOT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_DIGIPOT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_DIGIPOT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_DISPLAY_GROUP", + "catalog_id": "KGC-SET_DISPLAY_GROUP", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_DISPLAY_GROUP", + "category": "klipper_module", + "purpose": "Klipper `SET_DISPLAY_GROUP` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_DISPLAY_GROUP" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_DISPLAY_GROUP" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_DUAL_CARRIAGE", + "catalog_id": "KGC-SET_DUAL_CARRIAGE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_DUAL_CARRIAGE", + "category": "klipper_module", + "purpose": "Klipper `SET_DUAL_CARRIAGE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_DUAL_CARRIAGE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_DUAL_CARRIAGE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_EXTRUDER_ROTATION_DISTANCE", + "catalog_id": "KGC-SET_EXTRUDER_ROTATION_DISTANCE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_EXTRUDER_ROTATION_DISTANCE", + "category": "klipper_module", + "purpose": "Klipper `SET_EXTRUDER_ROTATION_DISTANCE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_EXTRUDER_ROTATION_DISTANCE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_EXTRUDER_ROTATION_DISTANCE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_FAN_SPEED", + "catalog_id": "KGC-SET_FAN_SPEED", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_FAN_SPEED", + "category": "klipper_module", + "purpose": "Klipper `SET_FAN_SPEED` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_FAN_SPEED" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_FAN_SPEED" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_FILAMENT_SENSOR", + "catalog_id": "KGC-SET_FILAMENT_SENSOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_FILAMENT_SENSOR", + "category": "klipper_module", + "purpose": "Klipper `SET_FILAMENT_SENSOR` command from the official G-Code reference.", + "params": ["SENSOR", "ENABLE"], + "key_params": ["SENSOR"], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_FILAMENT_SENSOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_FILAMENT_SENSOR" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec (Extrude rework) — runout-sensor enable/disable from the Extrude screen." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_GCODE_OFFSET", + "catalog_id": "KGC-SET_GCODE_OFFSET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_GCODE_OFFSET", + "category": "klipper_module", + "purpose": "Klipper `SET_GCODE_OFFSET` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_GCODE_OFFSET" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_GCODE_OFFSET" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 16 Print-Status babystep, 16-03)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-SET_GCODE_OFFSET_CLEAR", + "catalog_id": "KGC-SET_GCODE_OFFSET_CLEAR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_GCODE_OFFSET (clear)", + "category": "klipper_module", + "purpose": "Klipper `SET_GCODE_OFFSET Z=0 MOVE=1` — clear the live Z babystep offset.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { "type": "object_present", "name": "gcode_move" }, + "predicate": { "type": "object_present", "name": "gcode_move" }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Apply Babystepping Clear, 2026-06-28)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-SET_GCODE_VARIABLE", + "catalog_id": "KGC-SET_GCODE_VARIABLE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_GCODE_VARIABLE", + "category": "macro", + "purpose": "Klipper `SET_GCODE_VARIABLE` command from the official G-Code reference.", + "params": [ + "MACRO", + "VARIABLE", + "VALUE" + ], + "key_params": [ + "MACRO", + "VARIABLE", + "VALUE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_HEATER_TEMPERATURE", + "catalog_id": "KGC-SET_HEATER_TEMPERATURE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_HEATER_TEMPERATURE", + "category": "temperature", + "purpose": "Klipper `SET_HEATER_TEMPERATURE` command from the official G-Code reference.", + "params": [ + "HEATER", + "TARGET" + ], + "key_params": [ + "HEATER", + "TARGET" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "any_object_present", + "names": [ + "extruder", + "heater_bed", + "heater_generic chamber" + ] + }, + "predicate": { + "type": "any_object_present", + "names": [ + "extruder", + "heater_bed", + "heater_generic chamber" + ] + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_TEMPERATURE_FAN_TARGET", + "catalog_id": "KGC-SET_TEMPERATURE_FAN_TARGET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_TEMPERATURE_FAN_TARGET", + "category": "temperature", + "purpose": "Klipper `SET_TEMPERATURE_FAN_TARGET` command — set a temperature_fan's target temperature.", + "params": [ + "TEMPERATURE_FAN", + "TARGET" + ], + "key_params": [ + "TEMPERATURE_FAN", + "TARGET" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Heat Presets temperature_fan setpoints." + }, + "success_semantics": "Klipper accepts the G-Code script and adjusts the temperature_fan target.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registry gcode commands are dispatched via gcode.script JSON-RPC; script params are produced byte-identically." + }, + { + "id": "KGC-APPLY_HEAT_PRESET", + "catalog_id": "KGC-APPLY_HEAT_PRESET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "APPLY_HEAT_PRESET", + "category": "temperature", + "purpose": "Apply a per-printer Heat Preset — one SET_HEATER_TEMPERATURE / SET_TEMPERATURE_FAN_TARGET line per heater in the preset's sparse setpoint map.", + "params": [ + "HEATER", + "TARGET", + "TEMPERATURE_FAN" + ], + "key_params": [ + "HEATER", + "TARGET" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "extruder" + }, + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for per-printer Heat Presets apply." + }, + "success_semantics": "Klipper accepts the multi-line G-Code script and applies each heater target.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registry gcode commands are dispatched via gcode.script JSON-RPC; script params are produced byte-identically." + }, + { + "id": "KGC-SET_IDLE_TIMEOUT", + "catalog_id": "KGC-SET_IDLE_TIMEOUT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_IDLE_TIMEOUT", + "category": "klipper_module", + "purpose": "Klipper `SET_IDLE_TIMEOUT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_IDLE_TIMEOUT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_IDLE_TIMEOUT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_INPUT_SHAPER", + "catalog_id": "KGC-SET_INPUT_SHAPER", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_INPUT_SHAPER", + "category": "klipper_module", + "purpose": "Klipper `SET_INPUT_SHAPER` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_INPUT_SHAPER" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_INPUT_SHAPER" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_KINEMATIC_POSITION", + "catalog_id": "KGC-SET_KINEMATIC_POSITION", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_KINEMATIC_POSITION", + "category": "motion", + "purpose": "Klipper `SET_KINEMATIC_POSITION` command from the official G-Code reference.", + "params": [ + "X", + "Y", + "Z" + ], + "key_params": [ + "X", + "Y", + "Z" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_KINEMATIC_POSITION" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_KINEMATIC_POSITION" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_LED", + "catalog_id": "KGC-SET_LED", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_LED", + "category": "klipper_module", + "purpose": "Klipper `SET_LED` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_LED" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_LED" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_LED_TEMPLATE", + "catalog_id": "KGC-SET_LED_TEMPLATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_LED_TEMPLATE", + "category": "klipper_module", + "purpose": "Klipper `SET_LED_TEMPLATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_LED_TEMPLATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_LED_TEMPLATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_PIN", + "catalog_id": "KGC-SET_PIN", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_PIN", + "category": "klipper_module", + "purpose": "Klipper `SET_PIN` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_PIN" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_PIN" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_PRESSURE_ADVANCE", + "catalog_id": "KGC-SET_PRESSURE_ADVANCE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_PRESSURE_ADVANCE", + "category": "klipper_module", + "purpose": "Klipper `SET_PRESSURE_ADVANCE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_PRESSURE_ADVANCE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_PRESSURE_ADVANCE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_PRINT_STATS_INFO", + "catalog_id": "KGC-SET_PRINT_STATS_INFO", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_PRINT_STATS_INFO", + "category": "klipper_module", + "purpose": "Klipper `SET_PRINT_STATS_INFO` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_PRINT_STATS_INFO" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_PRINT_STATS_INFO" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_RETRACTION", + "catalog_id": "KGC-SET_RETRACTION", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_RETRACTION", + "category": "klipper_module", + "purpose": "Klipper `SET_RETRACTION` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_RETRACTION" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_RETRACTION" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_FAN_SPEED-OUT", + "catalog_id": "KGC-SET_FAN_SPEED-OUT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_FAN_SPEED", + "category": "output", + "purpose": "Set a generic (`fan_generic`) fan speed; BARE section name (HIGH-1).", + "params": [ + "FAN", + "SPEED" + ], + "key_params": [ + "FAN", + "SPEED" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/Config_Reference.html#fan_generic", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry (setGenericFan) for current Dinghy runtime sends; Always predicate — runtime descriptor discovery (19-04) is the source of truth for which fans the UI offers." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Sent only when the runtime descriptor discovery surfaces a matching fan_generic output." + }, + { + "id": "KGC-SET_LED", + "catalog_id": "KGC-SET_LED", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_LED", + "category": "output", + "purpose": "Set an LED/neopixel color; BARE section name (HIGH-1); D-12 Off = all-zero.", + "params": [ + "LED", + "RED", + "GREEN", + "BLUE", + "WHITE" + ], + "key_params": [ + "LED", + "RED", + "GREEN", + "BLUE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/Config_Reference.html#led", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry (setLed) for current Dinghy runtime sends; Always predicate — runtime descriptor discovery (19-04) is the source of truth for which led/neopixel outputs the UI offers." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Sent only when the runtime descriptor discovery surfaces a matching led/neopixel output." + }, + { + "id": "KGC-SET_SERVO-OUT", + "catalog_id": "KGC-SET_SERVO-OUT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_SERVO", + "category": "output", + "purpose": "Set a servo angle, or disable it via `WIDTH=0`; BARE section name (HIGH-1).", + "params": [ + "SERVO", + "ANGLE", + "WIDTH" + ], + "key_params": [ + "SERVO", + "ANGLE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/Config_Reference.html#servo", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry (setServo) for current Dinghy runtime sends; Always predicate — runtime descriptor discovery (19-04) is the source of truth for which servo outputs the UI offers." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Sent only when the runtime descriptor discovery surfaces a matching servo output." + }, + { + "id": "KGC-SET_PIN-OUT", + "catalog_id": "KGC-SET_PIN-OUT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_PIN", + "category": "output", + "purpose": "Set a digital or PWM `output_pin` (also serves `pwm_tool`); BARE section name (HIGH-1).", + "params": [ + "PIN", + "VALUE" + ], + "key_params": [ + "PIN", + "VALUE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/Config_Reference.html#output_pin", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry (setOutputPin) for current Dinghy runtime sends; Always predicate — runtime descriptor discovery (19-04) is the source of truth for which output_pin/pwm_tool outputs the UI offers." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Sent only when the runtime descriptor discovery surfaces a matching output_pin/pwm_tool output." + }, + { + "id": "KGC-SET_SERVO", + "catalog_id": "KGC-SET_SERVO", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_SERVO", + "category": "klipper_module", + "purpose": "Klipper `SET_SERVO` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_SERVO" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_SERVO" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_SKEW", + "catalog_id": "KGC-SET_SKEW", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_SKEW", + "category": "klipper_module", + "purpose": "Klipper `SET_SKEW` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_SKEW" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_SKEW" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_SMART_EFFECTOR", + "catalog_id": "KGC-SET_SMART_EFFECTOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_SMART_EFFECTOR", + "category": "klipper_module", + "purpose": "Klipper `SET_SMART_EFFECTOR` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_SMART_EFFECTOR" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_SMART_EFFECTOR" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_STEPPER_CARRIAGES", + "catalog_id": "KGC-SET_STEPPER_CARRIAGES", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_STEPPER_CARRIAGES", + "category": "klipper_module", + "purpose": "Klipper `SET_STEPPER_CARRIAGES` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_STEPPER_CARRIAGES" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_STEPPER_CARRIAGES" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_STEPPER_ENABLE", + "catalog_id": "KGC-SET_STEPPER_ENABLE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_STEPPER_ENABLE", + "category": "klipper_module", + "purpose": "Klipper `SET_STEPPER_ENABLE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_STEPPER_ENABLE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_STEPPER_ENABLE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_TEMPERATURE_FAN_TARGET", + "catalog_id": "KGC-SET_TEMPERATURE_FAN_TARGET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_TEMPERATURE_FAN_TARGET", + "category": "klipper_module", + "purpose": "Klipper `SET_TEMPERATURE_FAN_TARGET` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_TEMPERATURE_FAN_TARGET" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_TEMPERATURE_FAN_TARGET" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_TMC_CURRENT", + "catalog_id": "KGC-SET_TMC_CURRENT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_TMC_CURRENT", + "category": "klipper_module", + "purpose": "Klipper `SET_TMC_CURRENT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_TMC_CURRENT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_TMC_CURRENT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_TMC_FIELD", + "catalog_id": "KGC-SET_TMC_FIELD", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_TMC_FIELD", + "category": "klipper_module", + "purpose": "Klipper `SET_TMC_FIELD` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_TMC_FIELD" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_TMC_FIELD" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_VELOCITY_LIMIT", + "catalog_id": "KGC-SET_VELOCITY_LIMIT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_VELOCITY_LIMIT", + "category": "klipper_module", + "purpose": "Klipper `SET_VELOCITY_LIMIT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_VELOCITY_LIMIT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_VELOCITY_LIMIT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SET_Z_THERMAL_ADJUST", + "catalog_id": "KGC-SET_Z_THERMAL_ADJUST", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SET_Z_THERMAL_ADJUST", + "category": "klipper_module", + "purpose": "Klipper `SET_Z_THERMAL_ADJUST` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SET_Z_THERMAL_ADJUST" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SET_Z_THERMAL_ADJUST" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SHAPER_CALIBRATE", + "catalog_id": "KGC-SHAPER_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SHAPER_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `SHAPER_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SHAPER_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SHAPER_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SKEW_PROFILE", + "catalog_id": "KGC-SKEW_PROFILE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SKEW_PROFILE", + "category": "klipper_module", + "purpose": "Klipper `SKEW_PROFILE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SKEW_PROFILE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SKEW_PROFILE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-STATUS", + "catalog_id": "KGC-STATUS", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "STATUS", + "category": "console", + "purpose": "Klipper `STATUS` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-STEPPER_BUZZ", + "catalog_id": "KGC-STEPPER_BUZZ", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "STEPPER_BUZZ", + "category": "klipper_module", + "purpose": "Klipper `STEPPER_BUZZ` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "STEPPER_BUZZ" + }, + "predicate": { + "type": "gcode_command_present", + "name": "STEPPER_BUZZ" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-SYNC_EXTRUDER_MOTION", + "catalog_id": "KGC-SYNC_EXTRUDER_MOTION", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "SYNC_EXTRUDER_MOTION", + "category": "klipper_module", + "purpose": "Klipper `SYNC_EXTRUDER_MOTION` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "SYNC_EXTRUDER_MOTION" + }, + "predicate": { + "type": "gcode_command_present", + "name": "SYNC_EXTRUDER_MOTION" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TEMPERATURE_PROBE_CALIBRATE", + "catalog_id": "KGC-TEMPERATURE_PROBE_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TEMPERATURE_PROBE_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `TEMPERATURE_PROBE_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "TEMPERATURE_PROBE_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "TEMPERATURE_PROBE_CALIBRATE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TEMPERATURE_PROBE_ENABLE", + "catalog_id": "KGC-TEMPERATURE_PROBE_ENABLE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TEMPERATURE_PROBE_ENABLE", + "category": "klipper_module", + "purpose": "Klipper `TEMPERATURE_PROBE_ENABLE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "TEMPERATURE_PROBE_ENABLE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "TEMPERATURE_PROBE_ENABLE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TEMPERATURE_PROBE_NEXT", + "catalog_id": "KGC-TEMPERATURE_PROBE_NEXT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TEMPERATURE_PROBE_NEXT", + "category": "klipper_module", + "purpose": "Klipper `TEMPERATURE_PROBE_NEXT` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "TEMPERATURE_PROBE_NEXT" + }, + "predicate": { + "type": "gcode_command_present", + "name": "TEMPERATURE_PROBE_NEXT" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TEMPERATURE_WAIT", + "catalog_id": "KGC-TEMPERATURE_WAIT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TEMPERATURE_WAIT", + "category": "temperature", + "purpose": "Klipper `TEMPERATURE_WAIT` command from the official G-Code reference.", + "params": [ + "SENSOR", + "MINIMUM", + "MAXIMUM" + ], + "key_params": [ + "SENSOR", + "MINIMUM", + "MAXIMUM" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "any_object_present", + "names": [ + "extruder", + "heater_bed" + ] + }, + "predicate": { + "type": "any_object_present", + "names": [ + "extruder", + "heater_bed" + ] + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TEST_RESONANCES", + "catalog_id": "KGC-TEST_RESONANCES", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TEST_RESONANCES", + "category": "klipper_module", + "purpose": "Klipper `TEST_RESONANCES` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "TEST_RESONANCES" + }, + "predicate": { + "type": "gcode_command_present", + "name": "TEST_RESONANCES" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TUNING_TOWER", + "catalog_id": "KGC-TUNING_TOWER", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TUNING_TOWER", + "category": "klipper_module", + "purpose": "Klipper `TUNING_TOWER` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "TUNING_TOWER" + }, + "predicate": { + "type": "gcode_command_present", + "name": "TUNING_TOWER" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-TURN_OFF_HEATERS", + "catalog_id": "KGC-TURN_OFF_HEATERS", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TURN_OFF_HEATERS", + "category": "temperature", + "purpose": "Klipper `TURN_OFF_HEATERS` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "any_object_present", + "names": [ + "extruder", + "heater_bed" + ] + }, + "predicate": { + "type": "any_object_present", + "names": [ + "extruder", + "heater_bed" + ] + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-T_SELECT_TOOL", + "catalog_id": "KGC-T_SELECT_TOOL", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "T", + "category": "extrusion", + "purpose": "Select active tool by numeric index.", + "params": [ + "tool index" + ], + "key_params": [ + "tool index" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "extruder" + }, + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-UNLOAD_FILAMENT", + "catalog_id": "KGC-UNLOAD_FILAMENT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "UNLOAD_FILAMENT", + "category": "macro", + "purpose": "Run the user-defined `UNLOAD_FILAMENT` macro when present.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/Command_Templates.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "macro_present", + "name": "UNLOAD_FILAMENT" + }, + "predicate": { + "type": "macro_present", + "name": "UNLOAD_FILAMENT" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-UPDATE_DELAYED_GCODE", + "catalog_id": "KGC-UPDATE_DELAYED_GCODE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "UPDATE_DELAYED_GCODE", + "category": "klipper_module", + "purpose": "Klipper `UPDATE_DELAYED_GCODE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "UPDATE_DELAYED_GCODE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "UPDATE_DELAYED_GCODE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-Z_ENDSTOP_CALIBRATE", + "catalog_id": "KGC-Z_ENDSTOP_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "Z_ENDSTOP_CALIBRATE", + "category": "klipper_module", + "purpose": "Klipper `Z_ENDSTOP_CALIBRATE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "Z_ENDSTOP_CALIBRATE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "Z_ENDSTOP_CALIBRATE" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-Z_OFFSET_APPLY_ENDSTOP", + "catalog_id": "KGC-Z_OFFSET_APPLY_ENDSTOP", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "Z_OFFSET_APPLY_ENDSTOP", + "category": "klipper_module", + "purpose": "Klipper `Z_OFFSET_APPLY_ENDSTOP` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "Z_OFFSET_APPLY_ENDSTOP" + }, + "predicate": { + "type": "gcode_command_present", + "name": "Z_OFFSET_APPLY_ENDSTOP" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-Z_OFFSET_APPLY_PROBE", + "catalog_id": "KGC-Z_OFFSET_APPLY_PROBE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "Z_OFFSET_APPLY_PROBE", + "category": "klipper_module", + "purpose": "Klipper `Z_OFFSET_APPLY_PROBE` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "gcode_command_present", + "name": "Z_OFFSET_APPLY_PROBE" + }, + "predicate": { + "type": "gcode_command_present", + "name": "Z_OFFSET_APPLY_PROBE" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-Z_TILT_ADJUST", + "catalog_id": "KGC-Z_TILT_ADJUST", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "Z_TILT_ADJUST", + "category": "calibration", + "purpose": "Klipper `Z_TILT_ADJUST` command from the official G-Code reference.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "z_tilt" + }, + "predicate": { + "type": "object_present", + "name": "z_tilt" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "MR-access.delete_user", + "catalog_id": "MR-access.delete_user", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.delete_user", + "category": "authorization", + "purpose": "Moonraker `access.delete_user` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.get_api_key", + "catalog_id": "MR-access.get_api_key", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.get_api_key", + "category": "authorization", + "purpose": "Moonraker `access.get_api_key` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.get_user", + "catalog_id": "MR-access.get_user", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.get_user", + "category": "authorization", + "purpose": "Moonraker `access.get_user` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.info", + "catalog_id": "MR-access.info", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.info", + "category": "authorization", + "purpose": "Moonraker `access.info` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.login", + "catalog_id": "MR-access.login", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.login", + "category": "authorization", + "purpose": "Moonraker `access.login` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.logout", + "catalog_id": "MR-access.logout", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.logout", + "category": "authorization", + "purpose": "Moonraker `access.logout` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.oneshot_token", + "catalog_id": "MR-access.oneshot_token", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.oneshot_token", + "category": "auth", + "purpose": "Request a short-lived token for websocket/download access when auth is required.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.post_api_key", + "catalog_id": "MR-access.post_api_key", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.post_api_key", + "category": "authorization", + "purpose": "Moonraker `access.post_api_key` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.post_user", + "catalog_id": "MR-access.post_user", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.post_user", + "category": "authorization", + "purpose": "Moonraker `access.post_user` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.refresh_jwt", + "catalog_id": "MR-access.refresh_jwt", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.refresh_jwt", + "category": "authorization", + "purpose": "Moonraker `access.refresh_jwt` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.user.password", + "catalog_id": "MR-access.user.password", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.user.password", + "category": "authorization", + "purpose": "Moonraker `access.user.password` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-access.users.list", + "catalog_id": "MR-access.users.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "access.users.list", + "category": "authorization", + "purpose": "Moonraker `access.users.list` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/authorization/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-debug.database.delete_item", + "catalog_id": "MR-debug.database.delete_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "debug.database.delete_item", + "category": "database", + "purpose": "Moonraker `debug.database.delete_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-debug.database.get_item", + "catalog_id": "MR-debug.database.get_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "debug.database.get_item", + "category": "database", + "purpose": "Moonraker `debug.database.get_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-debug.database.list", + "catalog_id": "MR-debug.database.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "debug.database.list", + "category": "database", + "purpose": "Moonraker `debug.database.list` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-debug.database.post_item", + "catalog_id": "MR-debug.database.post_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "debug.database.post_item", + "category": "database", + "purpose": "Moonraker `debug.database.post_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-debug.database.table", + "catalog_id": "MR-debug.database.table", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "debug.database.table", + "category": "database", + "purpose": "Moonraker `debug.database.table` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-debug.notifiers.test", + "catalog_id": "MR-debug.notifiers.test", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "debug.notifiers.test", + "category": "integrations", + "purpose": "Moonraker `debug.notifiers.test` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.device_power.devices", + "catalog_id": "MR-machine.device_power.devices", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.device_power.devices", + "category": "devices", + "purpose": "Moonraker `machine.device_power.devices` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.device_power.get_device", + "catalog_id": "MR-machine.device_power.get_device", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.device_power.get_device", + "category": "devices", + "purpose": "Moonraker `machine.device_power.get_device` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.device_power.off", + "catalog_id": "MR-machine.device_power.off", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.device_power.off", + "category": "devices", + "purpose": "Moonraker `machine.device_power.off` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.device_power.on", + "catalog_id": "MR-machine.device_power.on", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.device_power.on", + "category": "devices", + "purpose": "Moonraker `machine.device_power.on` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.device_power.post_device", + "catalog_id": "MR-machine.device_power.post_device", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.device_power.post_device", + "category": "devices", + "purpose": "Moonraker `machine.device_power.post_device` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.device_power.status", + "catalog_id": "MR-machine.device_power.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.device_power.status", + "category": "devices", + "purpose": "Moonraker `machine.device_power.status` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.peripherals.canbus", + "catalog_id": "MR-machine.peripherals.canbus", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.peripherals.canbus", + "category": "machine", + "purpose": "Moonraker `machine.peripherals.canbus` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.peripherals.serial", + "catalog_id": "MR-machine.peripherals.serial", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.peripherals.serial", + "category": "machine", + "purpose": "Moonraker `machine.peripherals.serial` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.peripherals.usb", + "catalog_id": "MR-machine.peripherals.usb", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.peripherals.usb", + "category": "machine", + "purpose": "Moonraker `machine.peripherals.usb` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.peripherals.video", + "catalog_id": "MR-machine.peripherals.video", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.peripherals.video", + "category": "machine", + "purpose": "Moonraker `machine.peripherals.video` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.proc_stats", + "catalog_id": "MR-machine.proc_stats", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.proc_stats", + "category": "machine", + "purpose": "Moonraker `machine.proc_stats` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 20 System Information)." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.reboot", + "catalog_id": "MR-machine.reboot", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.reboot", + "category": "machine", + "purpose": "Moonraker `machine.reboot` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.services.restart", + "catalog_id": "MR-machine.services.restart", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.services.restart", + "category": "machine", + "purpose": "Moonraker `machine.services.restart` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.services.start", + "catalog_id": "MR-machine.services.start", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.services.start", + "category": "machine", + "purpose": "Moonraker `machine.services.start` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.services.stop", + "catalog_id": "MR-machine.services.stop", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.services.stop", + "category": "machine", + "purpose": "Moonraker `machine.services.stop` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.shutdown", + "catalog_id": "MR-machine.shutdown", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.shutdown", + "category": "machine", + "purpose": "Moonraker `machine.shutdown` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.sudo.info", + "catalog_id": "MR-machine.sudo.info", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.sudo.info", + "category": "machine", + "purpose": "Moonraker `machine.sudo.info` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.sudo.password", + "catalog_id": "MR-machine.sudo.password", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.sudo.password", + "category": "machine", + "purpose": "Moonraker `machine.sudo.password` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.system_info", + "catalog_id": "MR-machine.system_info", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.system_info", + "category": "machine", + "purpose": "Moonraker `machine.system_info` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/machine/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 20 System Information)." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.td1.data", + "catalog_id": "MR-machine.td1.data", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.td1.data", + "category": "integrations", + "purpose": "Moonraker `machine.td1.data` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.td1.reboot", + "catalog_id": "MR-machine.td1.reboot", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.td1.reboot", + "category": "integrations", + "purpose": "Moonraker `machine.td1.reboot` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.client", + "catalog_id": "MR-machine.update.client", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.client", + "category": "update_manager", + "purpose": "Moonraker `machine.update.client` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.full", + "catalog_id": "MR-machine.update.full", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.full", + "category": "update_manager", + "purpose": "Moonraker `machine.update.full` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.klipper", + "catalog_id": "MR-machine.update.klipper", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.klipper", + "category": "update_manager", + "purpose": "Moonraker `machine.update.klipper` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.moonraker", + "catalog_id": "MR-machine.update.moonraker", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.moonraker", + "category": "update_manager", + "purpose": "Moonraker `machine.update.moonraker` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.recover", + "catalog_id": "MR-machine.update.recover", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.recover", + "category": "update_manager", + "purpose": "Moonraker `machine.update.recover` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.refresh", + "catalog_id": "MR-machine.update.refresh", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.refresh", + "category": "update_manager", + "purpose": "Moonraker `machine.update.refresh` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.rollback", + "catalog_id": "MR-machine.update.rollback", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.rollback", + "category": "update_manager", + "purpose": "Moonraker `machine.update.rollback` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.status", + "catalog_id": "MR-machine.update.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.status", + "category": "update_manager", + "purpose": "Moonraker `machine.update.status` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.system", + "catalog_id": "MR-machine.update.system", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.system", + "category": "update_manager", + "purpose": "Moonraker `machine.update.system` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.update.upgrade", + "catalog_id": "MR-machine.update.upgrade", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.update.upgrade", + "category": "update_manager", + "purpose": "Moonraker `machine.update.upgrade` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/update_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.get_strip", + "catalog_id": "MR-machine.wled.get_strip", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.get_strip", + "category": "devices", + "purpose": "Moonraker `machine.wled.get_strip` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.off", + "catalog_id": "MR-machine.wled.off", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.off", + "category": "devices", + "purpose": "Moonraker `machine.wled.off` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.on", + "catalog_id": "MR-machine.wled.on", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.on", + "category": "devices", + "purpose": "Moonraker `machine.wled.on` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.post_strip", + "catalog_id": "MR-machine.wled.post_strip", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.post_strip", + "category": "devices", + "purpose": "Moonraker `machine.wled.post_strip` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.status", + "catalog_id": "MR-machine.wled.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.status", + "category": "devices", + "purpose": "Moonraker `machine.wled.status` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.strips", + "catalog_id": "MR-machine.wled.strips", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.strips", + "category": "devices", + "purpose": "Moonraker `machine.wled.strips` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-machine.wled.toggle", + "catalog_id": "MR-machine.wled.toggle", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "machine.wled.toggle", + "category": "devices", + "purpose": "Moonraker `machine.wled.toggle` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.emergency_stop", + "catalog_id": "MR-printer.emergency_stop", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.emergency_stop", + "category": "action", + "purpose": "Emergency-stop Klippy from Dinghy confirm guard.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.firmware_restart", + "catalog_id": "MR-printer.firmware_restart", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.firmware_restart", + "category": "recovery", + "purpose": "Restart Klipper firmware from recovery UI.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.gcode.help", + "catalog_id": "MR-printer.gcode.help", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.gcode.help", + "category": "console", + "purpose": "Read positive help text for available G-Code commands.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.gcode.script", + "catalog_id": "MR-printer.gcode.script", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.gcode.script", + "category": "action", + "purpose": "Run Klipper G-Code through Moonraker.", + "params": [ + "script" + ], + "key_params": [ + "script" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.info", + "catalog_id": "MR-printer.info", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.info", + "category": "printer", + "purpose": "Read Klippy connection and printer software state.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (2026-06-15) — one-shot read of hostname to seed an un-named profile's name." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.objects.list", + "catalog_id": "MR-printer.objects.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.objects.list", + "category": "state", + "purpose": "List available Klipper status objects for live capability derivation.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.objects.query", + "catalog_id": "MR-printer.objects.query", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.objects.query", + "category": "state", + "purpose": "Read a point-in-time status snapshot for selected Klipper objects.", + "params": [ + "objects" + ], + "key_params": [ + "objects" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.objects.subscribe", + "catalog_id": "MR-printer.objects.subscribe", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.objects.subscribe", + "category": "state", + "purpose": "Subscribe to printer status diffs for selected Klipper objects.", + "params": [ + "objects" + ], + "key_params": [ + "objects" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.print.cancel", + "catalog_id": "MR-printer.print.cancel", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.print.cancel", + "category": "print_control", + "purpose": "Cancel the active print.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the print-control JSON-RPC request; Dinghy does not treat the acknowledgement alone as user-visible success.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy treats the request acknowledgement as transport success only; user-visible success is confirmed when print_stats.state reports cancelled or leaves the active printing state." + }, + { + "id": "MR-printer.print.pause", + "catalog_id": "MR-printer.print.pause", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.print.pause", + "category": "print_control", + "purpose": "Pause the active print.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the print-control JSON-RPC request; Dinghy does not treat the acknowledgement alone as user-visible success.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy treats the request acknowledgement as transport success only; user-visible success is confirmed when print_stats.state becomes paused and pause_resume.is_paused is true." + }, + { + "id": "MR-printer.print.resume", + "catalog_id": "MR-printer.print.resume", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.print.resume", + "category": "print_control", + "purpose": "Resume a paused print.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the print-control JSON-RPC request; Dinghy does not treat the acknowledgement alone as user-visible success.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy treats the request acknowledgement as transport success only; user-visible success is confirmed when print_stats.state returns to printing and pause_resume.is_paused is false." + }, + { + "id": "MR-printer.print.start", + "catalog_id": "MR-printer.print.start", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.print.start", + "category": "print_control", + "purpose": "Start printing a gcode file.", + "params": [ + "filename" + ], + "key_params": [ + "filename" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the print-control JSON-RPC request; Dinghy does not treat the acknowledgement alone as user-visible success.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy treats the request acknowledgement as transport success only; user-visible success is confirmed from print_stats.filename/state and virtual_sdcard progress after the printer reports the new job." + }, + { + "id": "MR-printer.query_endstops.status", + "catalog_id": "MR-printer.query_endstops.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.query_endstops.status", + "category": "printer", + "purpose": "Read the current trigger state (open/TRIGGERED) of each configured endstop.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for the Move → Endstops live poll." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-printer.restart", + "catalog_id": "MR-printer.restart", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "printer.restart", + "category": "recovery", + "purpose": "Restart Klippy host process from recovery UI.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/printer/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.analysis.dump_config", + "catalog_id": "MR-server.analysis.dump_config", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.analysis.dump_config", + "category": "integrations", + "purpose": "Moonraker `server.analysis.dump_config` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.analysis.estimate", + "catalog_id": "MR-server.analysis.estimate", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.analysis.estimate", + "category": "integrations", + "purpose": "Moonraker `server.analysis.estimate` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.analysis.process", + "catalog_id": "MR-server.analysis.process", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.analysis.process", + "category": "integrations", + "purpose": "Moonraker `server.analysis.process` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.analysis.status", + "catalog_id": "MR-server.analysis.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.analysis.status", + "category": "integrations", + "purpose": "Moonraker `server.analysis.status` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.config", + "catalog_id": "MR-server.config", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.config", + "category": "server", + "purpose": "Moonraker `server.config` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.connection.identify", + "catalog_id": "MR-server.connection.identify", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.connection.identify", + "category": "connection", + "purpose": "Identify Dinghy as a Moonraker websocket client before subscriptions.", + "params": [ + "client_name", + "version", + "type", + "url", + "api_key" + ], + "key_params": [ + "client_name", + "version", + "type", + "url", + "api_key" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.compact", + "catalog_id": "MR-server.database.compact", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.compact", + "category": "database", + "purpose": "Moonraker `server.database.compact` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.delete_backup", + "catalog_id": "MR-server.database.delete_backup", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.delete_backup", + "category": "database", + "purpose": "Moonraker `server.database.delete_backup` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.delete_item", + "catalog_id": "MR-server.database.delete_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.delete_item", + "category": "database", + "purpose": "Moonraker `server.database.delete_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.get_item", + "catalog_id": "MR-server.database.get_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.get_item", + "category": "database", + "purpose": "Moonraker `server.database.get_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.list", + "catalog_id": "MR-server.database.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.list", + "category": "database", + "purpose": "Moonraker `server.database.list` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.post_backup", + "catalog_id": "MR-server.database.post_backup", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.post_backup", + "category": "database", + "purpose": "Moonraker `server.database.post_backup` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.post_item", + "catalog_id": "MR-server.database.post_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.post_item", + "category": "database", + "purpose": "Moonraker `server.database.post_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.database.restore", + "catalog_id": "MR-server.database.restore", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.database.restore", + "category": "database", + "purpose": "Moonraker `server.database.restore` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/database/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.copy", + "catalog_id": "MR-server.files.copy", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.copy", + "category": "file_manager", + "purpose": "Moonraker `server.files.copy` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.delete_directory", + "catalog_id": "MR-server.files.delete_directory", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.delete_directory", + "category": "file_manager", + "purpose": "Moonraker `server.files.delete_directory` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.delete_file", + "catalog_id": "MR-server.files.delete_file", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.delete_file", + "category": "files", + "purpose": "Delete a file from an allowed Moonraker root.", + "params": [ + "path" + ], + "key_params": [ + "path" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "file_manager" + }, + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the file-manager JSON-RPC request; Dinghy validates user-visible success through holder state.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy confirms delete success from a refreshed directory listing that no longer contains the deleted file." + }, + { + "id": "MR-server.files.get_directory", + "catalog_id": "MR-server.files.get_directory", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.get_directory", + "category": "files", + "purpose": "Browse one directory without walking the entire root.", + "params": [ + "path", + "extended" + ], + "key_params": [ + "path", + "extended" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "file_manager" + }, + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the file-manager JSON-RPC request; Dinghy validates user-visible success through holder state.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy confirms browse success from the returned directory payload rendered by the Files holder; malformed or missing data degrades to empty state." + }, + { + "id": "MR-server.files.list", + "catalog_id": "MR-server.files.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.list", + "category": "files", + "purpose": "List files under a registered root.", + "params": [ + "root" + ], + "key_params": [ + "root" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "file_manager" + }, + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.metadata", + "catalog_id": "MR-server.files.metadata", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.metadata", + "category": "files", + "purpose": "Read slicer metadata and thumbnails for a selected gcode file.", + "params": [ + "filename" + ], + "key_params": [ + "filename" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "file_manager" + }, + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.metascan", + "catalog_id": "MR-server.files.metascan", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.metascan", + "category": "file_manager", + "purpose": "Moonraker `server.files.metascan` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.move", + "catalog_id": "MR-server.files.move", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.move", + "category": "file_manager", + "purpose": "Moonraker `server.files.move` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.post_directory", + "catalog_id": "MR-server.files.post_directory", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.post_directory", + "category": "file_manager", + "purpose": "Moonraker `server.files.post_directory` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.roots", + "catalog_id": "MR-server.files.roots", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.roots", + "category": "files", + "purpose": "List registered file roots.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "file_manager" + }, + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.files.thumbnails", + "catalog_id": "MR-server.files.thumbnails", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.thumbnails", + "category": "files", + "purpose": "Read thumbnail details for a gcode file.", + "params": [ + "filename" + ], + "key_params": [ + "filename" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "file_manager" + }, + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for Phase 7 runtime sends." + }, + "success_semantics": "Moonraker acknowledges receipt of the file-manager JSON-RPC request; Dinghy validates user-visible success through holder state.", + "error_semantics": "Moonraker JSON-RPC errors are surfaced by JsonRpcClient or CommandDispatcher without fabricating success.", + "acceptance_semantics": "Dinghy confirms thumbnail availability from returned thumbnail metadata; absence degrades to a non-blocking fallback image state." + }, + { + "id": "MR-server.files.zip", + "catalog_id": "MR-server.files.zip", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.files.zip", + "category": "file_manager", + "purpose": "Moonraker `server.files.zip` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/file_manager/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.gcode_store", + "catalog_id": "MR-server.gcode_store", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.gcode_store", + "category": "console", + "purpose": "Read cached G-Code responses for console backfill.", + "params": [ + "count" + ], + "key_params": [ + "count" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered in Phase 08-04: one-shot console-history backfill (CONS-02 / D-02) on every (re)connect and notify_klippy_ready re-handshake." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.history.delete_job", + "catalog_id": "MR-server.history.delete_job", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.history.delete_job", + "category": "history", + "purpose": "Moonraker `server.history.delete_job` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/history/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.history.get_job", + "catalog_id": "MR-server.history.get_job", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.history.get_job", + "category": "history", + "purpose": "Moonraker `server.history.get_job` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/history/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.history.list", + "catalog_id": "MR-server.history.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.history.list", + "category": "history", + "purpose": "Read recent print history for the idle Status last-job card.", + "params": [ + "limit", + "order" + ], + "key_params": [ + "limit", + "order" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/history/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "history" + }, + "predicate": { + "type": "component_present", + "name": "history" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.history.reset_totals", + "catalog_id": "MR-server.history.reset_totals", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.history.reset_totals", + "category": "history", + "purpose": "Moonraker `server.history.reset_totals` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/history/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.history.totals", + "catalog_id": "MR-server.history.totals", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.history.totals", + "category": "history", + "purpose": "Moonraker `server.history.totals` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/history/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.info", + "catalog_id": "MR-server.info", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.info", + "category": "server", + "purpose": "Read server metadata and component names for live component predicates.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.job_queue.delete_job", + "catalog_id": "MR-server.job_queue.delete_job", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.job_queue.delete_job", + "category": "job_queue", + "purpose": "Moonraker `server.job_queue.delete_job` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.job_queue.jump", + "catalog_id": "MR-server.job_queue.jump", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.job_queue.jump", + "category": "job_queue", + "purpose": "Moonraker `server.job_queue.jump` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.job_queue.pause", + "catalog_id": "MR-server.job_queue.pause", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.job_queue.pause", + "category": "job_queue", + "purpose": "Moonraker `server.job_queue.pause` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.job_queue.post_job", + "catalog_id": "MR-server.job_queue.post_job", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.job_queue.post_job", + "category": "job_queue", + "purpose": "Moonraker `server.job_queue.post_job` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.job_queue.start", + "catalog_id": "MR-server.job_queue.start", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.job_queue.start", + "category": "job_queue", + "purpose": "Moonraker `server.job_queue.start` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.job_queue.status", + "catalog_id": "MR-server.job_queue.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.job_queue.status", + "category": "job_queue", + "purpose": "Moonraker `server.job_queue.status` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/job_queue/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.logs.rollover", + "catalog_id": "MR-server.logs.rollover", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.logs.rollover", + "category": "server", + "purpose": "Moonraker `server.logs.rollover` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.mqtt.publish", + "catalog_id": "MR-server.mqtt.publish", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.mqtt.publish", + "category": "devices", + "purpose": "Moonraker `server.mqtt.publish` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.mqtt.subscribe", + "catalog_id": "MR-server.mqtt.subscribe", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.mqtt.subscribe", + "category": "devices", + "purpose": "Moonraker `server.mqtt.subscribe` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.notifiers.list", + "catalog_id": "MR-server.notifiers.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.notifiers.list", + "category": "integrations", + "purpose": "Moonraker `server.notifiers.list` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.restart", + "catalog_id": "MR-server.restart", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.restart", + "category": "server", + "purpose": "Moonraker `server.restart` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.sensors.info", + "catalog_id": "MR-server.sensors.info", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.sensors.info", + "category": "devices", + "purpose": "Moonraker `server.sensors.info` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.sensors.list", + "catalog_id": "MR-server.sensors.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.sensors.list", + "category": "devices", + "purpose": "Moonraker `server.sensors.list` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.sensors.measurements", + "catalog_id": "MR-server.sensors.measurements", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.sensors.measurements", + "category": "devices", + "purpose": "Moonraker `server.sensors.measurements` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/devices/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.spoolman.get_spool_id", + "catalog_id": "MR-server.spoolman.get_spool_id", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.spoolman.get_spool_id", + "category": "spoolman", + "purpose": "Read active spool ID from Moonraker Spoolman integration.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.spoolman.post_spool_id", + "catalog_id": "MR-server.spoolman.post_spool_id", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.spoolman.post_spool_id", + "category": "spoolman", + "purpose": "Set active spool ID through Moonraker Spoolman integration.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.spoolman.proxy", + "catalog_id": "MR-server.spoolman.proxy", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.spoolman.proxy", + "category": "spoolman", + "purpose": "Proxy Spoolman REST requests through Moonraker.", + "params": [ + "request_method", + "path", + "body" + ], + "key_params": [ + "request_method", + "path", + "body" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.spoolman.status", + "catalog_id": "MR-server.spoolman.status", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.spoolman.status", + "category": "spoolman", + "purpose": "Read Moonraker Spoolman integration status.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/integrations/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.temperature_store", + "catalog_id": "MR-server.temperature_store", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.temperature_store", + "category": "history", + "purpose": "Read cached temperature history for graph backfill.", + "params": [ + "include_monitors" + ], + "key_params": [ + "include_monitors" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "history" + }, + "predicate": { + "type": "component_present", + "name": "history" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.webcams.delete_item", + "catalog_id": "MR-server.webcams.delete_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.webcams.delete_item", + "category": "webcams", + "purpose": "Moonraker `server.webcams.delete_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/webcams/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.webcams.get_item", + "catalog_id": "MR-server.webcams.get_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.webcams.get_item", + "category": "webcam", + "purpose": "Read one webcam configuration.", + "params": [ + "uid" + ], + "key_params": [ + "uid" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/webcams/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "webcam" + }, + "predicate": { + "type": "component_present", + "name": "webcam" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.webcams.list", + "catalog_id": "MR-server.webcams.list", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.webcams.list", + "category": "webcam", + "purpose": "List configured webcams.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/webcams/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered (Phase 10, plan 10-03) as CommandRegistry.webcamsList \u2014 a paramless one-shot edge-driven enumeration fetched once per handshake. NO availability predicate (D-08): the webcam component is universal on E5/E3, so the command is unconditional and the drawer tile is greyed on cam-count==0 instead of being command-gated." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "The spine forwards the enumeration as SpineHandle.webcams; a rejected/absent read leaves the list empty (greyed tile), never crashes." + }, + { + "id": "MR-server.webcams.post_item", + "catalog_id": "MR-server.webcams.post_item", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.webcams.post_item", + "category": "webcams", + "purpose": "Moonraker `server.webcams.post_item` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/webcams/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.webcams.test", + "catalog_id": "MR-server.webcams.test", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.webcams.test", + "category": "webcam", + "purpose": "Test a configured webcam.", + "params": [ + "uid" + ], + "key_params": [ + "uid" + ], + "semantics_tier": "full", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/webcams/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "webcam" + }, + "predicate": { + "type": "component_present", + "name": "webcam" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "MR-server.websocket.id", + "catalog_id": "MR-server.websocket.id", + "source_api": "moonraker", + "transport": "json_rpc", + "name": "server.websocket.id", + "category": "server", + "purpose": "Moonraker `server.websocket.id` operation from the official external API documentation.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://moonraker.readthedocs.io/en/latest/external_api/server/", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "always" + }, + "predicate": { + "type": "always" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Moonraker returns a JSON-RPC result or HTTP result body for successful requests.", + "error_semantics": "Moonraker returns JSON-RPC error or HTTP error response when unavailable, unauthorized, or invalid.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-DELETE-field-by-entity-type-by-key", + "catalog_id": "SPM-DELETE-field-by-entity-type-by-key", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "DELETE /api/v1/field/{entity_type}/{key}", + "category": "field", + "purpose": "Delete an extra field for a specific entity type. Returns the full list of extra fields for the entity type.", + "params": [ + "entity_type", + "key" + ], + "key_params": [ + "entity_type", + "key" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/field/{entity_type}/{key}", + "http_method": "DELETE", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-DELETE-filament-by-id", + "catalog_id": "SPM-DELETE-filament-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "DELETE /api/v1/filament/{filament_id}", + "category": "filament", + "purpose": "Delete a filament.", + "params": [ + "filament_id" + ], + "key_params": [ + "filament_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/filament/{filament_id}", + "http_method": "DELETE", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-DELETE-spool-by-id", + "catalog_id": "SPM-DELETE-spool-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "DELETE /api/v1/spool/{spool_id}", + "category": "spool", + "purpose": "Delete a spool.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool/{spool_id}", + "http_method": "DELETE", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-DELETE-vendor-by-id", + "catalog_id": "SPM-DELETE-vendor-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "DELETE /api/v1/vendor/{vendor_id}", + "category": "vendor", + "purpose": "Delete a vendor. The vendor attribute of any filaments who refer to the deleted vendor will be cleared.", + "params": [ + "vendor_id" + ], + "key_params": [ + "vendor_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/vendor/{vendor_id}", + "http_method": "DELETE", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-article-number", + "catalog_id": "SPM-GET-article-number", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/article-number", + "category": "article-number", + "purpose": "Get a list of all article numbers.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/article-number", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-export-filaments", + "catalog_id": "SPM-GET-export-filaments", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/export/filaments", + "category": "export", + "purpose": "Export the list of filaments in various formats. Vendor data is included.", + "params": [ + "fmt" + ], + "key_params": [ + "fmt" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/export/filaments", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-export-spools", + "catalog_id": "SPM-GET-export-spools", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/export/spools", + "category": "export", + "purpose": "Export the list of spools in various formats. Filament and vendor data is included.", + "params": [ + "fmt" + ], + "key_params": [ + "fmt" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/export/spools", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-export-vendors", + "catalog_id": "SPM-GET-export-vendors", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/export/vendors", + "category": "export", + "purpose": "Export the list of vendors in various formats.", + "params": [ + "fmt" + ], + "key_params": [ + "fmt" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/export/vendors", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-external-filament", + "catalog_id": "SPM-GET-external-filament", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/external/filament", + "category": "external", + "purpose": "Get all external filaments.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/external/filament", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-external-material", + "catalog_id": "SPM-GET-external-material", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/external/material", + "category": "external", + "purpose": "Get all external materials.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/external/material", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-field-by-entity-type", + "catalog_id": "SPM-GET-field-by-entity-type", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/field/{entity_type}", + "category": "field", + "purpose": "Get all extra fields for a specific entity type.", + "params": [ + "entity_type" + ], + "key_params": [ + "entity_type" + ], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/field/{entity_type}", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-filament", + "catalog_id": "SPM-GET-filament", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/filament", + "category": "filament", + "purpose": "Get a list of filaments that matches the search query. A websocket is served on the same path to listen for updates to any filament, or added or deleted filaments. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "vendor_name", + "vendor_id", + "vendor.name", + "vendor.id", + "name", + "material", + "article_number", + "color_hex", + "color_similarity_threshold", + "external_id", + "sort", + "limit", + "offset" + ], + "key_params": [ + "vendor_name", + "vendor_id", + "vendor.name", + "vendor.id", + "name", + "material", + "article_number", + "color_hex", + "color_similarity_threshold", + "external_id", + "sort", + "limit", + "offset" + ], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/filament", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-filament-by-id", + "catalog_id": "SPM-GET-filament-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/filament/{filament_id}", + "category": "filament", + "purpose": "Get a specific filament. A websocket is served on the same path to listen for changes to the filament. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "filament_id" + ], + "key_params": [ + "filament_id" + ], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/filament/{filament_id}", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-health", + "catalog_id": "SPM-GET-health", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/health", + "category": "health", + "purpose": "Return a health check.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/health", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-info", + "catalog_id": "SPM-GET-info", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/info", + "category": "info", + "purpose": "Return general info about the API.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/info", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-location", + "catalog_id": "SPM-GET-location", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/location", + "category": "location", + "purpose": "Get a list of all spool locations.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/location", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-lot-number", + "catalog_id": "SPM-GET-lot-number", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/lot-number", + "category": "lot-number", + "purpose": "Get a list of all lot numbers.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/lot-number", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-material", + "catalog_id": "SPM-GET-material", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/material", + "category": "material", + "purpose": "Get a list of all filament materials.", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/material", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-setting", + "catalog_id": "SPM-GET-setting", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/setting/", + "category": "setting", + "purpose": "Get all settings, set or not. If the setting has not been set, 'value' will be the default value.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/setting/", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-setting-by-key", + "catalog_id": "SPM-GET-setting-by-key", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/setting/{key}", + "category": "setting", + "purpose": "Get a specific setting. If the setting has not been set, the default value will be returned.A websocket is served on the same path to listen for changes to the setting. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "key" + ], + "key_params": [ + "key" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/setting/{key}", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-spool", + "catalog_id": "SPM-GET-spool", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/spool", + "category": "spool", + "purpose": "Get a list of spools that matches the search query. A websocket is served on the same path to listen for updates to any spool, or added or deleted spools. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "filament_name", + "filament_id", + "filament_material", + "vendor_name", + "vendor_id", + "filament.name", + "filament.id", + "filament.material", + "filament.vendor.name", + "filament.vendor.id", + "location", + "lot_nr", + "allow_archived", + "sort", + "limit", + "offset" + ], + "key_params": [ + "filament_name", + "filament_id", + "filament_material", + "vendor_name", + "vendor_id", + "filament.name", + "filament.id", + "filament.material", + "filament.vendor.name", + "filament.vendor.id", + "location", + "lot_nr", + "allow_archived", + "sort", + "limit", + "offset" + ], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-spool-by-id", + "catalog_id": "SPM-GET-spool-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/spool/{spool_id}", + "category": "spool", + "purpose": "Get a specific spool. A websocket is served on the same path to listen for changes to the spool. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool/{spool_id}", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-vendor", + "catalog_id": "SPM-GET-vendor", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/vendor", + "category": "vendor", + "purpose": "Get a list of vendors that matches the search query. A websocket is served on the same path to listen for updates to any vendor, or added or deleted vendors. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "name", + "external_id", + "sort", + "limit", + "offset" + ], + "key_params": [ + "name", + "external_id", + "sort", + "limit", + "offset" + ], + "semantics_tier": "full", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/vendor", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-GET-vendor-by-id", + "catalog_id": "SPM-GET-vendor-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "GET /api/v1/vendor/{vendor_id}", + "category": "vendor", + "purpose": "Get a specific vendor. A websocket is served on the same path to listen for changes to the vendor. See the HTTP Response code 299 for the content of the websocket messages.", + "params": [ + "vendor_id" + ], + "key_params": [ + "vendor_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/vendor/{vendor_id}", + "http_method": "GET", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PATCH-filament-by-id", + "catalog_id": "SPM-PATCH-filament-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PATCH /api/v1/filament/{filament_id}", + "category": "filament", + "purpose": "Update any attribute of a filament. Only fields specified in the request will be affected. If extra is set, all existing extra fields will be removed and replaced with the new ones.", + "params": [ + "filament_id" + ], + "key_params": [ + "filament_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/filament/{filament_id}", + "http_method": "PATCH", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PATCH-location-by-location", + "catalog_id": "SPM-PATCH-location-by-location", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PATCH /api/v1/location/{location}", + "category": "location", + "purpose": "Rename a spool location. All spools in this location will be moved to the new location.", + "params": [ + "location" + ], + "key_params": [ + "location" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/location/{location}", + "http_method": "PATCH", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PATCH-spool-by-id", + "catalog_id": "SPM-PATCH-spool-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PATCH /api/v1/spool/{spool_id}", + "category": "spool", + "purpose": "Update any attribute of a spool. Only fields specified in the request will be affected. remaining_weight and used_weight can't be set at the same time. If extra is set, all existing extra fields will be removed and replaced with the new ones.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool/{spool_id}", + "http_method": "PATCH", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PATCH-vendor-by-id", + "catalog_id": "SPM-PATCH-vendor-by-id", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PATCH /api/v1/vendor/{vendor_id}", + "category": "vendor", + "purpose": "Update any attribute of a vendor. Only fields specified in the request will be affected. If extra is set, all existing extra fields will be removed and replaced with the new ones.", + "params": [ + "vendor_id" + ], + "key_params": [ + "vendor_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/vendor/{vendor_id}", + "http_method": "PATCH", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-POST-backup", + "catalog_id": "SPM-POST-backup", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "POST /api/v1/backup", + "category": "backup", + "purpose": "Trigger a database backup. Only applicable for SQLite databases.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/backup", + "http_method": "POST", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-POST-field-by-entity-type-by-key", + "catalog_id": "SPM-POST-field-by-entity-type-by-key", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "POST /api/v1/field/{entity_type}/{key}", + "category": "field", + "purpose": "Add or update an extra field for a specific entity type. Returns the full list of extra fields for the entity type.", + "params": [ + "entity_type", + "key" + ], + "key_params": [ + "entity_type", + "key" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/field/{entity_type}/{key}", + "http_method": "POST", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-POST-filament", + "catalog_id": "SPM-POST-filament", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "POST /api/v1/filament", + "category": "filament", + "purpose": "Add a new filament to the database.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/filament", + "http_method": "POST", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-POST-setting-by-key", + "catalog_id": "SPM-POST-setting-by-key", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "POST /api/v1/setting/{key}", + "category": "setting", + "purpose": "Set the value of a setting. The body must match the JSON type of the setting. An empty body or a body containing only 'null' will reset the setting to its default value. The new value will be returned.", + "params": [ + "key" + ], + "key_params": [ + "key" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/setting/{key}", + "http_method": "POST", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-POST-spool", + "catalog_id": "SPM-POST-spool", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "POST /api/v1/spool", + "category": "spool", + "purpose": "Add a new spool to the database. Only specify either remaining_weight or used_weight. If no weight is set, the spool will be assumed to be full.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool", + "http_method": "POST", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-POST-vendor", + "catalog_id": "SPM-POST-vendor", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "POST /api/v1/vendor", + "category": "vendor", + "purpose": "Add a new vendor to the database.", + "params": [], + "key_params": [], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/vendor", + "http_method": "POST", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PUT-spool-by-id-measure", + "catalog_id": "SPM-PUT-spool-by-id-measure", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PUT /api/v1/spool/{spool_id}/measure", + "category": "spool", + "purpose": "Use some weight of filament from the spool. Specify the current gross weight of the spool.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool/{spool_id}/measure", + "http_method": "PUT", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PUT-spool-by-id-use", + "catalog_id": "SPM-PUT-spool-by-id-use", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PUT /api/v1/spool/{spool_id}/use", + "category": "spool", + "purpose": "Use some length or weight of filament from the spool. Specify either a length or a weight, not both.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool/{spool_id}/use", + "http_method": "PUT", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-PUT-spool-use", + "catalog_id": "SPM-PUT-spool-use", + "source_api": "spoolman", + "transport": "spoolman_rest", + "name": "PUT /api/v1/spool/{spool_id}/use", + "category": "spool", + "purpose": "Consume length or weight from a specific spool; stable alias for the Spoolman use endpoint.", + "params": [ + "spool_id" + ], + "key_params": [ + "spool_id" + ], + "semantics_tier": "light", + "upstream_url": "https://donkie.github.io/Spoolman/", + "rest_endpoint": "/api/v1/spool/{spool_id}/use", + "http_method": "PUT", + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "reference_only", + "registered": false, + "notes": "Official command/API surface cataloged for reference only; Dinghy v1 does not send it yet." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "SPM-QR-SPOOL", + "catalog_id": "SPM-QR-SPOOL", + "source_api": "spoolman", + "transport": "qr_payload", + "name": "web+spoolman:s-", + "category": "qr", + "purpose": "Parse official Spoolman spool QR payloads and full spool URLs for tablet-camera assign flow.", + "params": [ + "payload" + ], + "key_params": [ + "payload" + ], + "semantics_tier": "full", + "upstream_url": "https://github.com/Donkie/Spoolman/blob/master/client/src/pages/printing/spoolQrCodePrintingDialog.tsx", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "component_present", + "name": "spoolman" + }, + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "runtime_registry": { + "status": "planned_v1", + "registered": false, + "notes": "Planned v1 operation; later phases register runtime sends when implemented." + }, + "success_semantics": "Spoolman returns the documented REST response body for successful requests.", + "error_semantics": "Spoolman returns HTTP validation, not-found, or server errors as documented by its OpenAPI spec.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + }, + { + "id": "KGC-BED_MESH_PROFILE_SAVE", + "catalog_id": "KGC-BED_MESH_PROFILE_SAVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_PROFILE SAVE", + "category": "calibration", + "purpose": "Klipper `BED_MESH_PROFILE SAVE=` \u2014 save the active mesh into a named profile (D-10).", + "params": [ + "SAVE" + ], + "key_params": [ + "SAVE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-BED_MESH_PROFILE_LOAD", + "catalog_id": "KGC-BED_MESH_PROFILE_LOAD", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_PROFILE LOAD", + "category": "calibration", + "purpose": "Klipper `BED_MESH_PROFILE LOAD=` \u2014 load a saved mesh profile (D-10).", + "params": [ + "LOAD" + ], + "key_params": [ + "LOAD" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-BED_MESH_PROFILE_REMOVE", + "catalog_id": "KGC-BED_MESH_PROFILE_REMOVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "BED_MESH_PROFILE REMOVE", + "category": "calibration", + "purpose": "Klipper `BED_MESH_PROFILE REMOVE=` \u2014 remove a saved mesh profile (D-10).", + "params": [ + "REMOVE" + ], + "key_params": [ + "REMOVE" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-TESTZ", + "catalog_id": "KGC-TESTZ", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "TESTZ", + "category": "calibration", + "purpose": "Klipper `TESTZ Z=` \u2014 nudge Z within the manual-probe session (D-01).", + "params": [ + "Z" + ], + "key_params": [ + "Z" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "manual_probe" + }, + "predicate": { + "type": "object_present", + "name": "manual_probe" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-ACCEPT", + "catalog_id": "KGC-ACCEPT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "ACCEPT", + "category": "calibration", + "purpose": "Klipper `ACCEPT` \u2014 accept the current Z and conclude the manual-probe session (D-01).", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "manual_probe" + }, + "predicate": { + "type": "object_present", + "name": "manual_probe" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 9 calibration spine, 09-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-M106", + "catalog_id": "KGC-M106", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "M106", + "category": "motion", + "purpose": "Dinghy Fine-Tune part-cooling fan live-adjust (D-11).", + "params": [], + "key_params": [], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "fan" + }, + "predicate": { + "type": "object_present", + "name": "fan" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Registered runtime CommandSpec in CommandRegistry (Phase 17 Fine-Tune, 17-02)." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Registered runtime command: Dinghy sends this via CommandRegistry, gated by its availability predicate." + }, + { + "id": "KGC-G1_MOVE_TO", + "catalog_id": "KGC-G1_MOVE_TO", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "name": "G1 absolute move", + "category": "motion", + "purpose": "Dinghy bounded absolute move-to wrapper (Move Hub touch/scrubber moves).", + "params": [ + "X", + "Y", + "Z", + "F" + ], + "key_params": [ + "X", + "Y", + "Z", + "F" + ], + "semantics_tier": "full", + "upstream_url": "https://www.klipper3d.org/G-Codes.html", + "rest_endpoint": null, + "http_method": null, + "availability": { + "type": "object_present", + "name": "toolhead" + }, + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "runtime_registry": { + "status": "registered", + "registered": true, + "notes": "Present in CommandRegistry for current Dinghy runtime sends." + }, + "success_semantics": "Klipper accepts the G-Code script and reports follow-up state or response text when applicable.", + "error_semantics": "Klipper rejects invalid or unsafe commands with gcode error text.", + "acceptance_semantics": "Reference-only entries are not sent by Dinghy unless a later phase registers them." + } + ] +} diff --git a/docs/commands/printer-matrix.json b/docs/commands/printer-matrix.json new file mode 100644 index 00000000..144a9fcc --- /dev/null +++ b/docs/commands/printer-matrix.json @@ -0,0 +1,3485 @@ +{ + "schema_version": 2, + "generated_for_phase": "06-command-reference-capability-matrix", + "source_markdown": "docs/moonraker-capabilities.md", + "catalog_source": "docs/commands/catalog.json", + "captured_at": "2026-06-02T11:46:45Z", + "capture_approval": "Task 1 human-verify checkpoint approved by user on 2026-06-02 after successful read-only probes.", + "notes": [ + "Dev-facing evidence only; Dinghy runtime capability gating remains live and is never backed by static per-printer data.", + "Predicate evidence is intentionally machine-readable so tests never parse Markdown prose.", + "printer.gcode.help is positive evidence only; absence from help output is not interpreted as unsupported.", + "command_availability records registry commands only; broader catalog reference rows remain in catalog.json and source Markdown.", + "FORCE_MOVE availability is reconciled from gcode-help positives rather than a force_move status object." + ], + "printers": [ + { + "id": "ender5plus", + "display_name": "Ender 5 Plus", + "host": "ender5plus.local:7125", + "captured_at": "2026-06-02T11:46:45Z", + "capture": { + "date": "2026-06-02", + "captured_at": "2026-06-02T11:46:45Z", + "klipper": "v0.13.0-662-gbd99b19b-dirty", + "klipper_version": "v0.13.0-662-gbd99b19b-dirty", + "moonraker": "v0.10.0-20-g9008485", + "moonraker_version": "v0.10.0-20-g9008485", + "moonraker_api": "1.5.0", + "api_version": "1.5.0", + "slicer": "OrcaSlicer 2.4", + "source": "approved live read-only probe refresh on 2026-06-02" + }, + "endpoint_support": { + "/printer/gcode/help": { + "bytes": 10992, + "status": 200 + }, + "/printer/info": { + "bytes": 403, + "status": 200 + }, + "/printer/objects/list": { + "bytes": 4207, + "status": 200 + }, + "/printer/objects/query?gcode": { + "bytes": 13174, + "status": 200 + }, + "/server/info": { + "bytes": 739, + "status": 200 + } + }, + "components": [ + "announcements", + "application", + "authorization", + "data_store", + "database", + "dbus_manager", + "extensions", + "file_manager", + "history", + "http_client", + "internal_transport", + "job_queue", + "job_state", + "jsonrpc", + "klippy_apis", + "klippy_connection", + "machine", + "mqtt", + "octoprint_compat", + "proc_stats", + "secrets", + "shell_command", + "spoolman", + "template", + "timelapse", + "update_manager", + "webcam", + "websockets" + ], + "objects": [ + "bed_mesh", + "canbus_stats EBBCan", + "configfile", + "display_status", + "exclude_object", + "extruder", + "fan", + "fan_generic FILTER_fan", + "filament_motion_sensor encoder_sensor", + "filament_switch_sensor switch_sensor", + "gcode", + "gcode_macro Attach_Probe", + "gcode_macro Attach_Probe_Lock", + "gcode_macro BED_MESH_CALIBRATE", + "gcode_macro CANCEL_DELAYED_PAUSE", + "gcode_macro CANCEL_PRINT", + "gcode_macro Dock_Probe", + "gcode_macro Dock_Probe_Unlock", + "gcode_macro END_PRINT", + "gcode_macro FIND_DUPLICATES", + "gcode_macro G28", + "gcode_macro GET_TIMELAPSE_SETUP", + "gcode_macro HYPERLAPSE", + "gcode_macro KOMB", + "gcode_macro KOMB_purge", + "gcode_macro LINE_PURGE", + "gcode_macro M0", + "gcode_macro M117", + "gcode_macro M600", + "gcode_macro PAUSE", + "gcode_macro PAUSE_AFTER_D", + "gcode_macro PROBE_ACCURACY", + "gcode_macro PROBE_CALIBRATE", + "gcode_macro PROMPT_TEST", + "gcode_macro PUBLISH_ALERT", + "gcode_macro RESUME", + "gcode_macro SCREWS_TILT_CALCULATE", + "gcode_macro SEARCH_VARS", + "gcode_macro SET_PAUSE_AT_LAYER", + "gcode_macro SET_PAUSE_NEXT_LAYER", + "gcode_macro SET_PRINT_STATS_INFO", + "gcode_macro SMARTHOME", + "gcode_macro SMART_PARK", + "gcode_macro START_PRINT", + "gcode_macro TEST_STREAM_DELAY", + "gcode_macro TIMELAPSE_RENDER", + "gcode_macro TIMELAPSE_TAKE_FRAME", + "gcode_macro VORON_PURGE", + "gcode_macro WAIT_FOR_ENCLOSURE_TEMP", + "gcode_macro Z_TILT_ADJUST", + "gcode_macro _BED_SAFETY_ARM", + "gcode_macro _BED_SAFETY_DISARM", + "gcode_macro _CLIENT_EXTRUDE", + "gcode_macro _CLIENT_LINEAR_MOVE", + "gcode_macro _CLIENT_RETRACT", + "gcode_macro _CLOSE_PROMPT_AND_RESUME", + "gcode_macro _COLOR_TRACKER", + "gcode_macro _CheckProbe", + "gcode_macro _DeployKlickyDock", + "gcode_macro _FILAMENT_SENSOR_CONFIG", + "gcode_macro _FILAMENT_SWAP_PROMPT", + "gcode_macro _FILTER_FAN_OFF", + "gcode_macro _FILTER_FAN_ON", + "gcode_macro _GET_PRINT_FILENAME", + "gcode_macro _Home_Z_", + "gcode_macro _Homing_Variables", + "gcode_macro _KAMP_Settings", + "gcode_macro _KOMB_Variables", + "gcode_macro _KOMB_trigger", + "gcode_macro _KlickyDebug", + "gcode_macro _LOAD_FILAMENT", + "gcode_macro _PAUSE_ON_SWITCH", + "gcode_macro _PRE_SCAN_TOOL_CHANGES", + "gcode_macro _Park_Toolhead", + "gcode_macro _Probe_Lock", + "gcode_macro _Probe_Unlock", + "gcode_macro _Probe_Variables", + "gcode_macro _RetractKlickyDock", + "gcode_macro _SAVE_PRINT_FILE", + "gcode_macro _SET_TIMELAPSE_SETUP", + "gcode_macro _SHOW_TOOL_CHANGE_COLOR", + "gcode_macro _SHOW_TOOL_CHANGE_STATUS", + "gcode_macro _START_FAN_TIMER", + "gcode_macro _SetProbeState", + "gcode_macro _THERMAL_ADJUST_ENABLE", + "gcode_macro _TIMELAPSE_NEW_FRAME", + "gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL", + "gcode_macro _TRACK_TOOL_CHANGE", + "gcode_macro _UNLOAD_FILAMENT", + "gcode_macro _Umbilical_Path", + "gcode_macro _User_Variables", + "gcode_macro _entry_point", + "gcode_macro _exit_point", + "gcode_macro _klicky_check_variables_version", + "gcode_macro _klicky_status_busy", + "gcode_macro _klicky_status_calibrating_z", + "gcode_macro _klicky_status_cleaning", + "gcode_macro _klicky_status_homing", + "gcode_macro _klicky_status_leveling", + "gcode_macro _klicky_status_meshing", + "gcode_macro _klicky_status_ready", + "gcode_macro axes_map_calibration", + "gcode_macro axes_shaper_calibration", + "gcode_macro compare_belts_responses", + "gcode_macro create_vibrations_profile", + "gcode_macro excitate_axis_at_freq", + "gcode_macro quick_mesh", + "gcode_move", + "heater_bed", + "heater_fan heatbreak_cooling_fan", + "heaters", + "idle_timeout", + "led chamber_light", + "manual_probe", + "mcu", + "mcu EBBCan", + "mcu expander", + "mcu ezboard", + "menu", + "motion_report", + "neopixel expanderPixel", + "output_pin bed_safety_switch", + "output_pin mosfet2", + "output_pin mosfet3", + "output_pin virtual_pause", + "pause_resume", + "print_stats", + "probe", + "query_endstops", + "save_variables", + "screws_tilt_adjust", + "servo camera_servo", + "servo camera_servo_y", + "skew_correction", + "stepper_enable", + "system_stats", + "temperature_combined combined_frame", + "temperature_host temp_RPi4", + "temperature_sensor chamber_air", + "temperature_sensor combined_frame", + "temperature_sensor frame_sensor_front_right", + "temperature_sensor frame_sensor_rear_left", + "temperature_sensor temp_EBBCan", + "temperature_sensor temp_EZboard", + "temperature_sensor temp_RPi4", + "temperature_sensor temp_SKR", + "tmc2209 extruder", + "tmc2209 stepper_x", + "tmc2209 stepper_y", + "tmc2209 stepper_z", + "tmc2209 stepper_z1", + "toolhead", + "virtual_pins", + "virtual_sdcard", + "webhooks", + "z_tilt" + ], + "macros": [ + "_BED_SAFETY_ARM", + "_BED_SAFETY_DISARM", + "_CheckProbe", + "_CLIENT_EXTRUDE", + "_CLIENT_LINEAR_MOVE", + "_CLIENT_RETRACT", + "_CLOSE_PROMPT_AND_RESUME", + "_COLOR_TRACKER", + "_DeployKlickyDock", + "_entry_point", + "_exit_point", + "_FILAMENT_SENSOR_CONFIG", + "_FILAMENT_SWAP_PROMPT", + "_FILTER_FAN_OFF", + "_FILTER_FAN_ON", + "_GET_PRINT_FILENAME", + "_Home_Z_", + "_Homing_Variables", + "_KAMP_Settings", + "_klicky_check_variables_version", + "_klicky_status_busy", + "_klicky_status_calibrating_z", + "_klicky_status_cleaning", + "_klicky_status_homing", + "_klicky_status_leveling", + "_klicky_status_meshing", + "_klicky_status_ready", + "_KlickyDebug", + "_KOMB_trigger", + "_KOMB_Variables", + "_LOAD_FILAMENT", + "_Park_Toolhead", + "_PAUSE_ON_SWITCH", + "_PRE_SCAN_TOOL_CHANGES", + "_Probe_Lock", + "_Probe_Unlock", + "_Probe_Variables", + "_RetractKlickyDock", + "_SAVE_PRINT_FILE", + "_SET_TIMELAPSE_SETUP", + "_SetProbeState", + "_SHOW_TOOL_CHANGE_COLOR", + "_SHOW_TOOL_CHANGE_STATUS", + "_START_FAN_TIMER", + "_THERMAL_ADJUST_ENABLE", + "_TIMELAPSE_NEW_FRAME", + "_TOOLHEAD_PARK_PAUSE_CANCEL", + "_TRACK_TOOL_CHANGE", + "_Umbilical_Path", + "_UNLOAD_FILAMENT", + "_User_Variables", + "Attach_Probe", + "Attach_Probe_Lock", + "axes_map_calibration", + "axes_shaper_calibration", + "BED_MESH_CALIBRATE", + "CANCEL_DELAYED_PAUSE", + "CANCEL_PRINT", + "compare_belts_responses", + "create_vibrations_profile", + "Dock_Probe", + "Dock_Probe_Unlock", + "END_PRINT", + "excitate_axis_at_freq", + "FIND_DUPLICATES", + "G28", + "GET_TIMELAPSE_SETUP", + "HYPERLAPSE", + "KOMB", + "KOMB_purge", + "LINE_PURGE", + "M0", + "M117", + "M600", + "PAUSE", + "PAUSE_AFTER_D", + "PROBE_ACCURACY", + "PROBE_CALIBRATE", + "PROMPT_TEST", + "PUBLISH_ALERT", + "quick_mesh", + "RESUME", + "SCREWS_TILT_CALCULATE", + "SEARCH_VARS", + "SET_PAUSE_AT_LAYER", + "SET_PAUSE_NEXT_LAYER", + "SET_PRINT_STATS_INFO", + "SMART_PARK", + "SMARTHOME", + "START_PRINT", + "TEST_STREAM_DELAY", + "TIMELAPSE_RENDER", + "TIMELAPSE_TAKE_FRAME", + "VORON_PURGE", + "WAIT_FOR_ENCLOSURE_TEMP", + "Z_TILT_ADJUST" + ], + "gcode_help_positive": [ + "ACCELEROMETER_DEBUG_READ", + "ACCELEROMETER_DEBUG_WRITE", + "ACCELEROMETER_MEASURE", + "ACCELEROMETER_QUERY", + "ACTIVATE_EXTRUDER", + "ATTACH_PROBE", + "ATTACH_PROBE_LOCK", + "AXES_MAP_CALIBRATION", + "AXES_SHAPER_CALIBRATION", + "BED_MESH_CALIBRATE", + "BED_MESH_CLEAR", + "BED_MESH_MAP", + "BED_MESH_OFFSET", + "BED_MESH_OUTPUT", + "BED_MESH_PROFILE", + "CALC_MEASURED_SKEW", + "CANCEL_DELAYED_PAUSE", + "CANCEL_PRINT", + "CANCEL_PRINT_BASE", + "CLEAR_PAUSE", + "COMPARE_BELTS_RESPONSES", + "CREATE_VIBRATIONS_PROFILE", + "DOCK_PROBE", + "DOCK_PROBE_UNLOCK", + "DUMP_TMC", + "DYNAMIC_MACRO", + "DYNAMIC_RENDER", + "END_PRINT", + "EXCITATE_AXIS_AT_FREQ", + "EXCLUDE_OBJECT", + "EXCLUDE_OBJECT_DEFINE", + "EXCLUDE_OBJECT_END", + "EXCLUDE_OBJECT_START", + "FIND_DUPLICATES", + "FIRMWARE_RESTART", + "FORCE_MOVE", + "G28", + "G28.6245197", + "GET_CURRENT_SKEW", + "GET_POSITION", + "GET_TIMELAPSE_SETUP", + "HELP", + "HYPERLAPSE", + "INIT_TMC", + "KOMB", + "KOMB_PURGE", + "LINE_PURGE", + "M0", + "M117", + "M117.1", + "M600", + "MANUAL_PROBE", + "MEASURE_AXES_NOISE", + "PAUSE", + "PAUSE_AFTER_D", + "PAUSE_BASE", + "PID_CALIBRATE", + "PROBE", + "PROBE_ACCURACY", + "PROBE_CALIBRATE", + "PROMPT_TEST", + "PUBLISH_ALERT", + "QUERY_ADC", + "QUERY_ENDSTOPS", + "QUERY_FILAMENT_SENSOR", + "QUERY_PROBE", + "QUICK_MESH", + "RESPOND", + "RESTART", + "RESTORE_GCODE_STATE", + "RESUME", + "RESUME_BASE", + "RUN_SHELL_COMMAND", + "SAVE_CONFIG", + "SAVE_GCODE_STATE", + "SAVE_VARIABLE", + "SCREWS_TILT_CALCULATE", + "SDCARD_PRINT_FILE", + "SDCARD_RESET_FILE", + "SEARCH_VARS", + "SET_DISPLAY_GROUP", + "SET_DISPLAY_TEXT", + "SET_DYNAMIC_VARIABLE", + "SET_EXTRUDER_ROTATION_DISTANCE", + "SET_FAN_SPEED", + "SET_FILAMENT_SENSOR", + "SET_GCODE_OFFSET", + "SET_GCODE_VARIABLE", + "SET_HEATER_TEMPERATURE", + "SET_IDLE_TIMEOUT", + "SET_INPUT_SHAPER", + "SET_KINEMATIC_POSITION", + "SET_LED", + "SET_LED_TEMPLATE", + "SET_PAUSE_AT_LAYER", + "SET_PAUSE_NEXT_LAYER", + "SET_PIN", + "SET_PRESSURE_ADVANCE", + "SET_PRINT_STATS_INFO", + "SET_PRINT_STATS_INFO_BASE", + "SET_SERVO", + "SET_SKEW", + "SET_STEPPER_ENABLE", + "SET_TMC_CURRENT", + "SET_TMC_FIELD", + "SET_VELOCITY_LIMIT", + "SET_VIRTUAL_PIN", + "SHAPER_CALIBRATE", + "SKEW_PROFILE", + "SMARTHOME", + "SMART_PARK", + "START_PRINT", + "STATUS", + "STEPPER_BUZZ", + "SYNC_EXTRUDER_MOTION", + "TEMPERATURE_WAIT", + "TEST_RESONANCES", + "TEST_STREAM_DELAY", + "TIMELAPSE_RENDER", + "TIMELAPSE_TAKE_FRAME", + "TUNING_TOWER", + "TURN_OFF_HEATERS", + "UPDATE_DELAYED_GCODE", + "VORON_PURGE", + "WAIT_FOR_ENCLOSURE_TEMP", + "Z_OFFSET_APPLY_PROBE", + "Z_TILT_ADJUST", + "_AXES_MAP_CALIBRATION", + "_AXES_SHAPER_CALIBRATION", + "_BED_MESH_CALIBRATE", + "_BED_SAFETY_ARM", + "_BED_SAFETY_DISARM", + "_CHECKPROBE", + "_CLIENT_EXTRUDE", + "_CLIENT_LINEAR_MOVE", + "_CLIENT_RETRACT", + "_CLOSE_PROMPT_AND_RESUME", + "_COLOR_TRACKER", + "_COMPARE_BELTS_RESPONSES", + "_CREATE_VIBRATIONS_PROFILE", + "_DEPLOYKLICKYDOCK", + "_ENTRY_POINT", + "_EXCITATE_AXIS_AT_FREQ", + "_EXIT_POINT", + "_FILAMENT_SENSOR_CONFIG", + "_FILAMENT_SWAP_PROMPT", + "_FILTER_FAN_OFF", + "_FILTER_FAN_ON", + "_GET_PRINT_FILENAME", + "_HOME_Z_", + "_HOMING_VARIABLES", + "_KAMP_SETTINGS", + "_KLICKYDEBUG", + "_KLICKY_CHECK_VARIABLES_VERSION", + "_KLICKY_STATUS_BUSY", + "_KLICKY_STATUS_CALIBRATING_Z", + "_KLICKY_STATUS_CLEANING", + "_KLICKY_STATUS_HOMING", + "_KLICKY_STATUS_LEVELING", + "_KLICKY_STATUS_MESHING", + "_KLICKY_STATUS_READY", + "_KOMB_TRIGGER", + "_KOMB_VARIABLES", + "_LOAD_FILAMENT", + "_PARK_TOOLHEAD", + "_PAUSE_ON_SWITCH", + "_PRE_SCAN_TOOL_CHANGES", + "_PROBE_ACCURACY", + "_PROBE_CALIBRATE", + "_PROBE_LOCK", + "_PROBE_UNLOCK", + "_PROBE_VARIABLES", + "_RETRACTKLICKYDOCK", + "_SAVE_PRINT_FILE", + "_SCREWS_TILT_CALCULATE", + "_SETPROBESTATE", + "_SET_TIMELAPSE_SETUP", + "_SHOW_TOOL_CHANGE_COLOR", + "_SHOW_TOOL_CHANGE_STATUS", + "_START_FAN_TIMER", + "_THERMAL_ADJUST_ENABLE", + "_TIMELAPSE_NEW_FRAME", + "_TOOLHEAD_PARK_PAUSE_CANCEL", + "_TRACK_TOOL_CHANGE", + "_UMBILICAL_PATH", + "_UNLOAD_FILAMENT", + "_USER_VARIABLES", + "_Z_TILT_ADJUST" + ], + "caveats": [ + "printer.gcode.help is recorded as positive evidence only; missing help entries are not treated as command absence.", + "This matrix is dev-facing evidence. Runtime gating evaluates live Capabilities on every connection." + ], + "predicate_evidence": [ + { + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "heater_bed" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "z_tilt" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "screws_tilt_adjust" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "probe" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "macro_present", + "name": "PAUSE" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "RESUME" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "CANCEL_PRINT" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "START_PRINT" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "END_PRINT" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "SCREWS_TILT_CALCULATE" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "BED_MESH_CALIBRATE" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "Z_TILT_ADJUST" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "history" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "job_queue" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "job_state" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "update_manager" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "webcam" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "mqtt" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "timelapse" + }, + "available": true, + "source": "server.info.components" + } + ] + }, + { + "id": "ender3", + "display_name": "Ender 3 Pro", + "host": "ender3.local:7125", + "captured_at": "2026-06-02T11:46:45Z", + "capture": { + "date": "2026-06-02", + "captured_at": "2026-06-02T11:46:45Z", + "klipper": "v0.13.0-662-gbd99b19b0-dirty", + "klipper_version": "v0.13.0-662-gbd99b19b0-dirty", + "moonraker": "v0.10.0-20-g9008485", + "moonraker_version": "v0.10.0-20-g9008485", + "moonraker_api": "1.5.0", + "api_version": "1.5.0", + "slicer": "OrcaSlicer 2.3", + "source": "approved live read-only probe refresh on 2026-06-02" + }, + "endpoint_support": { + "/printer/gcode/help": { + "bytes": 7123, + "status": 200 + }, + "/printer/info": { + "bytes": 404, + "status": 200 + }, + "/printer/objects/list": { + "bytes": 2517, + "status": 200 + }, + "/printer/objects/query?gcode": { + "bytes": 8776, + "status": 200 + }, + "/server/info": { + "bytes": 700, + "status": 200 + } + }, + "components": [ + "analysis", + "announcements", + "application", + "authorization", + "data_store", + "database", + "dbus_manager", + "extensions", + "file_manager", + "history", + "http_client", + "internal_transport", + "job_queue", + "job_state", + "jsonrpc", + "klippy_apis", + "klippy_connection", + "machine", + "octoprint_compat", + "proc_stats", + "secrets", + "shell_command", + "spoolman", + "template", + "update_manager", + "webcam", + "websockets" + ], + "objects": [ + "bed_mesh", + "configfile", + "display_status", + "exclude_object", + "extruder", + "fan", + "filament_motion_sensor encoder_sensor", + "filament_switch_sensor switch_sensor", + "gcode", + "gcode_macro Attach_Probe", + "gcode_macro Attach_Probe_Lock", + "gcode_macro BED_MESH_CALIBRATE", + "gcode_macro CANCEL_DELAYED_PAUSE", + "gcode_macro CANCEL_PRINT", + "gcode_macro Dock_Probe", + "gcode_macro Dock_Probe_Unlock", + "gcode_macro END_PRINT", + "gcode_macro FIND_DUPLICATES", + "gcode_macro Home_Lock", + "gcode_macro LINE_PURGE", + "gcode_macro M0", + "gcode_macro M117", + "gcode_macro M600", + "gcode_macro PAUSE", + "gcode_macro PAUSE_AFTER_D", + "gcode_macro PROBE_ACCURACY", + "gcode_macro PROBE_CALIBRATE", + "gcode_macro RESUME", + "gcode_macro SCREWS_TILT_CALCULATE", + "gcode_macro SEARCH_VARS", + "gcode_macro SET_PAUSE_AT_LAYER", + "gcode_macro SET_PAUSE_NEXT_LAYER", + "gcode_macro SET_PRINT_STATS_INFO", + "gcode_macro SMART_PARK", + "gcode_macro START_PRINT", + "gcode_macro VORON_PURGE", + "gcode_macro _CLIENT_EXTRUDE", + "gcode_macro _CLIENT_LINEAR_MOVE", + "gcode_macro _CLIENT_RETRACT", + "gcode_macro _CLOSE_PROMPT_AND_RESUME", + "gcode_macro _COLOR_TRACKER", + "gcode_macro _Center_Nozzle", + "gcode_macro _Center_Probe", + "gcode_macro _CheckProbe", + "gcode_macro _FILAMENT_SENSOR_CONFIG", + "gcode_macro _FILAMENT_SWAP_PROMPT", + "gcode_macro _GET_FILAMENT_SENSOR_STATE", + "gcode_macro _GET_PRINT_FILENAME", + "gcode_macro _Home_Z", + "gcode_macro _Homing_Variables", + "gcode_macro _KAMP_Settings", + "gcode_macro _KlackDebug", + "gcode_macro _Klack_check_variables_version", + "gcode_macro _LOAD_FILAMENT", + "gcode_macro _Move_to_Safe_z", + "gcode_macro _PRE_SCAN_TOOL_CHANGES", + "gcode_macro _Park_Toolhead", + "gcode_macro _Probe_Lock", + "gcode_macro _Probe_Unlock", + "gcode_macro _Probe_Variables", + "gcode_macro _RESTORE_FILAMENT_SENSOR_STATE", + "gcode_macro _SAVE_FILAMENT_SENSOR_STATE", + "gcode_macro _SAVE_PRINT_FILE", + "gcode_macro _SHOW_TOOL_CHANGE_COLOR", + "gcode_macro _SHOW_TOOL_CHANGE_STATUS", + "gcode_macro _SetProbeState", + "gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL", + "gcode_macro _TRACK_TOOL_CHANGE", + "gcode_macro _User_Variables", + "gcode_move", + "heater_bed", + "heater_fan nozzle_cooling_fan", + "heaters", + "idle_timeout", + "manual_probe", + "mcu", + "motion_report", + "output_pin ignore_m600", + "pause_resume", + "print_stats", + "probe", + "query_endstops", + "save_variables", + "screws_tilt_adjust", + "skew_correction", + "stepper_enable", + "system_stats", + "temperature_host rockpro64", + "temperature_sensor SKR", + "temperature_sensor rockpro64", + "tmc2209 extruder", + "tmc2209 stepper_x", + "tmc2209 stepper_y", + "tmc2209 stepper_z", + "toolhead", + "virtual_pins", + "virtual_sdcard", + "webhooks" + ], + "macros": [ + "_Center_Nozzle", + "_Center_Probe", + "_CheckProbe", + "_CLIENT_EXTRUDE", + "_CLIENT_LINEAR_MOVE", + "_CLIENT_RETRACT", + "_CLOSE_PROMPT_AND_RESUME", + "_COLOR_TRACKER", + "_FILAMENT_SENSOR_CONFIG", + "_FILAMENT_SWAP_PROMPT", + "_GET_FILAMENT_SENSOR_STATE", + "_GET_PRINT_FILENAME", + "_Home_Z", + "_Homing_Variables", + "_KAMP_Settings", + "_Klack_check_variables_version", + "_KlackDebug", + "_LOAD_FILAMENT", + "_Move_to_Safe_z", + "_Park_Toolhead", + "_PRE_SCAN_TOOL_CHANGES", + "_Probe_Lock", + "_Probe_Unlock", + "_Probe_Variables", + "_RESTORE_FILAMENT_SENSOR_STATE", + "_SAVE_FILAMENT_SENSOR_STATE", + "_SAVE_PRINT_FILE", + "_SetProbeState", + "_SHOW_TOOL_CHANGE_COLOR", + "_SHOW_TOOL_CHANGE_STATUS", + "_TOOLHEAD_PARK_PAUSE_CANCEL", + "_TRACK_TOOL_CHANGE", + "_User_Variables", + "Attach_Probe", + "Attach_Probe_Lock", + "BED_MESH_CALIBRATE", + "CANCEL_DELAYED_PAUSE", + "CANCEL_PRINT", + "Dock_Probe", + "Dock_Probe_Unlock", + "END_PRINT", + "FIND_DUPLICATES", + "Home_Lock", + "LINE_PURGE", + "M0", + "M117", + "M600", + "PAUSE", + "PAUSE_AFTER_D", + "PROBE_ACCURACY", + "PROBE_CALIBRATE", + "RESUME", + "SCREWS_TILT_CALCULATE", + "SEARCH_VARS", + "SET_PAUSE_AT_LAYER", + "SET_PAUSE_NEXT_LAYER", + "SET_PRINT_STATS_INFO", + "SMART_PARK", + "START_PRINT", + "VORON_PURGE" + ], + "gcode_help_positive": [ + "ACTIVATE_EXTRUDER", + "ATTACH_PROBE", + "ATTACH_PROBE_LOCK", + "BASE_PAUSE", + "BASE_RESUME", + "BED_MESH_CALIBRATE", + "BED_MESH_CLEAR", + "BED_MESH_MAP", + "BED_MESH_OFFSET", + "BED_MESH_OUTPUT", + "BED_MESH_PROFILE", + "CALC_MEASURED_SKEW", + "CANCEL_DELAYED_PAUSE", + "CANCEL_PRINT", + "CANCEL_PRINT_BASE", + "CLEAR_PAUSE", + "DOCK_PROBE", + "DOCK_PROBE_UNLOCK", + "DUMP_TMC", + "DYNAMIC_MACRO", + "DYNAMIC_RENDER", + "END_PRINT", + "EXCLUDE_OBJECT", + "EXCLUDE_OBJECT_DEFINE", + "EXCLUDE_OBJECT_END", + "EXCLUDE_OBJECT_START", + "FIND_DUPLICATES", + "FIRMWARE_RESTART", + "FORCE_MOVE", + "GET_CURRENT_SKEW", + "GET_POSITION", + "HELP", + "HOME_LOCK", + "INIT_TMC", + "LINE_PURGE", + "M0", + "M117", + "M117.1", + "M600", + "MANUAL_PROBE", + "PAUSE", + "PAUSE_AFTER_D", + "PID_CALIBRATE", + "PROBE", + "PROBE_ACCURACY", + "PROBE_CALIBRATE", + "QUERY_ADC", + "QUERY_ENDSTOPS", + "QUERY_FILAMENT_SENSOR", + "QUERY_PROBE", + "RESPOND", + "RESTART", + "RESTORE_GCODE_STATE", + "RESUME", + "RUN_SHELL_COMMAND", + "SAVE_CONFIG", + "SAVE_GCODE_STATE", + "SAVE_VARIABLE", + "SCREWS_TILT_CALCULATE", + "SDCARD_PRINT_FILE", + "SDCARD_RESET_FILE", + "SEARCH_VARS", + "SET_DISPLAY_TEXT", + "SET_DYNAMIC_VARIABLE", + "SET_EXTRUDER_ROTATION_DISTANCE", + "SET_FILAMENT_SENSOR", + "SET_GCODE_OFFSET", + "SET_GCODE_VARIABLE", + "SET_HEATER_TEMPERATURE", + "SET_IDLE_TIMEOUT", + "SET_INPUT_SHAPER", + "SET_KINEMATIC_POSITION", + "SET_PAUSE_AT_LAYER", + "SET_PAUSE_NEXT_LAYER", + "SET_PIN", + "SET_PRESSURE_ADVANCE", + "SET_PRINT_STATS_INFO", + "SET_PRINT_STATS_INFO_BASE", + "SET_SKEW", + "SET_STEPPER_ENABLE", + "SET_TMC_CURRENT", + "SET_TMC_FIELD", + "SET_VELOCITY_LIMIT", + "SET_VIRTUAL_PIN", + "SKEW_PROFILE", + "SMART_PARK", + "START_PRINT", + "STATUS", + "STEPPER_BUZZ", + "SYNC_EXTRUDER_MOTION", + "TEMPERATURE_WAIT", + "TUNING_TOWER", + "TURN_OFF_HEATERS", + "UPDATE_DELAYED_GCODE", + "VORON_PURGE", + "Z_OFFSET_APPLY_PROBE", + "_BED_MESH_CALIBRATE", + "_CENTER_NOZZLE", + "_CENTER_PROBE", + "_CHECKPROBE", + "_CLIENT_EXTRUDE", + "_CLIENT_LINEAR_MOVE", + "_CLIENT_RETRACT", + "_CLOSE_PROMPT_AND_RESUME", + "_COLOR_TRACKER", + "_FILAMENT_SENSOR_CONFIG", + "_FILAMENT_SWAP_PROMPT", + "_GET_FILAMENT_SENSOR_STATE", + "_GET_PRINT_FILENAME", + "_HOME_Z", + "_HOMING_VARIABLES", + "_KAMP_SETTINGS", + "_KLACKDEBUG", + "_KLACK_CHECK_VARIABLES_VERSION", + "_LOAD_FILAMENT", + "_MOVE_TO_SAFE_Z", + "_PARK_TOOLHEAD", + "_PRE_SCAN_TOOL_CHANGES", + "_PROBE_ACCURACY", + "_PROBE_CALIBRATE", + "_PROBE_LOCK", + "_PROBE_UNLOCK", + "_PROBE_VARIABLES", + "_RESTORE_FILAMENT_SENSOR_STATE", + "_SAVE_FILAMENT_SENSOR_STATE", + "_SAVE_PRINT_FILE", + "_SCREWS_TILT_CALCULATE", + "_SETPROBESTATE", + "_SHOW_TOOL_CHANGE_COLOR", + "_SHOW_TOOL_CHANGE_STATUS", + "_TOOLHEAD_PARK_PAUSE_CANCEL", + "_TRACK_TOOL_CHANGE", + "_USER_VARIABLES" + ], + "caveats": [ + "printer.gcode.help is recorded as positive evidence only; missing help entries are not treated as command absence.", + "This matrix is dev-facing evidence. Runtime gating evaluates live Capabilities on every connection." + ], + "predicate_evidence": [ + { + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "heater_bed" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "screws_tilt_adjust" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "probe" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "available": true, + "source": "printer.objects.list" + }, + { + "predicate": { + "type": "macro_present", + "name": "PAUSE" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "RESUME" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "CANCEL_PRINT" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "START_PRINT" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "END_PRINT" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "SCREWS_TILT_CALCULATE" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "macro_present", + "name": "BED_MESH_CALIBRATE" + }, + "available": true, + "source": "printer.objects.list/gcode_macro" + }, + { + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "history" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "job_queue" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "job_state" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "update_manager" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "webcam" + }, + "available": true, + "source": "server.info.components" + }, + { + "predicate": { + "type": "component_present", + "name": "analysis" + }, + "available": true, + "source": "server.info.components" + } + ] + } + ], + "command_availability": [ + { + "catalog_id": "MR-server.connection.identify", + "name": "server.connection.identify", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "MR-access.oneshot_token", + "name": "access.oneshot_token", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "MR-server.info", + "name": "server.info", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "/server/info returned HTTP 200 in the approved capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "/server/info returned HTTP 200 in the approved capture." + } + ] + }, + { + "catalog_id": "MR-printer.objects.list", + "name": "printer.objects.list", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "/printer/objects/list returned HTTP 200 in the approved capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "/printer/objects/list returned HTTP 200 in the approved capture." + } + ] + }, + { + "catalog_id": "MR-printer.objects.query", + "name": "printer.objects.query", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "/printer/objects/query?gcode returned HTTP 200 in the approved capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "/printer/objects/query?gcode returned HTTP 200 in the approved capture." + } + ] + }, + { + "catalog_id": "MR-printer.objects.subscribe", + "name": "printer.objects.subscribe", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "MR-server.temperature_store", + "name": "server.temperature_store", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "history" + }, + "predicate_key": "component_present:history", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "component history listed in /server/info capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "component history listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.gcode_store", + "name": "server.gcode_store", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "server.gcode_store probed 2026-06-02; returned {gcode_store:[{message,time,type}]} (fixture gcode_store_e5.json)." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "Moonraker core endpoint since 2021; available on every Moonraker host (availability: always)." + } + ] + }, + { + "catalog_id": "MR-server.files.metadata", + "name": "server.files.metadata", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "predicate_key": "component_present:file_manager", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.history.list", + "name": "server.history.list", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "history" + }, + "predicate_key": "component_present:history", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "component history listed in /server/info capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "component history listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.webcams.list", + "name": "server.webcams.list", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate (D-08): the webcam component is universal on E5/E3, so the command is unconditional and the drawer TILE is greyed on cam-count==0 instead. One-shot edge-driven enumeration (server.webcams.list returned 1 cam on the live E5 capture).", + "caveat": "Gated by cam-count at the UI, not by an availability predicate." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate (D-08): the webcam component is universal on E5/E3, so the command is unconditional and the drawer TILE is greyed on cam-count==0 instead. One-shot edge-driven enumeration (server.webcams.list returned cams on the live E3 capture).", + "caveat": "Gated by cam-count at the UI, not by an availability predicate." + } + ] + }, + { + "catalog_id": "MR-server.spoolman.status", + "name": "server.spoolman.status", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "spoolman component listed in /server/info; live capture returned {spoolman_connected:true, spool_id:5, pending_reports:[]} (spoolman-live-ender5-status-before-set.json). Read spec ungated; the WRITE/proxy carry component_present:spoolman." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "spoolman component listed in /server/info capture; status read is answerable whenever the component exists." + } + ] + }, + { + "catalog_id": "MR-server.spoolman.get_spool_id", + "name": "server.spoolman.get_spool_id", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "spoolman component listed in /server/info; live capture returned {spool_id:5} (spoolman-live-ender5-notify.json get_spool_id call)." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "spoolman component listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.spoolman.post_spool_id", + "name": "server.spoolman.post_spool_id", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "predicate_key": "component_present:spoolman", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "spoolman component listed in /server/info capture; set/clear (D-13) gated on the spoolman component." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "spoolman component listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.spoolman.proxy", + "name": "server.spoolman.proxy", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "spoolman" + }, + "predicate_key": "component_present:spoolman", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "spoolman component listed in /server/info; live use_v2_response=true proxy returned the PLA list envelope with X-Total-Count (spoolman-live-ender5-proxy-pla.json)." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "spoolman component listed in /server/info capture; proxy passthrough gated on the spoolman component." + } + ] + }, + { + "catalog_id": "MR-printer.emergency_stop", + "name": "printer.emergency_stop", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "MR-printer.firmware_restart", + "name": "printer.firmware_restart", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "MR-printer.restart", + "name": "printer.restart", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry has no runtime availability predicate; official Moonraker docs are the source of command support.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "KGC-SET_HEATER_TEMPERATURE", + "name": "SET_HEATER_TEMPERATURE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "predicate_key": "object_present:extruder", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-SET_TEMPERATURE_FAN_TARGET", + "name": "SET_TEMPERATURE_FAN_TARGET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "Registered for Heat Presets; not executed during read-only capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "Registered for Heat Presets; not executed during read-only capture." + } + ] + }, + { + "catalog_id": "KGC-APPLY_HEAT_PRESET", + "name": "APPLY_HEAT_PRESET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "predicate_key": "object_present:extruder", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "Registered for Heat Presets; not executed during read-only capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "Registered for Heat Presets; not executed during read-only capture." + } + ] + }, + { + "catalog_id": "KGC-G1_JOG", + "name": "G1 relative jog", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-G1_OVERRIDE_JOG", + "name": "SET_KINEMATIC_POSITION + G1", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-FORCE_MOVE", + "name": "FORCE_MOVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "FORCE_MOVE" + }, + "predicate_key": "gcode_command_present:FORCE_MOVE", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "FORCE_MOVE appeared in /printer/gcode/help positive evidence.", + "caveat": "gcode.help is positive evidence only; absence would not prove unsupported." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "FORCE_MOVE appeared in /printer/gcode/help positive evidence.", + "caveat": "gcode.help is positive evidence only; absence would not prove unsupported." + } + ] + }, + { + "catalog_id": "KGC-G28_HOME_ALL", + "name": "G28", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-G28_HOME_XY", + "name": "G28 X Y", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-G28_HOME_AXIS", + "name": "G28 ", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-G1_EXTRUDE", + "name": "G1 E", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "predicate_key": "object_present:extruder", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-T_SELECT_TOOL", + "name": "T", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "predicate_key": "object_present:extruder", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-LOAD_FILAMENT", + "name": "LOAD_FILAMENT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "macro_present", + "name": "LOAD_FILAMENT" + }, + "predicate_key": "macro_present:LOAD_FILAMENT", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_on_our_printers", + "evidence": "macro LOAD_FILAMENT not listed in /printer/objects/query?gcode capture.", + "caveat": "Private helper(s) observed instead: _LOAD_FILAMENT, _UNLOAD_FILAMENT." + }, + { + "printer_id": "ender3", + "status": "not_on_our_printers", + "evidence": "macro LOAD_FILAMENT not listed in /printer/objects/query?gcode capture.", + "caveat": "Private helper(s) observed instead: _LOAD_FILAMENT." + } + ] + }, + { + "catalog_id": "KGC-UNLOAD_FILAMENT", + "name": "UNLOAD_FILAMENT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "macro_present", + "name": "UNLOAD_FILAMENT" + }, + "predicate_key": "macro_present:UNLOAD_FILAMENT", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_on_our_printers", + "evidence": "macro UNLOAD_FILAMENT not listed in /printer/objects/query?gcode capture.", + "caveat": "Private helper(s) observed instead: _UNLOAD_FILAMENT." + }, + { + "printer_id": "ender3", + "status": "not_on_our_printers", + "evidence": "macro UNLOAD_FILAMENT not listed in /printer/objects/query?gcode capture." + } + ] + }, + { + "catalog_id": "KGC-TURN_OFF_HEATERS", + "name": "TURN_OFF_HEATERS", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "predicate_key": "object_present:extruder", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-SET_FILAMENT_SENSOR", + "name": "SET_FILAMENT_SENSOR", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "SET_FILAMENT_SENSOR" + }, + "predicate_key": "gcode_command_present:SET_FILAMENT_SENSOR", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "SET_FILAMENT_SENSOR appeared in /printer/gcode/help positive evidence.", + "caveat": "gcode.help is positive evidence only; absence would not prove unsupported." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "SET_FILAMENT_SENSOR appeared in /printer/gcode/help positive evidence.", + "caveat": "gcode.help is positive evidence only; absence would not prove unsupported." + } + ] + }, + { + "catalog_id": "KGC-M84_DISABLE_STEPPERS", + "name": "M84", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "MR-server.files.get_directory", + "name": "server.files.get_directory", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "predicate_key": "component_present:file_manager", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.files.thumbnails", + "name": "server.files.thumbnails", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "predicate_key": "component_present:file_manager", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-server.files.delete_file", + "name": "server.files.delete_file", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "component_present", + "name": "file_manager" + }, + "predicate_key": "component_present:file_manager", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "component file_manager listed in /server/info capture." + } + ] + }, + { + "catalog_id": "MR-printer.print.start", + "name": "printer.print.start", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "predicate_key": "object_present:virtual_sdcard", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object virtual_sdcard listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object virtual_sdcard listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "MR-printer.print.pause", + "name": "printer.print.pause", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate_key": "object_present:pause_resume", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object pause_resume listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object pause_resume listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "MR-printer.print.resume", + "name": "printer.print.resume", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate_key": "object_present:pause_resume", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object pause_resume listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object pause_resume listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "MR-printer.print.cancel", + "name": "printer.print.cancel", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "pause_resume" + }, + "predicate_key": "object_present:pause_resume", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object pause_resume listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object pause_resume listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-SCREWS_TILT_CALCULATE", + "name": "SCREWS_TILT_CALCULATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "screws_tilt_adjust" + }, + "predicate_key": "object_present:screws_tilt_adjust", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "screws_tilt_adjust present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "screws_tilt_adjust present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-Z_TILT_ADJUST", + "name": "Z_TILT_ADJUST", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "z_tilt" + }, + "predicate_key": "object_present:z_tilt", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "z_tilt present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "not_on_our_printers", + "evidence": "object_present:z_tilt not observed in the 2026-06-02 capture for this printer.", + "caveat": "Recorded as not_on_printers; runtime predicate gates the command off live." + } + ] + }, + { + "catalog_id": "KGC-QUAD_GANTRY_LEVEL", + "name": "QUAD_GANTRY_LEVEL", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "quad_gantry_level" + }, + "predicate_key": "object_present:quad_gantry_level", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_on_our_printers", + "evidence": "object_present:quad_gantry_level not observed in the 2026-06-02 capture for this printer.", + "caveat": "Recorded as not_on_printers; runtime predicate gates the command off live." + }, + { + "printer_id": "ender3", + "status": "not_on_our_printers", + "evidence": "object_present:quad_gantry_level not observed in the 2026-06-02 capture for this printer.", + "caveat": "Recorded as not_on_printers; runtime predicate gates the command off live." + } + ] + }, + { + "catalog_id": "KGC-BED_MESH_CALIBRATE", + "name": "BED_MESH_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate_key": "object_present:bed_mesh", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-BED_MESH_PROFILE_SAVE", + "name": "BED_MESH_PROFILE SAVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate_key": "object_present:bed_mesh", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-BED_MESH_PROFILE_LOAD", + "name": "BED_MESH_PROFILE LOAD", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate_key": "object_present:bed_mesh", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-BED_MESH_PROFILE_REMOVE", + "name": "BED_MESH_PROFILE REMOVE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "bed_mesh" + }, + "predicate_key": "object_present:bed_mesh", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "bed_mesh present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-PROBE_CALIBRATE", + "name": "PROBE_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "probe" + }, + "predicate_key": "object_present:probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-Z_ENDSTOP_CALIBRATE", + "name": "Z_ENDSTOP_CALIBRATE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "Z_ENDSTOP_CALIBRATE" + }, + "predicate_key": "gcode_command_present:Z_ENDSTOP_CALIBRATE", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_on_our_printers", + "evidence": "gcode_command_present:Z_ENDSTOP_CALIBRATE not observed in the 2026-06-02 capture for this printer.", + "caveat": "Recorded as not_on_printers; runtime predicate gates the command off live." + }, + { + "printer_id": "ender3", + "status": "not_on_our_printers", + "evidence": "gcode_command_present:Z_ENDSTOP_CALIBRATE not observed in the 2026-06-02 capture for this printer.", + "caveat": "Recorded as not_on_printers; runtime predicate gates the command off live." + } + ] + }, + { + "catalog_id": "KGC-TESTZ", + "name": "TESTZ", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "manual_probe" + }, + "predicate_key": "object_present:manual_probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "manual_probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "manual_probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-ACCEPT", + "name": "ACCEPT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "manual_probe" + }, + "predicate_key": "object_present:manual_probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "manual_probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "manual_probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-ABORT", + "name": "ABORT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "manual_probe" + }, + "predicate_key": "object_present:manual_probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "manual_probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "manual_probe present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-Z_OFFSET_APPLY_SAVE", + "name": "Z_OFFSET_APPLY_* + SAVE_CONFIG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { "type": "always" }, + "predicate_key": "always", + "printer_status": [ + { "printer_id": "ender5plus", "status": "runtime_unconditional", "evidence": "CommandRegistry availability is Always (host action; the Save button is separately gated by canApply + !printing).", "caveat": "Not executed during the read-only capture." }, + { "printer_id": "ender3", "status": "runtime_unconditional", "evidence": "CommandRegistry availability is Always (host action; the Save button is separately gated by canApply + !printing).", "caveat": "Not executed during the read-only capture." } + ] + }, + { + "catalog_id": "KGC-SAVE_CONFIG", + "name": "SAVE_CONFIG", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry availability is Always (host action, not object-gated).", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry availability is Always (host action, not object-gated).", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "KGC-SET_GCODE_OFFSET", + "name": "SET_GCODE_OFFSET", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "gcode_move" + }, + "predicate_key": "object_present:gcode_move", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "gcode_move present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "gcode_move present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-SET_GCODE_OFFSET_CLEAR", + "name": "SET_GCODE_OFFSET (clear)", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { "type": "object_present", "name": "gcode_move" }, + "predicate_key": "object_present:gcode_move", + "printer_status": [ + { "printer_id": "ender5plus", "status": "present", "evidence": "gcode_move present in printer.objects.list (2026-06-02 capture).", "caveat": "Live objects.list capture; re-derived every reconnect." }, + { "printer_id": "ender3", "status": "present", "evidence": "gcode_move present in printer.objects.list (2026-06-02 capture).", "caveat": "Live objects.list capture; re-derived every reconnect." } + ] + }, + { + "catalog_id": "KGC-SDCARD_RESET_FILE", + "name": "SDCARD_RESET_FILE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "virtual_sdcard" + }, + "predicate_key": "object_present:virtual_sdcard", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "virtual_sdcard present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "virtual_sdcard present in printer.objects.list (2026-06-02 capture).", + "caveat": "Live objects.list capture; re-derived every reconnect." + } + ] + }, + { + "catalog_id": "KGC-M220", + "name": "M220", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "gcode_move" + }, + "predicate_key": "object_present:gcode_move", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object gcode_move listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object gcode_move listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-M221", + "name": "M221", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "gcode_move" + }, + "predicate_key": "object_present:gcode_move", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object gcode_move listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object gcode_move listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-SET_VELOCITY_LIMIT", + "name": "SET_VELOCITY_LIMIT", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-SET_PRESSURE_ADVANCE", + "name": "SET_PRESSURE_ADVANCE", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "extruder" + }, + "predicate_key": "object_present:extruder", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object extruder listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-M106", + "name": "M106", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "fan" + }, + "predicate_key": "object_present:fan", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object fan listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object fan listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "KGC-SET_RETRACTION", + "name": "SET_RETRACTION", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "firmware_retraction" + }, + "predicate_key": "object_present:firmware_retraction", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "absent", + "evidence": "object firmware_retraction NOT listed in /printer/objects/list capture (built blind, D-12); see not_on_printers." + }, + { + "printer_id": "ender3", + "status": "absent", + "evidence": "object firmware_retraction NOT listed in /printer/objects/list capture (built blind, D-12); see not_on_printers." + } + ] + }, + { + "catalog_id": "KGC-SET_FAN_SPEED-OUT", + "name": "SET_FAN_SPEED", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setGenericFan has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. fan_generic FILTER_fan IS listed in the ender5plus /printer/objects/list capture, so the descriptor surfaces a generic fan here.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setGenericFan has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. No fan_generic object is listed in the ender3 /printer/objects/list capture, so the descriptor surfaces no generic fan there.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "KGC-SET_LED", + "name": "SET_LED", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setLed has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. led chamber_light and neopixel expanderPixel ARE listed in the ender5plus /printer/objects/list capture, so the descriptor surfaces LED outputs here.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setLed has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. No led or neopixel object is listed in the ender3 /printer/objects/list capture, so the descriptor surfaces no LED output there.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "KGC-SET_SERVO-OUT", + "name": "SET_SERVO", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setServo has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. servo camera_servo and servo camera_servo_y ARE listed in the ender5plus /printer/objects/list capture, so the descriptor surfaces servo outputs here.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setServo has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. No servo object is listed in the ender3 /printer/objects/list capture, so the descriptor surfaces no servo output there.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "KGC-SET_PIN-OUT", + "name": "SET_PIN", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setOutputPin has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. Multiple output_pin objects (bed_safety_switch, mosfet2, mosfet3, virtual_pause) ARE listed in the ender5plus /printer/objects/list capture, so the descriptor surfaces output pins here.", + "caveat": "Not executed during the read-only capture." + }, + { + "printer_id": "ender3", + "status": "runtime_unconditional", + "evidence": "CommandRegistry setOutputPin has an Always predicate; runtime descriptor discovery (19-04) is the source of truth. output_pin ignore_m600 IS listed in the ender3 /printer/objects/list capture, so the descriptor surfaces an output pin here.", + "caveat": "Not executed during the read-only capture." + } + ] + }, + { + "catalog_id": "MR-machine.system_info", + "name": "machine.system_info", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "machine/system_info probed 2026-06-08; returned cpu_info{model:'Raspberry Pi 4 Model B Rev 1.4',cpu_count:4,total_memory:8007452} + distribution{name,version,kernel_version}." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "machine/system_info probed 2026-06-08; returned cpu_info{model:'',cpu_count:6,total_memory:3945568} + distribution{Armbian/ubuntu 24.04, kernel 6.18.10-current-rockchip64}." + } + ] + }, + { + "catalog_id": "MR-printer.info", + "name": "printer.info", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "GET /printer/info probed 2026-06-15; result.hostname='ender5plus' (state 'ready')." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "GET /printer/info probed 2026-06-15; result.hostname='ender3' (state 'ready')." + } + ] + }, + { + "catalog_id": "MR-machine.proc_stats", + "name": "machine.proc_stats", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "machine/proc_stats probed 2026-06-08; throttled_state{bits:0,flags:[]}, cpu_temp:64.757, system_uptime, system_memory, system_cpu_usage present." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "machine/proc_stats probed 2026-06-08; throttled_state:null (RockPro64 omits throttle), cpu_temp:53.333, system_uptime, system_memory, system_cpu_usage present." + } + ] + }, + { + "catalog_id": "MR-machine.reboot", + "name": "machine.reboot", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "Moonraker machine.reboot is always available on Moonraker hosts; no conditional predicate required." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "Moonraker machine.reboot is always available on Moonraker hosts; no conditional predicate required." + } + ] + }, + { + "catalog_id": "MR-machine.shutdown", + "name": "machine.shutdown", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "Moonraker machine.shutdown is always available on Moonraker hosts; no conditional predicate required." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "Moonraker machine.shutdown is always available on Moonraker hosts; no conditional predicate required." + } + ] + }, + { + "catalog_id": "MR-machine.services.restart", + "name": "machine.services.restart", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "Moonraker machine.services.restart is always available on Moonraker hosts; no conditional predicate required." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "Moonraker machine.services.restart is always available on Moonraker hosts; no conditional predicate required." + } + ] + }, + { + "catalog_id": "KGC-G1_MOVE_TO", + "name": "G1 absolute move", + "source_api": "klipper_gcode", + "transport": "gcode_script", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "toolhead" + }, + "predicate_key": "object_present:toolhead", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "object toolhead listed in /printer/objects/list capture." + } + ] + }, + { + "catalog_id": "MR-printer.query_endstops.status", + "name": "printer.query_endstops.status", + "source_api": "moonraker", + "transport": "json_rpc", + "registry_status": "registered", + "predicate": { + "type": "always" + }, + "predicate_key": "always", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "printer.query_endstops/status is a core Klipper endpoint present on all Klipper printers." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "printer.query_endstops/status is a core Klipper endpoint present on all Klipper printers." + } + ] + }, + { + "catalog_id": "KGC-QUERY_PROBE", + "name": "QUERY_PROBE", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "probe" + }, + "predicate_key": "object_present:probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + } + ] + }, + { + "catalog_id": "KGC-PROBE", + "name": "PROBE", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "probe" + }, + "predicate_key": "object_present:probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + } + ] + }, + { + "catalog_id": "KGC-PROBE_ACCURACY", + "name": "PROBE_ACCURACY", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "probe" + }, + "predicate_key": "object_present:probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + } + ] + }, + { + "catalog_id": "KGC-Z_OFFSET_APPLY_PROBE", + "name": "Z_OFFSET_APPLY_PROBE", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "object_present", + "name": "probe" + }, + "predicate_key": "object_present:probe", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + }, + { + "printer_id": "ender3", + "status": "present", + "evidence": "probe object present in objects.list (2026-06-02 capture); command available whenever [probe] is configured." + } + ] + }, + { + "catalog_id": "KGC-Z_OFFSET_APPLY_ENDSTOP", + "name": "Z_OFFSET_APPLY_ENDSTOP", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "Z_OFFSET_APPLY_ENDSTOP" + }, + "predicate_key": "gcode_command_present:Z_OFFSET_APPLY_ENDSTOP", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + }, + { + "printer_id": "ender3", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + } + ] + }, + { + "catalog_id": "KGC-PROBE_EDDY_CURRENT_CALIBRATE", + "name": "PROBE_EDDY_CURRENT_CALIBRATE", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_CALIBRATE" + }, + "predicate_key": "gcode_command_present:PROBE_EDDY_CURRENT_CALIBRATE", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + }, + { + "printer_id": "ender3", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + } + ] + }, + { + "catalog_id": "KGC-PROBE_EDDY_CURRENT_TAP_CALIBRATE", + "name": "PROBE_EDDY_CURRENT_TAP_CALIBRATE", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_TAP_CALIBRATE" + }, + "predicate_key": "gcode_command_present:PROBE_EDDY_CURRENT_TAP_CALIBRATE", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + }, + { + "printer_id": "ender3", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + } + ] + }, + { + "catalog_id": "KGC-LDC_CALIBRATE_DRIVE_CURRENT", + "name": "LDC_CALIBRATE_DRIVE_CURRENT", + "source_api": "klipper", + "transport": "gcode", + "registry_status": "registered", + "predicate": { + "type": "gcode_command_present", + "name": "LDC_CALIBRATE_DRIVE_CURRENT" + }, + "predicate_key": "gcode_command_present:LDC_CALIBRATE_DRIVE_CURRENT", + "printer_status": [ + { + "printer_id": "ender5plus", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + }, + { + "printer_id": "ender3", + "status": "not_present", + "evidence": "Command not in gcode help on this printer (build-blind / printer uses probe as Z endstop)." + } + ] + } + ], + "not_on_printers": [ + { + "predicate": { + "type": "object_present", + "name": "quad_gantry_level" + }, + "printer_ids": [ + "ender3", + "ender5plus" + ], + "reason": "Ender 3 Pro objects.list does not expose quad_gantry_level in the 2026-06-02 capture." + }, + { + "predicate": { + "type": "component_present", + "name": "mqtt" + }, + "printer_ids": [ + "ender3" + ], + "reason": "Component observed on Ender 5 Plus only in the 2026-06-02 capture." + }, + { + "predicate": { + "type": "component_present", + "name": "timelapse" + }, + "printer_ids": [ + "ender3" + ], + "reason": "Component observed on Ender 5 Plus only in the 2026-06-02 capture." + }, + { + "predicate": { + "type": "component_present", + "name": "analysis" + }, + "printer_ids": [ + "ender5plus" + ], + "reason": "Component observed on Ender 3 Pro only in the 2026-06-02 capture." + }, + { + "predicate": { + "type": "component_present", + "name": "power" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "Neither server.info capture listed Moonraker power; future power-device UI must query live component/device APIs." + }, + { + "predicate": { + "type": "macro_present", + "name": "LOAD_FILAMENT" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "The 2026-06-02 captures expose no public LOAD_FILAMENT macro on either printer. Ender 5 Plus and Ender 3 Pro expose private _LOAD_FILAMENT helpers; Extrude UI must keep live macro gating/fallback behavior." + }, + { + "predicate": { + "type": "macro_present", + "name": "UNLOAD_FILAMENT" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "The 2026-06-02 captures expose no public UNLOAD_FILAMENT macro on either printer. Ender 5 Plus exposes a private _UNLOAD_FILAMENT helper; Ender 3 Pro does not expose an unload helper in the capture." + }, + { + "predicate": { + "type": "object_present", + "name": "z_tilt" + }, + "printer_ids": [ + "ender3" + ], + "reason": "Ender 3 Pro is single-Z; z_tilt not exposed in the 2026-06-02 objects.list capture." + }, + { + "predicate": { + "type": "gcode_command_present", + "name": "Z_ENDSTOP_CALIBRATE" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "Neither printer exposed Z_ENDSTOP_CALIBRATE in /printer/gcode/help (both have a probe; PROBE_CALIBRATE is the live path). A3 probe-less sibling, gated off live." + }, + { + "predicate": { + "type": "object_present", + "name": "firmware_retraction" + }, + "printer_ids": [ + "ender3", + "ender5plus" + ], + "reason": "Neither dev printer exposes firmware_retraction in the 2026-06-02 capture; SET_RETRACTION is built blind (D-12) and gates itself off via the live object predicate." + }, + { + "predicate": { + "type": "gcode_command_present", + "name": "Z_OFFSET_APPLY_ENDSTOP" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "Both klicky printers use the probe as Z endstop; Z_OFFSET_APPLY_ENDSTOP not exposed in gcode help (2026-06-02 capture)." + }, + { + "predicate": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_CALIBRATE" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "Neither printer has a [probe_eddy_current]; build-blind eddy command absent in gcode help." + }, + { + "predicate": { + "type": "gcode_command_present", + "name": "PROBE_EDDY_CURRENT_TAP_CALIBRATE" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "Neither printer has a [probe_eddy_current]; build-blind eddy command absent in gcode help." + }, + { + "predicate": { + "type": "gcode_command_present", + "name": "LDC_CALIBRATE_DRIVE_CURRENT" + }, + "printer_ids": [ + "ender5plus", + "ender3" + ], + "reason": "Neither printer has an eddy LDC sensor; build-blind command absent in gcode help." + } + ], + "unknown": [] +} \ No newline at end of file diff --git a/docs/maintainer/README.md b/docs/maintainer/README.md new file mode 100644 index 00000000..dbb05f7a --- /dev/null +++ b/docs/maintainer/README.md @@ -0,0 +1,43 @@ +# Maintainer Docs + +This directory is the current maintainer source of truth for jiib. + +Use these docs when changing the app, reviewing AI-generated patches, or re-orienting after time away +from the project. Historical planning notes under `.planning/` are local-only project memory and may +contain stale package names, old navigation concepts, or retired implementation details. + +## Reading Order + +1. [Architecture](architecture.md) - current app structure, session spine, navigation, state flow, and UI boundaries. +2. [Testing](testing.md) - CI, local verification commands, device tests, fixtures, and docs-only verification. +3. [Release](release.md) - manual release runbook, versioning, signing, split APKs, and smoke checks. +4. [Doc Maintenance](doc-maintenance.md) - rules for keeping current docs, manuals, design docs, and local evidence in sync. + +## Existing Docs To Use + +- [Project README](../../README.md) - user-facing overview, install notes, build-from-source basics, and screenshots. +- [User manual](../manual/README.md) - end-user screen behavior and option reference. +- [UI design system](../ui_design/README.md) - Focus/Field grammar, components, tokens, and visual law. +- [ADR 0001](../adr/0001-ui-toolkit-decision.md) - accepted hybrid Compose/Views decision. + +## Local-Only Context + +- `docs/commands/` - local-only Moonraker/Klipper/Spoolman command evidence; gitignored and absent from normal public clones, except the tracked `catalog.json` and `printer-matrix.json` fixtures that `CommandCatalogDriftTest` requires in every clone. +- `.planning/` - local-only historical planning/project memory; gitignored and absent from normal public clones. + +## What To Read Before Changing + +| Change area | Read first | +|---|---| +| Session, reconnect, or printer switching | [Architecture](architecture.md), then [MoonrakerService.kt](../../app/src/main/java/works/mees/jiib/service/MoonrakerService.kt), [SpineHandle.kt](../../app/src/main/java/works/mees/jiib/di/SpineHandle.kt), [PrinterStateStore.kt](../../app/src/main/java/works/mees/jiib/state/PrinterStateStore.kt) | +| Navigation or screen hosting | [Architecture](architecture.md), then [AppShell.kt](../../app/src/main/java/works/mees/jiib/ui/shell/AppShell.kt) and [NavDest.kt](../../app/src/main/java/works/mees/jiib/ui/route/NavDest.kt) | +| Screen behavior visible to users | [User manual](../manual/README.md), [UI design system](../ui_design/README.md), and the relevant `*Screen.kt` / `*Holder.kt` | +| Testing strategy or CI expectations | [Testing](testing.md) | +| Release packaging, signing, or version bumps | [Release](release.md) | +| Durable architecture decisions | [Doc Maintenance](doc-maintenance.md) and existing [ADRs](../adr/) | +| Command contracts | [Architecture](architecture.md), `docs/commands/` (tracked `catalog.json`/`printer-matrix.json` plus local-only evidence), [CommandRegistry.kt](../../app/src/main/java/works/mees/jiib/command/CommandRegistry.kt), and [CommandCatalogDriftTest.kt](../../app/src/test/java/works/mees/jiib/command/CommandCatalogDriftTest.kt) | + +## Current Source Of Truth + +Current maintainer facts live here. If a tracked doc and a local-only planning note disagree, trust +`docs/maintainer/` unless the planning note is explicitly cited by a current maintainer doc. diff --git a/docs/maintainer/architecture.md b/docs/maintainer/architecture.md new file mode 100644 index 00000000..07a4390f --- /dev/null +++ b/docs/maintainer/architecture.md @@ -0,0 +1,103 @@ +# Maintainer Architecture + +This document describes the current jiib architecture. It intentionally does not preserve old +`dinghy` package names, retired drawer navigation, or the retired gutter region except when naming +them as historical concepts. + +## System Shape + +jiib is a native Android app in package `works.mees.jiib`. Normal app runtime enters through the +single launcher `MainActivity`; the manifest also declares `BenchActivity` for benchmark harness +launches. The app turns an Android phone or tablet into a Klipper/Moonraker control surface. The +architecture is a foreground-service-owned printer session with a Compose shell and a few classic +View render surfaces where measured performance requires them. + +Primary runtime path: + +1. `JiibApp` creates process-wide stores and the `AppContainer`. +2. `MainActivity` starts `MoonrakerService` and hosts `RootController`. +3. `MoonrakerService` owns the live Moonraker connection and constructs a per-session spine. +4. The service publishes a whole `SpineHandle` into `AppContainer`. +5. `RootController` chooses splash, connection, printer-selection, or shell entry based on app state. +6. `AppShell` collects the current spine and routes in-shell screens through Navigation-Compose `NavDest` routes. +7. Feature holders derive screen view-model state from `PrinterStateStore`, session facades, persisted prefs, and dispatchers. + +## Process And Session Ownership + +`JiibApp` is the process owner. It creates the app-level DataStore instances once and constructs +`AppContainer`. Do not create duplicate DataStore instances for the same file elsewhere. + +`AppContainer` is a process-scoped service locator. It exposes persistent preferences, derived flows, +and the current `StateFlow`. It does not own the live Moonraker WebSocket, session, or +raw `JsonRpcClient`; those belong to the service. It may own process-scoped helper clients such as +webcam HTTP and one-shot connection probes. + +`MoonrakerService` is the foreground service that owns the live printer session. On active-printer +changes it cancels the old session, builds a new `PrinterStateStore`, transport/client stack, +dispatcher, holders/facades, and publishes one atomic `SpineHandle`. + +`SpineHandle` is the immutable per-session snapshot consumed by most UI. Treat it as the normal +boundary between the service-owned live session and the shell-owned UI tree. `SystemInfoHolder` is +the named exception: it is built per session and published on `AppContainer` beside the spine because +it needs host telemetry updates from the session `JsonRpcClient`. + +## Transport And State + +The transport layer uses OkHttp for WebSocket traffic and direct HTTP-style calls such as auth, +connection probes, and webcam fetches. Command, file, and Spoolman flows go through Moonraker +JSON-RPC/proxy facades rather than a production Retrofit service. `JsonRpcClient` handles JSON-RPC +request IDs and routes notifications. `MoonrakerSession` owns connect/reconnect/handshake behavior +and writes live updates into `PrinterStateStore`. + +`PrinterStateStore` is the live state accumulator. It keeps the current `PrinterState`, capabilities, +one-shot handshake results, and high-rate/control-plane publication behavior. UI code should read +store-derived flows or holder view models rather than opening transport objects directly. + +## Navigation + +`RootController` owns the top-level routing gate before the shell: splash, connection setup, printer +selection, or the running shell. Inside the shell, `AppShell` uses Navigation-Compose with type-safe +`NavDest` routes from `ui/route/NavDest.kt`. The morphing home/root route is `NavDest.WaterfallHome`. + +The old swipe-up app drawer is gone. The old `Dest` enum is gone. Do not add new code that depends +on drawer navigation or `Dest` names. + +## UI Layout + +The shared layout grammar is Focus/Field. `ScreenScaffold` exposes Focus and Field regions only. +The old gutter region is retired; screen actions live in `FootButtonBar` instances or screen-specific +Focus/header affordances documented by the UI design system. + +Read [the UI design system](../ui_design/README.md) before changing screen structure, visual tokens, +icons, text sizing, or control intent colors. + +## Compose And View Interop + +Compose is the default shell and screen toolkit. Classic Views remain appropriate for high-churn or +render-heavy surfaces where the project has measured a performance need, such as RecyclerView-backed +lists or custom Canvas renderers. The accepted rationale lives in [ADR 0001](../adr/0001-ui-toolkit-decision.md). + +Keep feature state toolkit-agnostic where practical: holders should produce plain Kotlin/Flow state +that Compose screens and View hosts can consume. + +## Dependency Direction + +Preferred dependency direction: + +- `state/` contains headless state models and reducers. +- `net/` owns transport and protocol handling. +- `command/` owns command specs and dispatch helpers. +- `service/` assembles and owns the live session. +- `di/` exposes process-level wiring and the current session spine. +- `ui/` packages render Compose/View screens and shell routing. +- Feature-domain packages such as `calibration/`, `outputs/`, `spool/`, `systeminfo/`, `webcam/`, and `prompt/` + may own headless holders, clients, and facades consumed by UI. +- `designsystem/`, `theme/`, and `render/` provide shared UI primitives, tokens, and View/Canvas hosts. + +Avoid letting UI code construct sockets, sessions, or raw JSON-RPC clients. The service constructs +the live spine; UI consumes the spine. + +## Local-Only Historical Docs + +`.planning/` contains useful historical project memory but is gitignored and absent from normal public +clones. It may contain stale names or retired concepts. Use it for archaeology, not current truth. diff --git a/docs/maintainer/doc-maintenance.md b/docs/maintainer/doc-maintenance.md new file mode 100644 index 00000000..e994cbb1 --- /dev/null +++ b/docs/maintainer/doc-maintenance.md @@ -0,0 +1,86 @@ +# Maintainer Doc Maintenance + +This file defines which docs own current facts and how to keep them from drifting. + +## Current And Historical Sources + +Current maintainer facts live in `docs/maintainer/`. + +Local-only historical/project-memory material lives in ignored paths such as: + +- `.planning/` +- `docs/commands/` (except the tracked `catalog.json` and `printer-matrix.json` test fixtures) +- `docs/superpowers/` plans and evidence + +`docs/superpowers/` is local-only by policy: specs and plans are written there but never committed. +Treat that tree as workflow context, not as current maintainer source of truth. + +Those local-only paths may be useful for archaeology, command evidence, and planning context, but they +are not guaranteed to exist in public clones and may contain stale implementation details. + +## When To Update Each Doc Area + +Update `docs/maintainer/architecture.md` when: + +- Session ownership changes. +- Navigation structure changes. +- The service/spine boundary changes. +- A major package/layer responsibility moves. +- Compose/View interop boundaries change. + +Update `docs/maintainer/testing.md` when: + +- CI commands or workflow behavior changes. +- Local build-helper expectations change. +- Test source layout changes. +- New hardware/manual verification gates become routine. + +Update `docs/maintainer/release.md` when: + +- Versioning changes. +- Signing or keystore paths change. +- APK split strategy changes. +- Release smoke checks change. + +Update `docs/maintainer/doc-maintenance.md` when: + +- Doc ownership changes. +- Local-only path policy changes. +- CI docs-hygiene scope changes. +- Stale-term or duplicate-truth rules change. + +Update `docs/manual/` when user-visible screen behavior changes. + +Update `docs/ui_design/` when visual law, layout grammar, tokens, typography, icon policy, or control +semantics change. + +Update the tracked `docs/commands/catalog.json` and `docs/commands/printer-matrix.json` fixtures, +local-only `docs/commands/` evidence, and `CommandCatalogDriftTest` when Moonraker/Klipper/Spoolman +command contracts change. + +Add or update an ADR under `docs/adr/` when a durable architecture decision is made and future maintainers +need the rationale. + +## Local-Only Link Rule + +Tracked docs may mention local-only ignored paths, but they must label them as local-only and use +inline-code or plain-text path mentions. Do not create normal markdown links to ignored local-only paths +from tracked docs. Only link those paths from sources that are intentionally outside public-clone link checks. + +## Stale-Term Checks + +Before finishing maintainer docs, run any active stale-term list from an ignored/local script or current +implementation checklist. The scan should reject old package/path names, old branch references, retired +drawer names, and old route enum member names. Do not paste the literal rejected strings into tracked +maintainer docs; that makes the docs fail their own check. + +Negative historical facts may name retired concepts when needed. If they do, the stale-term scan must +either allowlist those exact lines or the docs should be reworded to avoid the exact tokens. + +Run the stale-phrase and dead-link dry-runs in [Testing](testing.md#docs-only-changes). The source of +truth for CI hygiene remains `.github/workflows/ci.yml`. + +## Avoiding Duplicate Truth + +Prefer links over duplication. If a fact already belongs to the user manual, UI design docs, ADRs, or +release runbook, link to that owner and summarize only what a maintainer needs to choose the right file. diff --git a/docs/maintainer/release.md b/docs/maintainer/release.md new file mode 100644 index 00000000..6ae47607 --- /dev/null +++ b/docs/maintainer/release.md @@ -0,0 +1,171 @@ +# Maintainer Release Runbook + +This is the manual release checklist for jiib. It records the current safe procedure; it does not +automate release publishing. + +## Version Fields + +Release identity is set manually in `app/build.gradle.kts`: + +```kotlin +val versionCandidate = "ALPHA" +val versionYear = 26 +val versionMonth = 7 +val versionDay = 3 +val versionRelease = 1 +``` + +The version name is: + +```text +-... +``` + +The version code is derived from the date and same-day release number, with per-ABI offsets assigned +for release split APKs. Do not derive the version from the build clock; reproducible release metadata +depends on explicit values. + +Base `versionCode` formula: + +```text +((versionYear * 10000 + versionMonth * 100 + versionDay) * 100) + (versionRelease * 10) +``` + +Release split offsets: + +- `armeabi-v7a`: base version code +- `arm64-v8a`: base version code + 1 + +The same-day release number is 1-based and should stay at or below 9 so the per-ABI offsets cannot +collide with adjacent releases. + +## Signing + +Release signing is configured from gitignored `local.properties` keys: + +```properties +jiib.releaseStoreFile= +jiib.releaseStorePassword= +jiib.releaseKeyAlias=jiib +jiib.releaseKeyPassword= +``` + +The password entries are intentionally blank in this example. Put real values only in the gitignored +`local.properties` file on the release machine. + +Current maintainer-machine keystore location, if present: + +```text +E:/Android/keystores/jiib-release.jks +``` + +Never commit the keystore, passwords, or credential-bearing `local.properties`. + +## Keystore Backup Warning + +The release keystore signs public APKs. Losing the keystore or its credentials orphans installed copies: +users would need to uninstall and reinstall instead of updating in place. + +Before publishing a release, confirm: + +- The release keystore exists at the expected path or the path in `local.properties`. +- A backup exists outside the working machine. +- The backup can be accessed by the project owner. +- No password or key material is committed to git. + +## Build Release APKs + +Run the release build from the repository root. The release machine must have `E:\Android\gw.bat` +available. Remove stale release APKs before building: + +```bash +rm -f app/build/outputs/apk/release/*.apk +``` + +```bash +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:assembleRelease --no-daemon" +``` + +Expected outputs are per-ABI APKs under: + +```text +app/build/outputs/apk/release/ +``` + +The app ships split APKs for: + +- `armeabi-v7a` +- `arm64-v8a` + +There is no universal APK. + +## Verify Release Artifacts + +`assembleRelease` can succeed without signing when release signing keys are absent, so artifact checks +are mandatory before publishing. + +Before uploading release assets: + +1. Confirm all four release signing keys in `local.properties` are present and non-empty. +2. Verify both split APKs are signed: + +```bash +expected=( + app/build/outputs/apk/release/app-armeabi-v7a-release.apk + app/build/outputs/apk/release/app-arm64-v8a-release.apk +) +for apk in "${expected[@]}"; do + [ -f "$apk" ] || { echo "Missing expected APK: $apk"; exit 1; } + apksigner verify --verbose --print-certs "$apk" || exit 1 +done +actual_count=$(find app/build/outputs/apk/release -maxdepth 1 -name '*.apk' | wc -l) +[ "$actual_count" -eq "${#expected[@]}" ] || { echo "Unexpected APK count: $actual_count"; exit 1; } +``` + +3. Inspect both APKs and confirm: + - `applicationId` is `works.mees.jiib`. + - `versionName` matches the intended release tag. + - `armeabi-v7a` uses the base `versionCode`. + - `arm64-v8a` uses base `versionCode + 1`. + - Each APK contains only its expected native ABI. + - No universal APK is present. +4. Record the tested source commit SHA: + +```bash +git rev-parse HEAD +``` + +5. Generate SHA-256 checksums for the APKs and keep them with the release notes: + +```bash +sha256sum app/build/outputs/apk/release/*.apk +``` + +## Smoke Before Publishing + +Before uploading release assets: + +1. Install and smoke both ABI APKs when hardware is available. +2. If only one ABI can be device-tested, inspect the other APK with the artifact checks above before publishing. +3. Launch the app. +4. Confirm the splash/startup path renders. +5. Confirm an existing or test printer profile can reach the expected connection state. +6. Check `README.md`, `docs/manual/README.md`, and `docs/screenshots/README.md` do not advertise a stale release tag or stale screenshot set. + +## GitHub Release Checklist + +1. Confirm working tree is clean. +2. Confirm version fields in `app/build.gradle.kts` match the intended tag. +3. Build release APKs. +4. Verify both release artifacts are signed and match the expected package, version, ABI, and checksum. +5. Install/smoke both split APKs when hardware is available. +6. Create and push the GitHub release tag from the tested commit SHA, or explicitly select that SHA in GitHub. +7. Upload both per-ABI APKs with clear names. +8. Include compatibility notes: Android 6.0+, no Play Services required, choose APK by CPU ABI. +9. Link the user manual and screenshot gallery. + +## What Not To Do + +- Do not publish unsigned release APKs as official release assets. +- Do not upload the keystore or signing credentials. +- Do not change package/application ID after public releases unless intentionally planning a reinstall-only break. diff --git a/docs/maintainer/testing.md b/docs/maintainer/testing.md new file mode 100644 index 00000000..e1787185 --- /dev/null +++ b/docs/maintainer/testing.md @@ -0,0 +1,160 @@ +# Maintainer Testing + +This document describes the verification surface for current jiib maintenance work. + +## CI Gate + +GitHub Actions runs on pushes to `main` and `gsd/**`, and on pull requests to `main`. The build job runs: + +```bash +./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug --no-daemon +``` + +The hygiene job checks `README.md`, top-level tracked `docs/*.md`, and tracked +`docs/maintainer/*.md` for stale phrases and dead internal Markdown links. It intentionally excludes +local-only ignored trees such as `.planning/`, `docs/commands/`, and `docs/superpowers/`. + +If `.github/workflows/ci.yml` does not target `main`, fix CI before treating this gate as active. + +## Local Build Environment + +The project is developed under WSL, but local Android builds normally run through the Windows-side +helper so adb can reach physical devices. + +Use this command shape from the repo root: + +```bash +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat " +``` + +Examples: + +```bash +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:testDebugUnitTest --no-daemon" +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:lintDebug --no-daemon" +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:assembleDebug --no-daemon" +``` + +CI uses Linux and the checked-in Gradle wrapper directly. + +## Host Unit Tests + +Host tests live under `app/src/test/java/works/mees/jiib/`. They cover most pure logic, reducers, +holders, command building, parser behavior, fixtures, and protocol edge cases. + +Common targeted run: + +```bash +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:testDebugUnitTest --tests works.mees.jiib.state.PrinterStateReducerTest --no-daemon" +``` + +Run the full host suite when changing shared state, command contracts, parser behavior, or holder logic: + +```bash +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:testDebugUnitTest --no-daemon" +``` + +## Instrumented And Device Tests + +Instrumented tests live under `app/src/androidTest/java/works/mees/jiib/`. They cover lifecycle, +service survival, live/reconnect smoke, camera/webcam surfaces, and UI behavior that cannot be proven +reliably on the JVM. + +Run device tests only when the change affects Android lifecycle, camera, foreground service behavior, +View interop, or device-specific UI behavior: + +```bash +/mnt/c/Windows/System32/cmd.exe /c "E:\Android\gw.bat :app:connectedAndroidTest --no-daemon" +``` + +Some device checks require a real printer or specific local hardware and are not autonomous CI gates. + +## Fixtures And Goldens + +Test resources live under `app/src/test/resources/`. Captured JSON and binary fixtures are used to keep +protocol and parser tests deterministic. `docs/commands/catalog.json` and `docs/commands/printer-matrix.json` +are tracked because `CommandCatalogDriftTest` reads them; the rest of `docs/commands/` is local-only +command evidence and capture material, gitignored and possibly absent from public clones. + +When adding or changing a command contract, check: + +- `app/src/main/java/works/mees/jiib/command/CommandRegistry.kt` +- `app/src/test/java/works/mees/jiib/command/CommandCatalogDriftTest.kt` +- the tracked `docs/commands/catalog.json` and `docs/commands/printer-matrix.json` fixtures +- additional local-only `docs/commands/` evidence, if available + +## Docs-Only Changes + +For changes limited to `docs/maintainer/*.md`, local-only `.planning/codebase/*.md` archive banners, +or README-style documentation: + +1. Run internal-link checks for the files touched. +2. Run stale-term scans for old package/navigation names. +3. Do not run the full Android suite unless build files or source files changed. + +Keep literal stale-term regexes in implementation plans or scripts that CI does not scan. Do not paste +old package names, old branch names, retired drawer class names, or old route enum member names into +tracked maintainer docs just to document the scan; that would make the docs fail the scan themselves. +Negative historical facts may name retired concepts when needed, but stale-term scans should either +allowlist those lines explicitly or the docs should avoid the exact tokens. + +Suggested stale-phrase dry run: + +```bash +mapfile -t sources < <( + git ls-files README.md ':(glob)docs/*.md' ':(glob)docs/maintainer/*.md' \ + ':!:docs/top-down-audit-roadmap.md' \ + ':!:docs/superpowers/**' \ + ':!:docs/commands/**' +) +pattern=$(sed -n 's/.*grep -rn "\([^"]*\)" .*/\1/p' .github/workflows/ci.yml | head -1) +if [ -z "$pattern" ]; then + echo "Unable to extract stale-phrase pattern from CI workflow" + exit 1 +fi +if ((${#sources[@]})) && grep -rn "$pattern" "${sources[@]}"; then + exit 1 +fi +echo OK +``` + +Expected: `OK`. + +Suggested dead internal Markdown-link dry run: + +```bash +rm -f /tmp/dead-links +mapfile -t sources < <( + git ls-files README.md ':(glob)docs/*.md' ':(glob)docs/maintainer/*.md' \ + ':!:docs/top-down-audit-roadmap.md' \ + ':!:docs/superpowers/**' \ + ':!:docs/commands/**' +) +for src in "${sources[@]}"; do + [ -f "$src" ] || continue + dir=$(dirname "$src") + { grep -oE '\]\([^)# ]+\.md(#[^)]*)?\)' "$src" 2>/dev/null || true; } \ + | sed -E 's/^\]\(//; s/#[^)]*//; s/\)$//' \ + | sort -u \ + | while read -r target; do + case "$target" in + http://*|https://*|*://*|/*|[A-Za-z]:/*|*'\'*) continue ;; + esac + if [ ! -e "$dir/$target" ] && [ ! -e "$target" ]; then + echo "DEAD LINK in $src -> $target" | tee -a /tmp/dead-links + fi + done +done +if [ -s /tmp/dead-links ]; then + exit 1 +fi +echo OK +``` + +Expected: `OK`. + +## Manual Review Still Matters + +The app has device- and printer-dependent behavior that tests cannot fully model. For user-visible screen +changes, compare the behavior against [the manual](../manual/README.md), [the UI design system](../ui_design/README.md), +and relevant screenshots before shipping.