Skip to main content
Glama

remove_relation

DestructiveIdempotent

Delete one typed relation and its rationale from a source node. Dry-run by default; pass confirm:true to write, with expected_mtime to prevent conflicts.

Instructions

Safely remove one exact typed relation and its relation_notes rationale from a source node. Defaults to dry-run; pass confirm:true to write. Supports expected_mtime conflict protection. Use this instead of replacing a whole frontmatter array with patch_concept.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toYesTarget slug.
fromYesSource slug.
typeYes
confirmNoActually remove when true; default is dry-run.
expected_mtimeNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
toYes
keyYes
fromYes
typeYes
dryRunYes
existsYes
changedYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
removedRationaleNo
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv1.3.0
    • changedOutput schema / properties / postWriteMaintenance / properties / actions / items / properties / kind / enum
      Previous value: -[
      -  "inspect_compile_issue",
      -  "break_dependency_cycle",
      -  "canonicalize_graph_arrays",
      -  "resolve_dangling_reference",
      -  "add_missing_relation",
      -  "materialize_external_element",
      -  "unassigned_node",
      -  "empty_domain",
      -  "separate_evidence_from_concept",
      -  "fold_bulk_siblings",
      -  "retire_unearned_node",
      -  "capability_without_evidence",
      -  "rejudge_summary_membership"
      -]New value: +[
      +  "inspect_compile_issue",
      +  "break_dependency_cycle",
      +  "canonicalize_graph_arrays",
      +  "resolve_dangling_reference",
      +  "add_missing_relation",
      +  "materialize_external_element",
      +  "unassigned_node",
      +  "empty_domain",
      +  "separate_evidence_from_concept",
      +  "fold_bulk_siblings",
      +  "retire_unearned_node",
      +  "capability_without_evidence",
      +  "rejudge_summary_membership",
      +  "definition_missing",
      +  "boundary_missing",
      +  "epistemic_exclusion",
      +  "folder_only_evidence",
      +  "slug_outside_kind_folder",
      +  "uncertainty_missing",
      +  "retire_starter_example"
      +]
    • changedOutput schema / properties / postWriteMaintenance / properties / filters / properties / kinds / items / enum
      Previous value: -[
      -  "inspect_compile_issue",
      -  "break_dependency_cycle",
      -  "canonicalize_graph_arrays",
      -  "resolve_dangling_reference",
      -  "add_missing_relation",
      -  "materialize_external_element",
      -  "unassigned_node",
      -  "empty_domain",
      -  "separate_evidence_from_concept",
      -  "fold_bulk_siblings",
      -  "retire_unearned_node",
      -  "capability_without_evidence",
      -  "rejudge_summary_membership"
      -]New value: +[
      +  "inspect_compile_issue",
      +  "break_dependency_cycle",
      +  "canonicalize_graph_arrays",
      +  "resolve_dangling_reference",
      +  "add_missing_relation",
      +  "materialize_external_element",
      +  "unassigned_node",
      +  "empty_domain",
      +  "separate_evidence_from_concept",
      +  "fold_bulk_siblings",
      +  "retire_unearned_node",
      +  "capability_without_evidence",
      +  "rejudge_summary_membership",
      +  "definition_missing",
      +  "boundary_missing",
      +  "epistemic_exclusion",
      +  "folder_only_evidence",
      +  "slug_outside_kind_folder",
      +  "uncertainty_missing",
      +  "retire_starter_example"
      +]
    • changedOutput schema / properties / postWriteMaintenance / properties / nextExecutableAction / properties / kind / enum
      Previous value: -[
      -  "inspect_compile_issue",
      -  "break_dependency_cycle",
      -  "canonicalize_graph_arrays",
      -  "resolve_dangling_reference",
      -  "add_missing_relation",
      -  "materialize_external_element",
      -  "unassigned_node",
      -  "empty_domain",
      -  "separate_evidence_from_concept",
      -  "fold_bulk_siblings",
      -  "retire_unearned_node",
      -  "capability_without_evidence",
      -  "rejudge_summary_membership"
      -]New value: +[
      +  "inspect_compile_issue",
      +  "break_dependency_cycle",
      +  "canonicalize_graph_arrays",
      +  "resolve_dangling_reference",
      +  "add_missing_relation",
      +  "materialize_external_element",
      +  "unassigned_node",
      +  "empty_domain",
      +  "separate_evidence_from_concept",
      +  "fold_bulk_siblings",
      +  "retire_unearned_node",
      +  "capability_without_evidence",
      +  "rejudge_summary_membership",
      +  "definition_missing",
      +  "boundary_missing",
      +  "epistemic_exclusion",
      +  "folder_only_evidence",
      +  "slug_outside_kind_folder",
      +  "uncertainty_missing",
      +  "retire_starter_example"
      +]
    • changedOutput schema / properties / postWriteMaintenance / properties / nextReviewAction / properties / kind / enum
      Previous value: -[
      -  "inspect_compile_issue",
      -  "break_dependency_cycle",
      -  "canonicalize_graph_arrays",
      -  "resolve_dangling_reference",
      -  "add_missing_relation",
      -  "materialize_external_element",
      -  "unassigned_node",
      -  "empty_domain",
      -  "separate_evidence_from_concept",
      -  "fold_bulk_siblings",
      -  "retire_unearned_node",
      -  "capability_without_evidence",
      -  "rejudge_summary_membership"
      -]New value: +[
      +  "inspect_compile_issue",
      +  "break_dependency_cycle",
      +  "canonicalize_graph_arrays",
      +  "resolve_dangling_reference",
      +  "add_missing_relation",
      +  "materialize_external_element",
      +  "unassigned_node",
      +  "empty_domain",
      +  "separate_evidence_from_concept",
      +  "fold_bulk_siblings",
      +  "retire_unearned_node",
      +  "capability_without_evidence",
      +  "rejudge_summary_membership",
      +  "definition_missing",
      +  "boundary_missing",
      +  "epistemic_exclusion",
      +  "folder_only_evidence",
      +  "slug_outside_kind_folder",
      +  "uncertainty_missing",
      +  "retire_starter_example"
      +]
  2. Changed8 schema fields changedv1.2.5
    • addedOutput schema / properties / postWriteMaintenance / properties / actions / items / allOf
      Added value: +[
      +  {
      +    "if": {
      +      "properties": {
      +        "executable": {
      +          "const": true
      +        }
      +      },
      +      "required": [
      +        "executable"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "proposedAction": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "args": {
      +              "oneOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "kind": {
      +                      "enum": [
      +                        "project",
      +                        "domain",
      +                        "capability",
      +                        "element",
      +                        "document",
      +                        "vault-readme"
      +                      ],
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "slug": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "title": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "slug",
      +                    "kind",
      +                    "title"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "from": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "to": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "type": {
      +                      "enum": [
      +                        "depends_on",
      +                        "relates",
      +                        "contains",
      +                        "describes",
      +                        "domains",
      +                        "capabilities",
      +                        "elements",
      +                        "domain"
      +                      ],
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "why": {
      +                      "description": "One-line rationale for this relation (\"A leans on B because ...\"). Stored in the SAME frontmatter write as the ref (relation_notes map) — write it whenever you know the reason; a graph edge without a why is a mind-map line, not an ontology claim.",
      +                      "maxLength": 300,
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "from",
      +                    "to",
      +                    "type"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expected_mtime": {
      +                      "minimum": 0,
      +                      "type": "number"
      +                    },
      +                    "frontmatter": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "broader": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "capabilities": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "contains": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "dependencies": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "depends_on": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "describes": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "domains": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "elements": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "relates": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    "slug": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "slug",
      +                    "frontmatter",
      +                    "expected_mtime"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "tool": {
      +              "enum": [
      +                "add_concept",
      +                "add_relation",
      +                "patch_concept"
      +              ],
      +              "minLength": 1,
      +              "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "args"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "proposedAction"
      +      ]
      +    }
      +  }
      +]
    • changedOutput schema / properties / postWriteMaintenance / properties / actions / items / required
      Previous value: -[
      -  "id",
      -  "phase",
      -  "kind",
      -  "severity",
      -  "score",
      -  "executable",
      -  "reason",
      -  "proposedAction"
      -]New value: +[
      +  "id",
      +  "phase",
      +  "kind",
      +  "severity",
      +  "score",
      +  "executable",
      +  "reason"
      +]
    • addedOutput schema / properties / postWriteMaintenance / properties / nextExecutableAction / allOf
      Added value: +[
      +  {
      +    "if": {
      +      "properties": {
      +        "executable": {
      +          "const": true
      +        }
      +      },
      +      "required": [
      +        "executable"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "proposedAction": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "args": {
      +              "oneOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "kind": {
      +                      "enum": [
      +                        "project",
      +                        "domain",
      +                        "capability",
      +                        "element",
      +                        "document",
      +                        "vault-readme"
      +                      ],
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "slug": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "title": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "slug",
      +                    "kind",
      +                    "title"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "from": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "to": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "type": {
      +                      "enum": [
      +                        "depends_on",
      +                        "relates",
      +                        "contains",
      +                        "describes",
      +                        "domains",
      +                        "capabilities",
      +                        "elements",
      +                        "domain"
      +                      ],
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "why": {
      +                      "description": "One-line rationale for this relation (\"A leans on B because ...\"). Stored in the SAME frontmatter write as the ref (relation_notes map) — write it whenever you know the reason; a graph edge without a why is a mind-map line, not an ontology claim.",
      +                      "maxLength": 300,
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "from",
      +                    "to",
      +                    "type"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expected_mtime": {
      +                      "minimum": 0,
      +                      "type": "number"
      +                    },
      +                    "frontmatter": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "broader": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "capabilities": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "contains": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "dependencies": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "depends_on": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "describes": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "domains": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "elements": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "relates": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    "slug": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "slug",
      +                    "frontmatter",
      +                    "expected_mtime"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "tool": {
      +              "enum": [
      +                "add_concept",
      +                "add_relation",
      +                "patch_concept"
      +              ],
      +              "minLength": 1,
      +              "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "args"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "proposedAction"
      +      ]
      +    }
      +  }
      +]
    • changedOutput schema / properties / postWriteMaintenance / properties / nextExecutableAction / required
      Previous value: -[
      -  "id",
      -  "phase",
      -  "kind",
      -  "severity",
      -  "score",
      -  "executable",
      -  "reason",
      -  "proposedAction"
      -]New value: +[
      +  "id",
      +  "phase",
      +  "kind",
      +  "severity",
      +  "score",
      +  "executable",
      +  "reason"
      +]
    • addedOutput schema / properties / postWriteMaintenance / properties / nextReviewAction / allOf
      Added value: +[
      +  {
      +    "if": {
      +      "properties": {
      +        "executable": {
      +          "const": true
      +        }
      +      },
      +      "required": [
      +        "executable"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "proposedAction": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "args": {
      +              "oneOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "kind": {
      +                      "enum": [
      +                        "project",
      +                        "domain",
      +                        "capability",
      +                        "element",
      +                        "document",
      +                        "vault-readme"
      +                      ],
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "slug": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "title": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "slug",
      +                    "kind",
      +                    "title"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "from": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "to": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "type": {
      +                      "enum": [
      +                        "depends_on",
      +                        "relates",
      +                        "contains",
      +                        "describes",
      +                        "domains",
      +                        "capabilities",
      +                        "elements",
      +                        "domain"
      +                      ],
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    },
      +                    "why": {
      +                      "description": "One-line rationale for this relation (\"A leans on B because ...\"). Stored in the SAME frontmatter write as the ref (relation_notes map) — write it whenever you know the reason; a graph edge without a why is a mind-map line, not an ontology claim.",
      +                      "maxLength": 300,
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "from",
      +                    "to",
      +                    "type"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expected_mtime": {
      +                      "minimum": 0,
      +                      "type": "number"
      +                    },
      +                    "frontmatter": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "broader": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "capabilities": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "contains": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "dependencies": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "depends_on": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "describes": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "domains": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "elements": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        },
      +                        "relates": {
      +                          "items": {
      +                            "minLength": 1,
      +                            "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                            "type": "string"
      +                          },
      +                          "maxItems": 500,
      +                          "type": "array"
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    "slug": {
      +                      "minLength": 1,
      +                      "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "slug",
      +                    "frontmatter",
      +                    "expected_mtime"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "tool": {
      +              "enum": [
      +                "add_concept",
      +                "add_relation",
      +                "patch_concept"
      +              ],
      +              "minLength": 1,
      +              "pattern": "^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "args"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "proposedAction"
      +      ]
      +    }
      +  }
      +]
    • changedOutput schema / properties / postWriteMaintenance / properties / nextReviewAction / required
      Previous value: -[
      -  "id",
      -  "phase",
      -  "kind",
      -  "severity",
      -  "score",
      -  "executable",
      -  "reason",
      -  "proposedAction"
      -]New value: +[
      +  "id",
      +  "phase",
      +  "kind",
      +  "severity",
      +  "score",
      +  "executable",
      +  "reason"
      +]
    • addedOutput schema / properties / postWriteMaintenance / properties / summary / properties / capabilitiesWithoutEvidence
      Added value: +{
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / postWriteMaintenance / properties / summary / required
      Previous value: -[
      -  "totalActions",
      -  "filteredActions",
      -  "remainingActions",
      -  "executableActions",
      -  "reviewActions",
      -  "compileIssues",
      -  "dependencyCycles",
      -  "canonicalizationActions",
      -  "danglingReferences",
      -  "relationRecommendations",
      -  "externalElementRefs",
      -  "externalElementRefsIgnored",
      -  "unassignedNodes",
      -  "emptyDomains"
      -]New value: +[
      +  "totalActions",
      +  "filteredActions",
      +  "remainingActions",
      +  "executableActions",
      +  "reviewActions",
      +  "compileIssues",
      +  "dependencyCycles",
      +  "canonicalizationActions",
      +  "danglingReferences",
      +  "relationRecommendations",
      +  "externalElementRefs",
      +  "externalElementRefsIgnored",
      +  "unassignedNodes",
      +  "emptyDomains",
      +  "capabilitiesWithoutEvidence"
      +]
  3. First observedv0.13.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds valuable context beyond annotations: the default dry-run, the confirm flag to write, the expected_mtime conflict protection, and the removal of relation_notes. This is useful behavioral detail without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The primary purpose and safety behavior are front-loaded, and the alternative is stated concisely. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, safety, the alternative, and conflict protection. It has an output schema, so return values don't need explanation. It doesn't explicitly state idempotency, but the annotation covers that. The only minor gap is a more detailed explanation of the type parameter, but the enum is self-explanatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%: from, to, and confirm have descriptions, but type and expected_mtime do not. The description adds meaning for expected_mtime by mentioning 'expected_mtime conflict protection,' but type is only an enum without further explanation. Since coverage is moderate, the description partially compensates but doesn't fully elaborate all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('remove one exact typed relation and its relation_notes rationale') on a specific resource (a source node). It clearly distinguishes from patch_concept by explicitly saying 'Use this instead of replacing a whole frontmatter array with patch_concept.' This meets the high bar for purpose clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit alternative (patch_concept) and a clear directive to use this tool instead. It also communicates the default dry-run behavior and the confirm flag for writing. However, it doesn't contrast with other relation tools like replace_relation or add_relation, so it's not a full when-to-use/when-not-to-use guide, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.