Skip to main content
Glama

replace_relation

Destructive

Swap an existing relation to a new target or type within a Markdown ontology, preserving rationale in the same write. Defaults to dry-run; pass confirm to commit.

Instructions

Atomically replace one exact relation with a new target and/or type, moving or replacing its rationale in the same frontmatter write. Defaults to dry-run; pass confirm:true to write. Supports expected_mtime.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
whyNo
fromYesSource slug.
newToYesReplacement target slug.
oldToYesCurrent target slug.
confirmNo
newTypeYes
oldTypeYes
expected_mtimeNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
fromYes
dryRunYes
changedYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
newRelationYes
oldRelationYes
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.
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.6/5.0
Behavior5/5

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

Adds key behaviors beyond destructiveHint annotation: dry-run by default, confirm:true required to write, atomic single frontmatter write, and rationale move/replace side effect. Also mentions expected_mtime support for concurrency. All are significant and not present in 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?

Three tight sentences, front-loaded with the core action. No filler; every clause adds useful information.

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?

For an 8-parameter mutation with destructive hint and output schema, the description covers the essential call semantics: what is replaced, how to confirm, and concurrency support. Missing prerequisites like existence of old relation, but this is reasonably implied by 'exact relation' and the low-level schema.

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

Parameters4/5

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

With only 38% schema description coverage, the description compensates by explaining confirm (dry-run), expected_mtime, and why (rationale). It also clarifies oldTo/oldType as the exact relation and newTo/newType as replacement target/type, though not exhaustively.

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?

States a specific verb+resource: 'Atomically replace one exact relation with a new target and/or type'. This clearly distinguishes it from siblings like add_relation/remove_relation by focusing on exact-match replacement and atomic rationale handling.

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?

Clear context that this is for replacing an existing relation and requires explicit confirm:true to commit. Does not name alternatives or exclusions, but the atomicity and dry-run default imply when to use it over separate remove/add operations.

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