Skip to main content
Glama

delete_concept

Destructive

Permanently deletes a vault Markdown concept while checking backlinks first: dry-run without confirm, refuse when referrers exist, or force deletion. Returns deleted content for restore.

Instructions

⚠ DESTRUCTIVE — permanently deletes the vault .md file. Two-stage safety: Both preview and confirmed responses identify the node by permanent uid plus current slug. 1. Without confirm: true the call is a dry-run — returns a backlinks preview without deleting. 2. If any backlinks exist the call throws — refuses while other nodes still reference this slug. Pass force: true to delete anyway (the referrers become dangling). Successful deletion returns the frontmatter + body so a user who deleted by mistake can recreate the node via add_concept. Directories are left untouched. Pass expected_mtime to guard against concurrent external edits — throws if the file changed on disk since you read it. Confirmed deletes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers for the final graph.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesVault-relative slug (omit the .md extension).
forceNoDelete even when backlinks exist (referrers become dangling). Defaults to false.
confirmNoActually delete when true. Omit or false for a dry-run (backlinks preview, no delete).
expected_mtimeNoOptional conflict guard — file mtimeMs at read time. If it differs at delete time, the call throws.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
uidYes
slugYes
dryRunYes
forcedNo
changedNo
messageNo
capturedNo
filePathYes
backlinksNo
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.
backlinksAtDeleteNo
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. Changed12 schema fields changedv1.4.0
    • addedOutput schema / properties / backlinks / items / oneOf
      Added value: +[
      +  {
      +    "properties": {
      +      "isNode": {
      +        "const": true
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ]
      +  },
      +  {
      +    "not": {
      +      "anyOf": [
      +        {
      +          "required": [
      +            "uid"
      +          ]
      +        },
      +        {
      +          "required": [
      +            "kind"
      +          ]
      +        }
      +      ]
      +    },
      +    "properties": {
      +      "isNode": {
      +        "const": false
      +      }
      +    }
      +  }
      +]
    • removedOutput schema / properties / backlinks / items / properties / domain / minLength
      Removed value: -1
    • removedOutput schema / properties / backlinks / items / properties / domain / pattern
      Removed value: -"^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$"
    • addedOutput schema / properties / backlinks / items / properties / isNode
      Added value: +{
      +  "description": "True when the referrer is a graph node (has `kind:`). False for a wiki page or other Markdown that links to the target; such a row carries neither `uid` nor `kind`.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / backlinks / items / properties / uid / description
      Added value: +"The referring node's permanent UID. Absent when that node has no valid `uid:` (validate_vault reports it) and on every non-node row."
    • changedOutput schema / properties / backlinks / items / required
      Previous value: -[
      -  "uid",
      -  "slug",
      -  "kind",
      -  "title",
      -  "mtime"
      -]New value: +[
      +  "slug",
      +  "isNode",
      +  "title",
      +  "mtime"
      +]
    • addedOutput schema / properties / backlinksAtDelete / items / oneOf
      Added value: +[
      +  {
      +    "properties": {
      +      "isNode": {
      +        "const": true
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ]
      +  },
      +  {
      +    "not": {
      +      "anyOf": [
      +        {
      +          "required": [
      +            "uid"
      +          ]
      +        },
      +        {
      +          "required": [
      +            "kind"
      +          ]
      +        }
      +      ]
      +    },
      +    "properties": {
      +      "isNode": {
      +        "const": false
      +      }
      +    }
      +  }
      +]
    • removedOutput schema / properties / backlinksAtDelete / items / properties / domain / minLength
      Removed value: -1
    • removedOutput schema / properties / backlinksAtDelete / items / properties / domain / pattern
      Removed value: -"^(?!\\s)(?!.*\\s$)(?!.*\\u0000).+$"
    • addedOutput schema / properties / backlinksAtDelete / items / properties / isNode
      Added value: +{
      +  "description": "True when the referrer is a graph node (has `kind:`). False for a wiki page or other Markdown that links to the target; such a row carries neither `uid` nor `kind`.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / backlinksAtDelete / items / properties / uid / description
      Added value: +"The referring node's permanent UID. Absent when that node has no valid `uid:` (validate_vault reports it) and on every non-node row."
    • changedOutput schema / properties / backlinksAtDelete / items / required
      Previous value: -[
      -  "uid",
      -  "slug",
      -  "kind",
      -  "title",
      -  "mtime"
      -]New value: +[
      +  "slug",
      +  "isNode",
      +  "title",
      +  "mtime"
      +]
  2. 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"
      +]
  3. 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"
      +]
  4. First observedv0.13.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as destructive, but the description adds substantial behavior: two-stage safety, backlink throw, dangling referrers after force, returned frontmatter/body for recovery, directory preservation, mtime conflict, and maintenance output. This goes well beyond what the annotations disclose.

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

Conciseness4/5

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

Front-loads the destructive warning and numbered safety flow, so critical information appears early. The final sentence detailing postWriteMaintenance fields is long and partly redundant with the output schema, but the overall structure is efficient for a complex destructive operation.

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

Completeness5/5

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

For a destructive tool with rich annotations and an output schema, the description closes the remaining gaps: safety staging, refusal/override conditions, recovery output, and concurrency guard. An agent has enough context to invoke it without surprise.

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?

Schema coverage is 100%, so the baseline is 3; the description nevertheless adds semantic consequences for confirm, force, and expected_mtime (dry-run behavior, dangling referrers, conflict throw). It does not add new syntax for slug, but it deepens the operational meaning of the 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?

States a specific destructive verb and resource ('permanently deletes the vault .md file') and scopes it to concept deletion. An agent can distinguish this from sibling read/list/relation tools without opening the schema.

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?

Provides explicit operational guidance: dry-run without confirm, refusal when backlinks exist, force override with the dangling-referrer consequence, and expected_mtime as a concurrency guard. It lacks a direct comparison to sibling alternatives, but no other concept-deletion sibling exists.

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