Skip to main content
Glama

Scope a property turnover

property_turnover_scope
Read-onlyIdempotent

Turns move-out inspection findings for a US rental unit into a priced make-ready scope. For a first estimate use property_turnover_quick_estimate (plain words). Inputs: property (ZIP, bedrooms, bathrooms, optional details) and findings, each an issue code from property_turnover_issue_codes with rooms, status, quantity and the original words (source_text); optional rate_card, decisions, detail. Returns tasks by trade, low/expected/high costs, priorities, vendor scopes, refer-outs, assumptions, unknowns and download links. Not for: diagnosing hazards, legal advice on deposits, remodel bids, properties outside the US. Deterministic and source-cited: the same input gives the same result.

Input Schema

NameRequiredDescriptionDefault
readNoDeprecated and ignored: scope reads no free text.parser
auditNoAlso return the run record and input/result hashes (an audit trail). Default false.
detailNosummary (small): totals, trade scopes, lines tied to findings. full: all.summary
retainNofalse: keep none of this request's text.
findingsNoMove-out inspection findings, one per observed condition, coded.
propertyYesThe unit: ZIP, size, type and year built.
tax_rateNoApplied to all lines, e.g. 0.07.
decisionsNoApprove, decline or defer lines or findings from an earlier scope.
rate_cardNoYour own prices by trade or task; they replace the regional library prices.
standardsNoFinish profile, price tier and overrides.
client_refsNoYour own reference ids (e.g. unit_id, job_id). Echoed back, never used.
constraintsNoTarget ready date, whether the unit is occupied, access notes.
serve_pinnedNoOptional, with expect_ruleset. True asks us to answer under the ruleset version you named even when the rules have changed since, from that version's signed bundle; the result says so in served_from_bundle. We refuse a version older than 12 months, one a later correction or law change replaced for your state, or one we have no bundle for. Default false: the call fails whenever the rules have changed.
trade_vendorsNoVendor (name, contact) to put on each trade's lines.
expect_rulesetNoOptional. The ruleset version you built against, as results carry it in provenance.ruleset_version (e.g. 'sd-2026.11.14'), or its sha256: hash. If the rules have changed since, the call fails (nothing computed, nothing charged) and says what is in force now, so you upgrade on your own schedule. Leave it out to answer under the current rules.

Output Schema

NameRequiredDescriptionDefault
runNo
linksNo
resultYes
reviewNo
readingNo
signatureNo
input_hashNo
client_refsNo
deprecationNo
result_hashNo
request_hashNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed35 schema fields changed
    • removedOutput schema / $defs
      Removed value: -{
      -  "CostRange": {
      -    "properties": {
      -      "expected": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "high": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "low": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "low",
      -      "expected",
      -      "high"
      -    ],
      -    "type": "object"
      -  },
      -  "Deprecation": {
      -    "properties": {
      -      "field": {
      -        "type": "string"
      -      },
      -      "until": {
      -        "format": "date",
      -        "type": "string"
      -      },
      -      "use": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "field",
      -      "until",
      -      "use"
      -    ],
      -    "type": "object"
      -  },
      -  "Extent": {
      -    "enum": [
      -      "spot",
      -      "partial",
      -      "full"
      -    ],
      -    "type": "string"
      -  },
      -  "FindingResolution": {
      -    "properties": {
      -      "code": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "confidence": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "confirmed": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "extent": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/Extent"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "finding_id": {
      -        "type": "string"
      -      },
      -      "issue_name": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "line_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "location": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "match_note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "model": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "needs_review": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "not_billed_reason": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "none",
      -              "ok",
      -              "done",
      -              "no_condition"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "resolution": {
      -        "enum": [
      -          "exact",
      -          "alias",
      -          "ai",
      -          "unmapped",
      -          "not_billed"
      -        ],
      -        "type": "string"
      -      },
      -      "suggested_codes": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "suggestions": {
      -        "items": {
      -          "$ref": "#/$defs/Suggestion"
      -        },
      -        "type": "array"
      -      },
      -      "text": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "uncertain": {
      -        "default": false,
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "finding_id",
      -      "resolution",
      -      "code",
      -      "extent"
      -    ],
      -    "type": "object"
      -  },
      -  "Links": {
      -    "properties": {
      -      "downloads": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "how_to_get_files": {
      -        "type": "string"
      -      },
      -      "web_tool": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "web_tool_prefilled": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "how_to_get_files"
      -    ],
      -    "type": "object"
      -  },
      -  "Note": {
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "finding_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "line_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "code",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  "Phase": {
      -    "enum": [
      -      "assess",
      -      "trash_out",
      -      "repairs",
      -      "paint",
      -      "flooring",
      -      "appliances",
      -      "cleaning",
      -      "punch",
      -      "rekey"
      -    ],
      -    "type": "string"
      -  },
      -  "PriceBasis": {
      -    "enum": [
      -      "rate_card",
      -      "unit_price",
      -      "labor_derived",
      -      "placeholder"
      -    ],
      -    "type": "string"
      -  },
      -  "PriceTier": {
      -    "enum": [
      -      "bulk_contract",
      -      "pm_vendor",
      -      "retail_one_off"
      -    ],
      -    "type": "string"
      -  },
      -  "Priority": {
      -    "enum": [
      -      "must",
      -      "should",
      -      "could"
      -    ],
      -    "type": "string"
      -  },
      -  "Profile": {
      -    "enum": [
      -      "minimum",
      -      "standard",
      -      "premium"
      -    ],
      -    "type": "string"
      -  },
      -  "Provenance": {
      -    "properties": {
      -      "rules_as_of": {
      -        "anyOf": [
      -          {
      -            "format": "date",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "ruleset_hash": {
      -        "type": "string"
      -      },
      -      "ruleset_id": {
      -        "type": "string"
      -      },
      -      "ruleset_version": {
      -        "type": "string"
      -      },
      -      "sources": {
      -        "items": {
      -          "$ref": "#/$defs/SourceRef"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "ruleset_id",
      -      "ruleset_version",
      -      "ruleset_hash",
      -      "sources"
      -    ],
      -    "type": "object"
      -  },
      -  "RateCardUse": {
      -    "properties": {
      -      "entry": {
      -        "type": "integer"
      -      },
      -      "lines": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "note": {
      -        "type": "string"
      -      },
      -      "target": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "entry",
      -      "target",
      -      "note"
      -    ],
      -    "type": "object"
      -  },
      -  "Reading": {
      -    "properties": {
      -      "counts": {
      -        "$ref": "#/$defs/ReadingCounts"
      -      },
      -      "findings": {
      -        "items": {
      -          "additionalProperties": true,
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "kind": {
      -        "enum": [
      -          "notes",
      -          "document"
      -        ],
      -        "type": "string"
      -      },
      -      "model": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "notes": {
      -        "items": {
      -          "$ref": "#/$defs/ReadingNote"
      -        },
      -        "type": "array"
      -      },
      -      "prompt_version": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "kind",
      -      "counts",
      -      "findings"
      -    ],
      -    "type": "object"
      -  },
      -  "ReadingCounts": {
      -    "properties": {
      -      "ai": {
      -        "type": "integer"
      -      },
      -      "parser": {
      -        "type": "integer"
      -      },
      -      "total": {
      -        "type": "integer"
      -      },
      -      "unmatched": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "total",
      -      "ai",
      -      "parser",
      -      "unmatched"
      -    ],
      -    "type": "object"
      -  },
      -  "ReadingNote": {
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "finding_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "kind": {
      -        "enum": [
      -          "warning",
      -          "assumption"
      -        ],
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "code",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  "ReferOutNote": {
      -    "properties": {
      -      "blocks_phases": {
      -        "items": {
      -          "$ref": "#/$defs/Phase"
      -        },
      -        "type": "array"
      -      },
      -      "finding_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "kind": {
      -        "enum": [
      -          "assessment",
      -          "compliance"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "professional": {
      -        "type": "string"
      -      },
      -      "reason": {
      -        "type": "string"
      -      },
      -      "sources": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "unconfirmed": {
      -        "default": false,
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "name",
      -      "professional",
      -      "reason",
      -      "kind",
      -      "finding_ids",
      -      "blocks_phases",
      -      "sources"
      -    ],
      -    "type": "object"
      -  },
      -  "Region": {
      -    "properties": {
      -      "basis": {
      -        "enum": [
      -          "metro",
      -          "nonmetro",
      -          "national"
      -        ],
      -        "type": "string"
      -      },
      -      "cbsa": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "cbsa_name": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "vintage": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "zip3": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "zip3",
      -      "basis"
      -    ],
      -    "type": "object"
      -  },
      -  "Responsibility": {
      -    "enum": [
      -      "normal_wear",
      -      "likely_damage",
      -      "elective",
      -      "undetermined",
      -      "mixed"
      -    ],
      -    "type": "string"
      -  },
      -  "ResultSignature": {
      -    "properties": {
      -      "jws": {
      -        "type": "string"
      -      },
      -      "payload": {
      -        "$ref": "#/$defs/ResultSignaturePayload"
      -      },
      -      "verify_code": {
      -        "type": "string"
      -      },
      -      "verify_url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "jws",
      -      "payload",
      -      "verify_code",
      -      "verify_url"
      -    ],
      -    "type": "object"
      -  },
      -  "ResultSignaturePayload": {
      -    "properties": {
      -      "capability": {
      -        "type": "string"
      -      },
      -      "engine_version": {
      -        "type": "string"
      -      },
      -      "issued_at": {
      -        "type": "string"
      -      },
      -      "kid": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "type": "string"
      -      },
      -      "result_hash": {
      -        "type": "string"
      -      },
      -      "ruleset_hash": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "ruleset_version": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "v": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "v",
      -      "kid",
      -      "capability",
      -      "operation",
      -      "ruleset_version",
      -      "ruleset_hash",
      -      "engine_version",
      -      "result_hash",
      -      "issued_at"
      -    ],
      -    "type": "object"
      -  },
      -  "Review": {
      -    "properties": {
      -      "ai_read": {
      -        "default": 0,
      -        "type": "integer"
      -      },
      -      "note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "reading_id": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "status": {
      -        "default": "verified",
      -        "enum": [
      -          "draft",
      -          "verified"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "RunInfo": {
      -    "properties": {
      -      "capability": {
      -        "type": "string"
      -      },
      -      "contract_version": {
      -        "type": "string"
      -      },
      -      "duration_ms": {
      -        "type": "integer"
      -      },
      -      "engine_version": {
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "type": "string"
      -      },
      -      "received_at": {
      -        "format": "date-time",
      -        "type": "string"
      -      },
      -      "ruleset_hash": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "ruleset_version": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "capability",
      -      "operation",
      -      "contract_version",
      -      "engine_version",
      -      "ruleset_version",
      -      "ruleset_hash",
      -      "received_at",
      -      "duration_ms"
      -    ],
      -    "type": "object"
      -  },
      -  "ScopeLine": {
      -    "properties": {
      -      "allowance": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/CostRange"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "confidence": {
      -        "enum": [
      -          "sourced",
      -          "industry_typical",
      -          "assumed"
      -        ],
      -        "type": "string"
      -      },
      -      "cost": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "decision": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "approve",
      -              "decline",
      -              "defer"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "finding_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "line_id": {
      -        "type": "string"
      -      },
      -      "location": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "needs_review": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "phase": {
      -        "$ref": "#/$defs/Phase"
      -      },
      -      "price_basis": {
      -        "$ref": "#/$defs/PriceBasis"
      -      },
      -      "priority": {
      -        "$ref": "#/$defs/Priority"
      -      },
      -      "quantity": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "quantity_source": {
      -        "enum": [
      -          "given",
      -          "converted",
      -          "derived",
      -          "fixed"
      -        ],
      -        "type": "string"
      -      },
      -      "refer_out": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "responsibility_by_finding": {
      -        "additionalProperties": {
      -          "$ref": "#/$defs/Responsibility"
      -        },
      -        "type": "object"
      -      },
      -      "responsibility_hint": {
      -        "$ref": "#/$defs/Responsibility"
      -      },
      -      "rule_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "task_id": {
      -        "type": "string"
      -      },
      -      "to_confirm": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "trade": {
      -        "$ref": "#/$defs/Trade"
      -      },
      -      "unit_price": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "uom": {
      -        "$ref": "#/$defs/Uom"
      -      },
      -      "vendor_note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "line_id",
      -      "task_id",
      -      "name",
      -      "trade",
      -      "phase",
      -      "priority",
      -      "location",
      -      "finding_ids",
      -      "quantity",
      -      "uom",
      -      "quantity_source",
      -      "price_basis",
      -      "unit_price",
      -      "cost",
      -      "confidence",
      -      "responsibility_hint",
      -      "rule_ids"
      -    ],
      -    "type": "object"
      -  },
      -  "ScopeResult": {
      -    "properties": {
      -      "assumptions": {
      -        "items": {
      -          "$ref": "#/$defs/Note"
      -        },
      -        "type": "array"
      -      },
      -      "detail": {
      -        "enum": [
      -          "summary",
      -          "full"
      -        ],
      -        "type": "string"
      -      },
      -      "disclaimer": {
      -        "type": "string"
      -      },
      -      "findings": {
      -        "items": {
      -          "$ref": "#/$defs/FindingResolution"
      -        },
      -        "type": "array"
      -      },
      -      "lines": {
      -        "items": {
      -          "$ref": "#/$defs/ScopeLine"
      -        },
      -        "type": "array"
      -      },
      -      "lines_omitted": {
      -        "type": "integer"
      -      },
      -      "omitted_note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "price_tier": {
      -        "$ref": "#/$defs/PriceTier",
      -        "default": "pm_vendor"
      -      },
      -      "profile": {
      -        "$ref": "#/$defs/Profile"
      -      },
      -      "provenance": {
      -        "$ref": "#/$defs/Provenance"
      -      },
      -      "rate_card_applied": {
      -        "items": {
      -          "$ref": "#/$defs/RateCardUse"
      -        },
      -        "type": "array"
      -      },
      -      "rate_card_ignored": {
      -        "items": {
      -          "$ref": "#/$defs/RateCardUse"
      -        },
      -        "type": "array"
      -      },
      -      "refer_outs": {
      -        "items": {
      -          "$ref": "#/$defs/ReferOutNote"
      -        },
      -        "type": "array"
      -      },
      -      "region": {
      -        "$ref": "#/$defs/Region"
      -      },
      -      "summary": {
      -        "type": "string"
      -      },
      -      "totals": {
      -        "$ref": "#/$defs/Totals"
      -      },
      -      "trade_scopes": {
      -        "items": {
      -          "$ref": "#/$defs/TradeScope"
      -        },
      -        "type": "array"
      -      },
      -      "unknowns": {
      -        "items": {
      -          "$ref": "#/$defs/Note"
      -        },
      -        "type": "array"
      -      },
      -      "warnings": {
      -        "items": {
      -          "$ref": "#/$defs/Note"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "summary",
      -      "disclaimer",
      -      "warnings",
      -      "totals",
      -      "refer_outs",
      -      "trade_scopes",
      -      "lines",
      -      "lines_omitted",
      -      "findings",
      -      "assumptions",
      -      "unknowns",
      -      "detail",
      -      "region",
      -      "profile",
      -      "provenance"
      -    ],
      -    "type": "object"
      -  },
      -  "SourceRef": {
      -    "properties": {
      -      "accessed": {
      -        "anyOf": [
      -          {
      -            "format": "date",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  "Suggestion": {
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "code",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  "Totals": {
      -    "properties": {
      -      "allowances": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "approved": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/CostRange"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "could": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "must": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "note": {
      -        "default": "must, should and could are work lines only. visit_charges (minimum call-out and trip fees, once per trade) are added on top: subtotal = must + should + could + visit_charges; total = subtotal + tax. allowances and to_confirm (uncertain items) are outside the total.",
      -        "type": "string"
      -      },
      -      "should": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "subtotal": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "tax": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "to_confirm": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "total": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "visit_charges": {
      -        "$ref": "#/$defs/CostRange"
      -      }
      -    },
      -    "required": [
      -      "must",
      -      "should",
      -      "could",
      -      "visit_charges",
      -      "subtotal",
      -      "tax",
      -      "total"
      -    ],
      -    "type": "object"
      -  },
      -  "Trade": {
      -    "enum": [
      -      "hauling",
      -      "handyman",
      -      "drywall",
      -      "painter",
      -      "flooring",
      -      "carpet_cleaning",
      -      "cleaning",
      -      "appliance",
      -      "plumber",
      -      "electrician",
      -      "hvac",
      -      "locksmith",
      -      "pest_control",
      -      "landscaping",
      -      "window_glass",
      -      "environmental",
      -      "structural"
      -    ],
      -    "type": "string"
      -  },
      -  "TradeScope": {
      -    "properties": {
      -      "line_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "lines_cost": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "phase": {
      -        "$ref": "#/$defs/Phase"
      -      },
      -      "total": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "trade": {
      -        "$ref": "#/$defs/Trade"
      -      },
      -      "vendor": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/Vendor"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "visit_charges": {
      -        "$ref": "#/$defs/CostRange"
      -      }
      -    },
      -    "required": [
      -      "trade",
      -      "vendor",
      -      "phase",
      -      "line_ids",
      -      "lines_cost",
      -      "visit_charges",
      -      "total"
      -    ],
      -    "type": "object"
      -  },
      -  "Uom": {
      -    "enum": [
      -      "each",
      -      "sq_ft",
      -      "sq_ft_floor",
      -      "sq_yd",
      -      "linear_ft",
      -      "room",
      -      "unit",
      -      "bedroom",
      -      "bathroom",
      -      "hour",
      -      "cu_yd",
      -      "visit"
      -    ],
      -    "type": "string"
      -  },
      -  "Vendor": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "contact": {
      -        "anyOf": [
      -          {
      -            "maxLength": 200,
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "name": {
      -        "maxLength": 120,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "name"
      -    ],
      -    "type": "object"
      -  }
      -}
    • removedOutput schema / properties / client_refs / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / client_refs / default
      Removed value: -null
    • addedOutput schema / properties / client_refs / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / deprecation / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "$ref": "#/$defs/Deprecation"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / deprecation / default
      Removed value: -null
    • addedOutput schema / properties / deprecation / type
      Added value: +[
      +  "array",
      +  "null"
      +]
    • removedOutput schema / properties / input_hash / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / input_hash / default
      Removed value: -null
    • addedOutput schema / properties / input_hash / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / links / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Links"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / links / default
      Removed value: -null
    • addedOutput schema / properties / links / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / reading / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Reading"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / reading / default
      Removed value: -null
    • addedOutput schema / properties / reading / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / request_hash / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / request_hash / default
      Removed value: -null
    • addedOutput schema / properties / request_hash / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / $ref
      Removed value: -"#/$defs/ScopeResult"
    • addedOutput schema / properties / result / properties
      Added value: +{
      +  "assumptions": {
      +    "type": "array"
      +  },
      +  "detail": {
      +    "type": "string"
      +  },
      +  "disclaimer": {
      +    "type": "string"
      +  },
      +  "findings": {
      +    "type": "array"
      +  },
      +  "lines": {
      +    "type": "array"
      +  },
      +  "lines_omitted": {
      +    "type": "integer"
      +  },
      +  "omitted_note": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "price_tier": {
      +    "type": "string"
      +  },
      +  "profile": {
      +    "type": "string"
      +  },
      +  "provenance": {
      +    "type": "object"
      +  },
      +  "rate_card_applied": {
      +    "type": "array"
      +  },
      +  "rate_card_ignored": {
      +    "type": "array"
      +  },
      +  "refer_outs": {
      +    "type": "array"
      +  },
      +  "region": {
      +    "type": "object"
      +  },
      +  "summary": {
      +    "type": "string"
      +  },
      +  "totals": {
      +    "type": "object"
      +  },
      +  "trade_scopes": {
      +    "type": "array"
      +  },
      +  "unknowns": {
      +    "type": "array"
      +  },
      +  "warnings": {
      +    "type": "array"
      +  }
      +}
    • addedOutput schema / properties / result / required
      Added value: +[
      +  "summary",
      +  "disclaimer",
      +  "warnings",
      +  "totals",
      +  "refer_outs",
      +  "trade_scopes",
      +  "lines",
      +  "lines_omitted",
      +  "findings",
      +  "assumptions",
      +  "unknowns",
      +  "detail",
      +  "region",
      +  "profile",
      +  "provenance"
      +]
    • addedOutput schema / properties / result / type
      Added value: +"object"
    • removedOutput schema / properties / result_hash / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / result_hash / default
      Removed value: -null
    • addedOutput schema / properties / result_hash / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / review / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Review"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / review / default
      Removed value: -null
    • addedOutput schema / properties / review / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / run / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/RunInfo"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / run / default
      Removed value: -null
    • addedOutput schema / properties / run / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / signature / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/ResultSignature"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / signature / default
      Removed value: -null
    • addedOutput schema / properties / signature / type
      Added value: +[
      +  "object",
      +  "null"
      +]
  2. Changed1 schema field changed
    • addedInput schema / $defs / PropertyProfile / properties / pets
      Added value: +{
      +  "description": "Did pets live in the unit? true adds an optional flea treatment. Omit if unknown.",
      +  "type": "boolean"
      +}
  3. Changed58 schema fields changed
    • addedInput schema / $defs / Evidence
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A negative or working result clears: inspector any hazard; lab mold, lead, asbestos, drugs, sewage; meter moisture; self_test or checklist a device.",
      +  "properties": {
      +    "kind": {
      +      "$ref": "#/$defs/EvidenceKind",
      +      "type": "string"
      +    },
      +    "material": {
      +      "description": "What was tested, e.g. 'kitchen floor tile'.",
      +      "maxLength": 80,
      +      "type": "string"
      +    },
      +    "result": {
      +      "$ref": "#/$defs/EvidenceResult",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind",
      +    "result"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / EvidenceKind
      Added value: +{
      +  "enum": [
      +    "self_test",
      +    "lab",
      +    "meter",
      +    "checklist",
      +    "inspector"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / $defs / EvidenceResult
      Added value: +{
      +  "enum": [
      +    "negative",
      +    "positive",
      +    "working",
      +    "failed"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / $defs / Extraction / description
      Previous value: -"How a finding was produced, when software read it from free text (contract 0.4.0) or\nfrom an uploaded document (``ai_document`` and ``page``, additive).\n\nSet by the web tool when its AI reader (Azure OpenAI) turned a person's own words, or a page\nof their inspection report, into this finding. The engine reports such a finding as\n``resolution: \"ai\"`` with ``needs_review`` and flags its lines; it never changes how the\nfinding is priced."New value: +"How our AI reader read a finding; never changes the price."
    • addedInput schema / $defs / Extraction / properties / cell
      Added value: +{
      +  "description": "ai_document: the cell read; move_in bills nothing, a hazard there is Possible.",
      +  "enum": [
      +    "move_out",
      +    "move_in",
      +    "comment"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / $defs / Extraction / properties / confidence / description
      Previous value: -"The reader's confidence, 0 to 1."New value: +"0 to 1."
    • changedInput schema / $defs / Extraction / properties / method / description
      Previous value: -"'ai': read by a language model from free text. 'ai_document': read by a language model from a page of an uploaded document."New value: +"ai: free text; ai_document: an upload's page."
    • changedInput schema / $defs / Extraction / properties / model / description
      Previous value: -"The model that read it, e.g. 'gpt-5-nano 2025-08-07'."New value: +"The model that read it."
    • changedInput schema / $defs / Extraction / properties / page / description
      Previous value: -"'ai_document' only: the page of the upload it was read from (1-based)."New value: +"ai_document: the page read."
    • addedInput schema / $defs / Extraction / properties / prompt_version
      Added value: +{
      +  "description": "The reader's prompt version.",
      +  "maxLength": 40,
      +  "pattern": "^[A-Za-z0-9._:-]+$",
      +  "type": "string"
      +}
    • changedInput schema / $defs / Extraction / properties / quote / description
      Previous value: -"'ai_document' only: the row's words as printed on that page, contact details masked. Evidence for checking the finding; it never changes the price."New value: +"ai_document: the row's words, contacts masked."
    • changedInput schema / $defs / Extraction / properties / review / description
      Previous value: -"'ai_document' only: the person's review before estimating (confirmed, accepted or edited). Leave out when the finding was not checked; it then needs review."New value: +"ai_document: the person's review."
    • changedInput schema / $defs / ExtractionReview / description
      Previous value: -"What the person did with a finding the web tool read from an uploaded document, before\nestimating (contract 0.11.0, additive). ``confirmed``: they pressed \"Looks right\";\n``accepted``: left as read, on a row the page did not flag; ``edited``: they changed it\n(``changed`` names what). A reviewed finding keeps its ``extraction`` (where it came from)\nbut is no longer reported as needing review: the person has checked it."New value: +"A person's review of a finding read from a document."
    • changedInput schema / $defs / ExtractionReview / properties / changed / description
      Previous value: -"'edited': the fields the person changed."New value: +"edited: the fields changed."
    • changedInput schema / $defs / ExtractionReview / properties / flags / description
      Previous value: -"Why the page flagged it, if it did."New value: +"Why the page flagged it."
    • changedInput schema / $defs / ExtractionReview / properties / flags / items / enum
      Previous value: -[
      -  "low_confidence",
      -  "medium_confidence",
      -  "quote_not_on_page",
      -  "count_unread",
      -  "column_unclear",
      -  "ok_unclear",
      -  "unmatched",
      -  "loose_match",
      -  "ai_match"
      -]New value: +[
      +  "low_confidence",
      +  "medium_confidence",
      +  "quote_not_on_page",
      +  "count_unread",
      +  "column_unclear",
      +  "ok_unclear",
      +  "unmatched",
      +  "ai_match"
      +]
    • changedInput schema / $defs / ExtractionReview / properties / flags / maxItems
      Previous value: -9New value: +8
    • changedInput schema / $defs / Finding / description
      Previous value: -"One observed condition. Give a taxonomy `code` if you know it, else a `description`."New value: +"One observed condition, coded from the issue-code catalog."
    • addedInput schema / $defs / Finding / properties / area_sq_ft
      Added value: +{
      +  "anyOf": [
      +    {
      +      "exclusiveMinimum": 0,
      +      "maximum": 100000,
      +      "type": "number"
      +    },
      +    {
      +      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Measured area in sq ft; wins over a derived size."
      +}
    • changedInput schema / $defs / Finding / properties / code / description
      Previous value: -"Optional. Only a code returned by property_turnover_issue_codes (e.g. 'walls.nail_holes'); otherwise leave it out and use description."New value: +"From property_turnover_issue_codes; general.manual_quote if none fits. Send it on every finding."
    • addedInput schema / $defs / Finding / properties / code / enum
      Added value: +[
      +  "adhesive.residue",
      +  "asbestos.suspect",
      +  "bath.accessory_missing",
      +  "bath.grab_bar_loose",
      +  "bath.mildew_surface",
      +  "blinds.bent_missing",
      +  "blinds.dirty",
      +  "cabinet.base_water_damage",
      +  "cabinet.damage_widespread",
      +  "cabinet.door_damaged",
      +  "cabinet.hinge_loose",
      +  "cabinet.surface_worn",
      +  "carpet.burn",
      +  "carpet.odor",
      +  "carpet.pet_urine",
      +  "carpet.replace_room",
      +  "carpet.soiled",
      +  "carpet.stained",
      +  "carpet.torn_frayed",
      +  "carpet.water_damaged",
      +  "carpet.worn_matted",
      +  "carpet.wrinkled",
      +  "caulk.sink_counter",
      +  "ceiling.hole",
      +  "ceiling.nail_pops",
      +  "ceiling.popcorn_damaged",
      +  "ceiling.repaint",
      +  "ceiling.sagging",
      +  "ceiling.stain",
      +  "ceiling_fan.broken",
      +  "clean.general",
      +  "clean.heavy_soil",
      +  "clean.windows",
      +  "closet.shelf_rod_missing",
      +  "countertop.chip_burn",
      +  "countertop.replace",
      +  "countertop.substrate_exposed",
      +  "dishwasher.inoperable",
      +  "dishwasher.missing",
      +  "disposal.inoperable",
      +  "door.closet_off_track",
      +  "door.entry_damaged",
      +  "door.entry_sticks",
      +  "door.fire_rated_defect",
      +  "door.interior_hole",
      +  "door.interior_replace",
      +  "door.interior_sticks",
      +  "door.slider_damaged",
      +  "door.stop_missing",
      +  "door.weatherstrip_missing",
      +  "drain.blocked_slow",
      +  "electrical.exposed_wiring",
      +  "electrical.panel_issue",
      +  "exhaust_fan.inoperable",
      +  "exterior.paint_peeling",
      +  "exterior.walkway_hazard",
      +  "faucet.leak",
      +  "fence.pool_gate_latch",
      +  "fireplace.firebox_damaged",
      +  "floor.soft_spot",
      +  "floor.substrate_exposed",
      +  "floor.trip_hazard",
      +  "garage.cleanout",
      +  "garage.door_inoperable",
      +  "garage.safety_reverse",
      +  "general.manual_quote",
      +  "gfci.missing",
      +  "gfci.test_fail",
      +  "hardwood.water_stain",
      +  "hardwood.worn",
      +  "hvac.dryer_duct_unsafe",
      +  "hvac.dryer_vent_lint",
      +  "hvac.filter_dirty",
      +  "hvac.minisplit_dirty",
      +  "hvac.not_heating_cooling",
      +  "hvac.vent_cover_missing",
      +  "key.missing",
      +  "laundry.hookup_leak",
      +  "lead.paint_concern",
      +  "leak.active_water",
      +  "leak.moisture_elevated",
      +  "leak.sewage",
      +  "light.bulb_out",
      +  "light.fixture_damaged",
      +  "lock.deadbolt_broken",
      +  "lock.knob_broken",
      +  "lock.rekey",
      +  "lock.smart_reset",
      +  "lvp.plank_damaged",
      +  "lvp.water_swollen",
      +  "mailbox.lock_change",
      +  "microwave.inoperable",
      +  "microwave.otr_inoperable",
      +  "mirror.damaged",
      +  "mold.visible_large",
      +  "mold.visible_medium",
      +  "mold.visible_small",
      +  "odor.general",
      +  "outlet.burn_marks",
      +  "outlet.dead",
      +  "patio.dirty",
      +  "pest.bedbugs",
      +  "pest.inspection_turn",
      +  "pest.other",
      +  "pest.roaches",
      +  "pest.rodents",
      +  "range.anti_tip_missing",
      +  "range.burner_inoperable",
      +  "range.cooktop_glass_cracked",
      +  "range.dirty",
      +  "range.missing",
      +  "range.oven_not_heating",
      +  "range.parts_missing",
      +  "range.replace",
      +  "range_hood.filter",
      +  "refrigerator.dirty",
      +  "refrigerator.gasket",
      +  "refrigerator.ice_maker",
      +  "refrigerator.missing",
      +  "refrigerator.not_cooling",
      +  "refrigerator.parts_missing",
      +  "remote.garage_missing",
      +  "safety.biohazard",
      +  "safety.co_alarm_inoperable",
      +  "safety.co_alarm_missing",
      +  "safety.combustible_clearance",
      +  "safety.drug_contamination",
      +  "safety.egress_blocked",
      +  "safety.extinguisher_expired",
      +  "safety.fire_damage",
      +  "safety.gas_leak",
      +  "safety.guardrail_stairs",
      +  "safety.hazardous_material",
      +  "safety.hvac_combustion",
      +  "safety.pest_extensive",
      +  "safety.roof_envelope",
      +  "safety.sharp_edge",
      +  "safety.smoke_alarm_expired",
      +  "safety.smoke_alarm_missing",
      +  "safety.structural_concern",
      +  "shower.door_damaged",
      +  "shower.head_leaks",
      +  "shower.rod_missing",
      +  "sink.chipped",
      +  "sink.not_draining",
      +  "switch.broken",
      +  "switch_plate.missing",
      +  "tenant_alteration.restore",
      +  "thermostat.broken",
      +  "tile.cracked",
      +  "tile.grout_dirty",
      +  "tile.grout_missing",
      +  "toilet.clog",
      +  "toilet.cracked",
      +  "toilet.loose_base",
      +  "toilet.running",
      +  "toilet.seat_broken",
      +  "trash.heavy",
      +  "trash.light",
      +  "trim.baseboard_damaged",
      +  "trim.casing_damaged",
      +  "trim.paint_worn",
      +  "tub.caulk_failed",
      +  "tub.chip_stain",
      +  "tub.surround_damaged",
      +  "unit.final_inspection",
      +  "vanity.damaged",
      +  "vct.dull_dirty",
      +  "vinyl.lifting",
      +  "vinyl.torn_gouged",
      +  "walls.crack_hairline",
      +  "walls.crack_structural",
      +  "walls.hole_medium",
      +  "walls.holes_many",
      +  "walls.holes_multiple",
      +  "walls.large_hole",
      +  "walls.nail_holes",
      +  "walls.paint_aged",
      +  "walls.paint_peeling",
      +  "walls.paint_unauthorized_color",
      +  "walls.scuffs",
      +  "walls.smoke_nicotine",
      +  "walls.stain_other",
      +  "walls.stain_water",
      +  "walls.surface_detached",
      +  "walls.texture_damage",
      +  "walls.touchup",
      +  "walls.wallpaper",
      +  "washer_dryer.inoperable",
      +  "water_heater.no_hot_water",
      +  "window.glass_cracked",
      +  "window.lock_broken",
      +  "window.screen_missing",
      +  "window.screen_torn",
      +  "window.seal_failed",
      +  "window.sill_damaged",
      +  "window.stuck",
      +  "yard.debris",
      +  "yard.overgrown"
      +]
    • changedInput schema / $defs / Finding / properties / confirmed / description
      Previous value: -"true: the person checked this AI-read finding (one with extraction) and it says what they meant. It keeps resolution 'ai' but no longer needs review, and the answer is verified once every AI-read finding is confirmed."New value: +"true: the person checked this AI-read finding."
    • changedInput schema / $defs / Finding / properties / description / description
      Previous value: -"Plain description if no code, e.g. 'dog urine stains in bedroom carpet'."New value: +"Deprecated; send code, with the words in source_text."
    • addedInput schema / $defs / Finding / properties / evidence
      Added value: +{
      +  "$ref": "#/$defs/Evidence",
      +  "description": "The test behind the finding; the only thing that clears a hazard.",
      +  "type": "object"
      +}
    • changedInput schema / $defs / Finding / properties / extent / description
      Previous value: -"spot | partial | full; defaults per issue."New value: +"Only when the words say how far; else the code's default."
    • changedInput schema / $defs / Finding / properties / extraction / description
      Previous value: -"Set by Tektolo's AI reader on findings it read from free text or a document (reading.findings of an earlier answer); keep it when you send such a finding back. They come back as resolution 'ai' with needs_review unless confirmed."New value: +"Set by our AI reader; send it back unchanged."
    • changedInput schema / $defs / Finding / properties / id / description
      Previous value: -"Your id for this finding; defaults to f1, f2, ... in order."New value: +"Your id; defaults to f1, f2, ... in order."
    • changedInput schema / $defs / Finding / properties / location / description
      Previous value: -"Object {\"area\": \"bedroom\", \"label\": \"Bedroom 2\"}, or a plain string such as \"Bedroom 2\" or \"kitchen\" (mapped to an area; other text becomes the label)."New value: +"{\"area\": \"bedroom\", \"label\": \"Bedroom 2\"} or \"Bedroom 2\"; older form of rooms."
    • addedInput schema / $defs / Finding / properties / material
      Added value: +{
      +  "description": "The material as written, e.g. '9x9 vinyl tile'.",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • addedInput schema / $defs / Finding / properties / notes / description
      Added value: +"More words; never billed or coded from."
    • changedInput schema / $defs / Finding / properties / quantity / description
      Previous value: -"Measured amount, e.g. 120 sq_ft. Derived when omitted."New value: +"Measured amount (120 sq_ft), only as the words give it."
    • addedInput schema / $defs / Finding / properties / repeat_of
      Added value: +{
      +  "description": "Id of an earlier finding this repeats in its own rooms (\"same as above\"); it bills.",
      +  "maxLength": 40,
      +  "pattern": "^[A-Za-z0-9_.:-]+$",
      +  "type": "string"
      +}
    • addedInput schema / $defs / Finding / properties / rooms
      Added value: +{
      +  "$ref": "#/$defs/Rooms",
      +  "description": "Which rooms: {\"area\": \"bedroom\", \"count\": 3} is all 3 bedrooms; labels name them.",
      +  "type": "object"
      +}
    • changedInput schema / $defs / Finding / properties / signature_like / description
      Previous value: -"Set by Tektolo's notes reader (reading.findings, the web tool's rows): the words came right after a sign-off and read like a name or signature ('Thanks!' / 'Rotten Egg Smell'), kept only because they name a safety item. A safety item in them is raised unconfirmed (check first). Keep it when you send such a finding back, so every way of sending the same words gives the same answer."New value: +"Set by our reader; send it back unchanged."
    • addedInput schema / $defs / Finding / properties / source_text
      Added value: +{
      +  "description": "The original words. Scanned for hazards; never billed or coded from.",
      +  "maxLength": 1000,
      +  "type": "string"
      +}
    • addedInput schema / $defs / Finding / properties / status
      Added value: +{
      +  "$ref": "#/$defs/FindingStatus",
      +  "default": "needed",
      +  "description": "Only needed (the default) bills; on a hazard, done/ok/none without evidence stays Possible.",
      +  "type": "string"
      +}
    • addedInput schema / $defs / Finding / properties / year_statement
      Added value: +{
      +  "$ref": "#/$defs/YearStatement",
      +  "description": "A year said in passing (\"built 1972\"); never sets property.year_built.",
      +  "type": "object"
      +}
    • addedInput schema / $defs / FindingStatus
      Added value: +{
      +  "enum": [
      +    "needed",
      +    "done",
      +    "ok",
      +    "none"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / $defs / FloorCoverings / properties / carpet_present / description
      Previous value: -"Is there wall-to-wall carpet? Omit if unknown: carpet findings then imply carpet; with no carpet findings, whole-unit carpet cleaning is left out and listed as unknown."New value: +"Is there wall-to-wall carpet? Omit if unknown."
    • changedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / description
      Previous value: -"Carpeted floor area. Omit to assume 60% of the unit floor area."New value: +"Carpeted area; omit to assume 60% of the floor area."
    • changedInput schema / $defs / Location / description
      Previous value: -"Where the finding is. Also accepted as a plain string (\"Bedroom 2\", \"kitchen\")."New value: +"Where; a plain string works too."
    • addedInput schema / $defs / Occupants
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "property.occupants: lead-rule facts about the unit; leave out what is unknown.",
      +  "properties": {
      +    "child_under_6": {
      +      "description": "A child under 6 lives there or is expected to.",
      +      "type": "boolean"
      +    },
      +    "elderly": {
      +      "description": "Housing for the elderly (62+) or disabled; not just an older tenant.",
      +      "type": "boolean"
      +    },
      +    "hud_assisted": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / $defs / PropertyProfile / properties / occupants
      Added value: +{
      +  "$ref": "#/$defs/Occupants",
      +  "type": "object"
      +}
    • addedInput schema / $defs / PropertyProfile / properties / walk_date
      Added value: +{
      +  "description": "The walk-through date; dated or aged items are judged against it. Omit if unknown.",
      +  "format": "date",
      +  "type": "string"
      +}
    • changedInput schema / $defs / RateCardEntry / description
      Previous value: -"Your own price. Examples: {\"trade\": \"handyman\", \"unit_price\": 65, \"uom\": \"hour\"} (an\nhourly labor rate for that trade); {\"trade\": \"painter\", \"min_charge\": 150} (visit minimum);\n{\"task_id\": \"carpet.clean\", \"unit_price\": 0.2, \"uom\": \"sq_ft\"} (task_id from a result line).\nA task_id entry beats a trade entry; both beat the library. The result lists what was\napplied and what was ignored (rate_card_applied / rate_card_ignored)."New value: +"Your price for a task_id (from a result line) or a trade, e.g. {\"trade\": \"handyman\", \"unit_price\": 65, \"uom\": \"hour\"}."
    • changedInput schema / $defs / RateCardEntry / properties / unit_price / description
      Previous value: -"USD per uom. On a trade entry, uom 'hour' is an hourly labor rate (replaces the labor part of that trade's prices); another uom prices that trade's tasks in it."New value: +"USD per uom; on a trade entry, uom 'hour' is its labor rate."
    • changedInput schema / $defs / RateCardEntry / properties / uom / description
      Previous value: -"Unit your price is quoted in. Required with a trade unit_price. If it differs from a task's uom, the entry is not applied to that task (see rate_card_ignored)."New value: +"Required with a trade unit_price; a task in another uom ignores it."
    • addedInput schema / $defs / Rooms
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Which rooms a finding covers.",
      +  "properties": {
      +    "area": {
      +      "$ref": "#/$defs/Area",
      +      "default": "whole_unit",
      +      "description": "Left out, from the labels, else the whole unit.",
      +      "type": "string"
      +    },
      +    "count": {
      +      "default": 1,
      +      "description": "At least the number of labels; capped at the unit's count.",
      +      "maximum": 50,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "labels": {
      +      "description": "The rooms' names as written, e.g. ['Bedroom 2'].",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 12,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / $defs / YearStatement
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "When the words say it was built.",
      +  "properties": {
      +    "text": {
      +      "description": "The words, e.g. 'built in 1972'.",
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "year": {
      +      "description": "Left out when the words name none ('Victorian').",
      +      "maximum": 2100,
      +      "minimum": 1700,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "text"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "findings": [
      -      {
      -        "description": "pet urine in carpet",
      -        "location": "Bedroom 2"
      -      },
      -      {
      -        "description": "3 blinds broken",
      -        "quantity": {
      -          "uom": "each",
      -          "value": 3
      -        }
      -      }
      -    ],
      -    "property": {
      -      "bathrooms": 1,
      -      "bedrooms": 2,
      -      "zip": "43215"
      -    }
      -  }
      -]New value: +[
      +  {
      +    "findings": [
      +      {
      +        "code": "carpet.pet_urine",
      +        "rooms": "Bedroom 2",
      +        "source_text": "pet urine in BR2 carpet"
      +      },
      +      {
      +        "code": "blinds.bent_missing",
      +        "quantity": {
      +          "uom": "each",
      +          "value": 3
      +        }
      +      }
      +    ],
      +    "property": {
      +      "bathrooms": 1,
      +      "bedrooms": 2,
      +      "zip": "43215"
      +    }
      +  }
      +]
    • changedInput schema / properties / detail / description
      Previous value: -"summary: totals, trade scopes, every line tied to a finding (capped at 40) plus the largest must-fix/refer-out lines, a one-line note on the routine lines left out, notes, and only findings needing attention (small). full: every line, finding and source."New value: +"summary (small): totals, trade scopes, lines tied to findings. full: all."
    • changedInput schema / properties / findings / description
      Previous value: -"Move-out inspection findings, one per condition, with location and extent."New value: +"Move-out inspection findings, one per observed condition, coded."
    • changedInput schema / properties / read / description
      Previous value: -"parser (default): descriptions are read by the deterministic parser and matcher only; what they cannot place comes back as a manual-quote line with suggested codes. ai: what the parser cannot place is then read by an AI model; the answer is a draft (review.status) and echoes the reading, whose findings you confirm and send back for a verified answer (contract 0.12.0)."New value: +"Deprecated and ignored: scope reads no free text."
    • changedInput schema / properties / retain / description
      Previous value: -"Optional (contract 0.5.0). false: keep none of this request's text. By default the finding descriptions are kept with contact details and access codes removed, to improve matching; the estimate is the same either way."New value: +"false: keep none of this request's text."
    • addedOutput schema / $defs / Deprecation
      Added value: +{
      +  "properties": {
      +    "field": {
      +      "type": "string"
      +    },
      +    "until": {
      +      "format": "date",
      +      "type": "string"
      +    },
      +    "use": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "field",
      +    "until",
      +    "use"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / Provenance / properties / rules_as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "date",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / SourceRef / properties / accessed
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "date",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / deprecation
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/Deprecation"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  4. Changed14 schema fields changed
    • addedInput schema / $defs / Extraction / properties / quote
      Added value: +{
      +  "description": "'ai_document' only: the row's words as printed on that page, contact details masked. Evidence for checking the finding; it never changes the price.",
      +  "maxLength": 300,
      +  "type": "string"
      +}
    • addedInput schema / $defs / Finding / properties / confirmed
      Added value: +{
      +  "default": false,
      +  "description": "true: the person checked this AI-read finding (one with extraction) and it says what they meant. It keeps resolution 'ai' but no longer needs review, and the answer is verified once every AI-read finding is confirmed.",
      +  "type": "boolean"
      +}
    • changedInput schema / $defs / Finding / properties / extraction / description
      Previous value: -"Leave out. Set by the web tool for findings its AI reader produced from free text; they come back as resolution 'ai' with needs_review."New value: +"Set by Tektolo's AI reader on findings it read from free text or a document (reading.findings of an earlier answer); keep it when you send such a finding back. They come back as resolution 'ai' with needs_review unless confirmed."
    • addedInput schema / $defs / Finding / properties / signature_like
      Added value: +{
      +  "default": false,
      +  "description": "Set by Tektolo's notes reader (reading.findings, the web tool's rows): the words came right after a sign-off and read like a name or signature ('Thanks!' / 'Rotten Egg Smell'), kept only because they name a safety item. A safety item in them is raised unconfirmed (check first). Keep it when you send such a finding back, so every way of sending the same words gives the same answer.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / read
      Added value: +{
      +  "default": "parser",
      +  "description": "parser (default): descriptions are read by the deterministic parser and matcher only; what they cannot place comes back as a manual-quote line with suggested codes. ai: what the parser cannot place is then read by an AI model; the answer is a draft (review.status) and echoes the reading, whose findings you confirm and send back for a verified answer (contract 0.12.0).",
      +  "enum": [
      +    "parser",
      +    "ai"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / $defs / FindingResolution / properties / confirmed
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • changedOutput schema / $defs / FindingResolution / properties / not_billed_reason / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "none",
      -      "ok",
      -      "done"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "none",
      +      "ok",
      +      "done",
      +      "no_condition"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / $defs / Reading
      Added value: +{
      +  "properties": {
      +    "counts": {
      +      "$ref": "#/$defs/ReadingCounts"
      +    },
      +    "findings": {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "kind": {
      +      "enum": [
      +        "notes",
      +        "document"
      +      ],
      +      "type": "string"
      +    },
      +    "model": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "notes": {
      +      "items": {
      +        "$ref": "#/$defs/ReadingNote"
      +      },
      +      "type": "array"
      +    },
      +    "prompt_version": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "kind",
      +    "counts",
      +    "findings"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ReadingCounts
      Added value: +{
      +  "properties": {
      +    "ai": {
      +      "type": "integer"
      +    },
      +    "parser": {
      +      "type": "integer"
      +    },
      +    "total": {
      +      "type": "integer"
      +    },
      +    "unmatched": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "ai",
      +    "parser",
      +    "unmatched"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ReadingNote
      Added value: +{
      +  "properties": {
      +    "code": {
      +      "type": "string"
      +    },
      +    "finding_ids": {
      +      "default": [],
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "kind": {
      +      "enum": [
      +        "warning",
      +        "assumption"
      +      ],
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind",
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / Review
      Added value: +{
      +  "properties": {
      +    "ai_read": {
      +      "default": 0,
      +      "type": "integer"
      +    },
      +    "note": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "reading_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "status": {
      +      "default": "verified",
      +      "enum": [
      +        "draft",
      +        "verified"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / reading
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Reading"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / request_hash
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / review
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Review"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  5. Changed5 schema fields changed
    • addedInput schema / properties / expect_ruleset
      Added value: +{
      +  "description": "Optional. The ruleset version you built against, as results carry it in provenance.ruleset_version (e.g. 'sd-2026.11.14'), or its sha256: hash. If the rules have changed since, the call fails (nothing computed, nothing charged) and says what is in force now, so you upgrade on your own schedule. Leave it out to answer under the current rules.",
      +  "type": "string"
      +}
    • addedInput schema / properties / serve_pinned
      Added value: +{
      +  "default": false,
      +  "description": "Optional, with expect_ruleset. True asks us to answer under the ruleset version you named even when the rules have changed since, from that version's signed bundle; the result says so in served_from_bundle. We refuse a version older than 12 months, one a later correction or law change replaced for your state, or one we have no bundle for. Default false: the call fails whenever the rules have changed.",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / ResultSignature
      Added value: +{
      +  "properties": {
      +    "jws": {
      +      "type": "string"
      +    },
      +    "payload": {
      +      "$ref": "#/$defs/ResultSignaturePayload"
      +    },
      +    "verify_code": {
      +      "type": "string"
      +    },
      +    "verify_url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "jws",
      +    "payload",
      +    "verify_code",
      +    "verify_url"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ResultSignaturePayload
      Added value: +{
      +  "properties": {
      +    "capability": {
      +      "type": "string"
      +    },
      +    "engine_version": {
      +      "type": "string"
      +    },
      +    "issued_at": {
      +      "type": "string"
      +    },
      +    "kid": {
      +      "type": "string"
      +    },
      +    "operation": {
      +      "type": "string"
      +    },
      +    "result_hash": {
      +      "type": "string"
      +    },
      +    "ruleset_hash": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "ruleset_version": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "v": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "v",
      +    "kid",
      +    "capability",
      +    "operation",
      +    "ruleset_version",
      +    "ruleset_hash",
      +    "engine_version",
      +    "result_hash",
      +    "issued_at"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / signature
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/ResultSignature"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  6. Changed7 schema fields changed
    • changedInput schema / $defs / Extraction / description
      Previous value: -"How a finding was produced, when software read it from free text (contract 0.4.0).\n\nSet by the web tool when its AI reader (Azure OpenAI) turned a person's own words into this\nfinding. The engine reports such a finding as ``resolution: \"ai\"`` with ``needs_review``\nand flags its lines; it never changes how the finding is priced."New value: +"How a finding was produced, when software read it from free text (contract 0.4.0) or\nfrom an uploaded document (``ai_document`` and ``page``, additive).\n\nSet by the web tool when its AI reader (Azure OpenAI) turned a person's own words, or a page\nof their inspection report, into this finding. The engine reports such a finding as\n``resolution: \"ai\"`` with ``needs_review`` and flags its lines; it never changes how the\nfinding is priced."
    • removedInput schema / $defs / Extraction / properties / method / const
      Removed value: -"ai"
    • changedInput schema / $defs / Extraction / properties / method / description
      Previous value: -"'ai': read by a language model from free text."New value: +"'ai': read by a language model from free text. 'ai_document': read by a language model from a page of an uploaded document."
    • addedInput schema / $defs / Extraction / properties / method / enum
      Added value: +[
      +  "ai",
      +  "ai_document"
      +]
    • addedInput schema / $defs / Extraction / properties / page
      Added value: +{
      +  "description": "'ai_document' only: the page of the upload it was read from (1-based).",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / $defs / Extraction / properties / review
      Added value: +{
      +  "$ref": "#/$defs/ExtractionReview",
      +  "description": "'ai_document' only: the person's review before estimating (confirmed, accepted or edited). Leave out when the finding was not checked; it then needs review.",
      +  "type": "object"
      +}
    • addedInput schema / $defs / ExtractionReview
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "What the person did with a finding the web tool read from an uploaded document, before\nestimating (contract 0.11.0, additive). ``confirmed``: they pressed \"Looks right\";\n``accepted``: left as read, on a row the page did not flag; ``edited``: they changed it\n(``changed`` names what). A reviewed finding keeps its ``extraction`` (where it came from)\nbut is no longer reported as needing review: the person has checked it.",
      +  "properties": {
      +    "changed": {
      +      "description": "'edited': the fields the person changed.",
      +      "items": {
      +        "enum": [
      +          "description",
      +          "area",
      +          "label",
      +          "extent",
      +          "quantity"
      +        ],
      +        "type": "string"
      +      },
      +      "maxItems": 5,
      +      "type": "array"
      +    },
      +    "flags": {
      +      "description": "Why the page flagged it, if it did.",
      +      "items": {
      +        "enum": [
      +          "low_confidence",
      +          "medium_confidence",
      +          "quote_not_on_page",
      +          "count_unread",
      +          "column_unclear",
      +          "ok_unclear",
      +          "unmatched",
      +          "loose_match",
      +          "ai_match"
      +        ],
      +        "type": "string"
      +      },
      +      "maxItems": 9,
      +      "type": "array"
      +    },
      +    "outcome": {
      +      "enum": [
      +        "confirmed",
      +        "accepted",
      +        "edited"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "outcome"
      +  ],
      +  "type": "object"
      +}
  7. Changed23 schema fields changed
    • addedInput schema / $defs / Finding / properties / extent / type
      Added value: +"string"
    • addedInput schema / $defs / Finding / properties / extraction / type
      Added value: +"object"
    • addedInput schema / $defs / Finding / properties / location / type
      Added value: +"object"
    • addedInput schema / $defs / Finding / properties / quantity / type
      Added value: +"object"
    • addedInput schema / $defs / Location / properties / area / type
      Added value: +"string"
    • addedInput schema / $defs / PropertyProfile / properties / floor_coverings / type
      Added value: +"object"
    • addedInput schema / $defs / PropertyProfile / properties / unit_type / type
      Added value: +"string"
    • addedInput schema / $defs / Quantity / properties / uom / type
      Added value: +"string"
    • addedInput schema / $defs / RateCardEntry / properties / trade / type
      Added value: +"string"
    • addedInput schema / $defs / RateCardEntry / properties / uom / type
      Added value: +"string"
    • addedInput schema / $defs / Standards / properties / overrides / type
      Added value: +"object"
    • addedInput schema / $defs / Standards / properties / price_tier / type
      Added value: +"string"
    • addedInput schema / $defs / Standards / properties / profile / type
      Added value: +"string"
    • addedInput schema / properties / constraints / description
      Added value: +"Target ready date, whether the unit is occupied, access notes."
    • addedInput schema / properties / constraints / type
      Added value: +"object"
    • addedInput schema / properties / decisions / description
      Added value: +"Approve, decline or defer lines or findings from an earlier scope."
    • addedInput schema / properties / findings / description
      Added value: +"Move-out inspection findings, one per condition, with location and extent."
    • addedInput schema / properties / property / description
      Added value: +"The unit: ZIP, size, type and year built."
    • addedInput schema / properties / property / type
      Added value: +"object"
    • addedInput schema / properties / rate_card / description
      Added value: +"Your own prices by trade or task; they replace the regional library prices."
    • addedInput schema / properties / standards / description
      Added value: +"Finish profile, price tier and overrides."
    • addedInput schema / properties / standards / type
      Added value: +"object"
    • addedInput schema / properties / trade_vendors / description
      Added value: +"Vendor (name, contact) to put on each trade's lines."
  8. Changed322 schema fields changed
    • removedInput schema / $defs / Area / title
      Removed value: -"Area"
    • removedInput schema / $defs / Constraints / properties / access_notes / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 500,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Constraints / properties / access_notes / default
      Removed value: -null
    • addedInput schema / $defs / Constraints / properties / access_notes / maxLength
      Added value: +500
    • removedInput schema / $defs / Constraints / properties / access_notes / title
      Removed value: -"Access Notes"
    • addedInput schema / $defs / Constraints / properties / access_notes / type
      Added value: +"string"
    • removedInput schema / $defs / Constraints / properties / occupied / title
      Removed value: -"Occupied"
    • removedInput schema / $defs / Constraints / properties / target_ready_date / anyOf
      Removed value: -[
      -  {
      -    "format": "date",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Constraints / properties / target_ready_date / default
      Removed value: -null
    • addedInput schema / $defs / Constraints / properties / target_ready_date / format
      Added value: +"date"
    • removedInput schema / $defs / Constraints / properties / target_ready_date / title
      Removed value: -"Target Ready Date"
    • addedInput schema / $defs / Constraints / properties / target_ready_date / type
      Added value: +"string"
    • removedInput schema / $defs / Constraints / title
      Removed value: -"Constraints"
    • removedInput schema / $defs / Decision / properties / action / title
      Removed value: -"Action"
    • removedInput schema / $defs / Decision / properties / finding_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Decision / properties / finding_id / default
      Removed value: -null
    • removedInput schema / $defs / Decision / properties / finding_id / title
      Removed value: -"Finding Id"
    • addedInput schema / $defs / Decision / properties / finding_id / type
      Added value: +"string"
    • removedInput schema / $defs / Decision / properties / line_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Decision / properties / line_id / default
      Removed value: -null
    • removedInput schema / $defs / Decision / properties / line_id / title
      Removed value: -"Line Id"
    • addedInput schema / $defs / Decision / properties / line_id / type
      Added value: +"string"
    • removedInput schema / $defs / Decision / properties / note / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Decision / properties / note / default
      Removed value: -null
    • addedInput schema / $defs / Decision / properties / note / maxLength
      Added value: +300
    • removedInput schema / $defs / Decision / properties / note / title
      Removed value: -"Note"
    • addedInput schema / $defs / Decision / properties / note / type
      Added value: +"string"
    • removedInput schema / $defs / Decision / title
      Removed value: -"Decision"
    • removedInput schema / $defs / Extent / title
      Removed value: -"Extent"
    • addedInput schema / $defs / Extraction
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How a finding was produced, when software read it from free text (contract 0.4.0).\n\nSet by the web tool when its AI reader (Azure OpenAI) turned a person's own words into this\nfinding. The engine reports such a finding as ``resolution: \"ai\"`` with ``needs_review``\nand flags its lines; it never changes how the finding is priced.",
      +  "properties": {
      +    "confidence": {
      +      "anyOf": [
      +        {
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        {
      +          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +          "type": "string"
      +        }
      +      ],
      +      "description": "The reader's confidence, 0 to 1."
      +    },
      +    "method": {
      +      "const": "ai",
      +      "description": "'ai': read by a language model from free text.",
      +      "type": "string"
      +    },
      +    "model": {
      +      "description": "The model that read it, e.g. 'gpt-5-nano 2025-08-07'.",
      +      "maxLength": 80,
      +      "pattern": "^[A-Za-z0-9._:() -]+$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "method",
      +    "model",
      +    "confidence"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / $defs / Finding / properties / code / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Finding / properties / code / default
      Removed value: -null
    • addedInput schema / $defs / Finding / properties / code / maxLength
      Added value: +80
    • removedInput schema / $defs / Finding / properties / code / title
      Removed value: -"Code"
    • addedInput schema / $defs / Finding / properties / code / type
      Added value: +"string"
    • removedInput schema / $defs / Finding / properties / description / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Finding / properties / description / default
      Removed value: -null
    • addedInput schema / $defs / Finding / properties / description / maxLength
      Added value: +300
    • removedInput schema / $defs / Finding / properties / description / title
      Removed value: -"Description"
    • addedInput schema / $defs / Finding / properties / description / type
      Added value: +"string"
    • addedInput schema / $defs / Finding / properties / extent / $ref
      Added value: +"#/$defs/Extent"
    • removedInput schema / $defs / Finding / properties / extent / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Extent"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Finding / properties / extent / default
      Removed value: -null
    • addedInput schema / $defs / Finding / properties / extraction
      Added value: +{
      +  "$ref": "#/$defs/Extraction",
      +  "description": "Leave out. Set by the web tool for findings its AI reader produced from free text; they come back as resolution 'ai' with needs_review."
      +}
    • removedInput schema / $defs / Finding / properties / id / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 40,
      -    "pattern": "^[A-Za-z0-9_.:-]+$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Finding / properties / id / default
      Removed value: -null
    • addedInput schema / $defs / Finding / properties / id / maxLength
      Added value: +40
    • addedInput schema / $defs / Finding / properties / id / pattern
      Added value: +"^[A-Za-z0-9_.:-]+$"
    • removedInput schema / $defs / Finding / properties / id / title
      Removed value: -"Id"
    • addedInput schema / $defs / Finding / properties / id / type
      Added value: +"string"
    • removedInput schema / $defs / Finding / properties / notes / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 1000,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Finding / properties / notes / default
      Removed value: -null
    • addedInput schema / $defs / Finding / properties / notes / maxLength
      Added value: +1000
    • removedInput schema / $defs / Finding / properties / notes / title
      Removed value: -"Notes"
    • addedInput schema / $defs / Finding / properties / notes / type
      Added value: +"string"
    • addedInput schema / $defs / Finding / properties / quantity / $ref
      Added value: +"#/$defs/Quantity"
    • removedInput schema / $defs / Finding / properties / quantity / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Quantity"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Finding / properties / quantity / default
      Removed value: -null
    • removedInput schema / $defs / Finding / title
      Removed value: -"Finding"
    • removedInput schema / $defs / FloorCoverings / properties / carpet_present / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / FloorCoverings / properties / carpet_present / default
      Removed value: -null
    • removedInput schema / $defs / FloorCoverings / properties / carpet_present / title
      Removed value: -"Carpet Present"
    • addedInput schema / $defs / FloorCoverings / properties / carpet_present / type
      Added value: +"boolean"
    • removedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / anyOf
      Removed value: -[
      -  {
      -    "maximum": 20000,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / default
      Removed value: -null
    • addedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / maximum
      Added value: +20000
    • addedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / minimum
      Added value: +0
    • removedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / title
      Removed value: -"Carpet Sq Ft"
    • addedInput schema / $defs / FloorCoverings / properties / carpet_sq_ft / type
      Added value: +"integer"
    • removedInput schema / $defs / FloorCoverings / title
      Removed value: -"FloorCoverings"
    • removedInput schema / $defs / Location / properties / label / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 60,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Location / properties / label / default
      Removed value: -null
    • addedInput schema / $defs / Location / properties / label / maxLength
      Added value: +60
    • removedInput schema / $defs / Location / properties / label / title
      Removed value: -"Label"
    • addedInput schema / $defs / Location / properties / label / type
      Added value: +"string"
    • removedInput schema / $defs / Location / title
      Removed value: -"Location"
    • removedInput schema / $defs / PriceTier / title
      Removed value: -"PriceTier"
    • removedInput schema / $defs / Profile / title
      Removed value: -"Profile"
    • removedInput schema / $defs / PropertyProfile / properties / bathrooms / title
      Removed value: -"Bathrooms"
    • removedInput schema / $defs / PropertyProfile / properties / bedrooms / title
      Removed value: -"Bedrooms"
    • removedInput schema / $defs / PropertyProfile / properties / sq_ft / anyOf
      Removed value: -[
      -  {
      -    "maximum": 20000,
      -    "minimum": 150,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / PropertyProfile / properties / sq_ft / default
      Removed value: -null
    • addedInput schema / $defs / PropertyProfile / properties / sq_ft / maximum
      Added value: +20000
    • addedInput schema / $defs / PropertyProfile / properties / sq_ft / minimum
      Added value: +150
    • removedInput schema / $defs / PropertyProfile / properties / sq_ft / title
      Removed value: -"Sq Ft"
    • addedInput schema / $defs / PropertyProfile / properties / sq_ft / type
      Added value: +"integer"
    • removedInput schema / $defs / PropertyProfile / properties / year_built / anyOf
      Removed value: -[
      -  {
      -    "maximum": 2100,
      -    "minimum": 1700,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / PropertyProfile / properties / year_built / default
      Removed value: -null
    • addedInput schema / $defs / PropertyProfile / properties / year_built / maximum
      Added value: +2100
    • addedInput schema / $defs / PropertyProfile / properties / year_built / minimum
      Added value: +1700
    • removedInput schema / $defs / PropertyProfile / properties / year_built / title
      Removed value: -"Year Built"
    • addedInput schema / $defs / PropertyProfile / properties / year_built / type
      Added value: +"integer"
    • removedInput schema / $defs / PropertyProfile / properties / zip / title
      Removed value: -"Zip"
    • removedInput schema / $defs / PropertyProfile / title
      Removed value: -"PropertyProfile"
    • removedInput schema / $defs / Quantity / properties / value / title
      Removed value: -"Value"
    • removedInput schema / $defs / Quantity / title
      Removed value: -"Quantity"
    • changedInput schema / $defs / RateCardEntry / properties / min_charge / anyOf
      Previous value: -[
      -  {
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / RateCardEntry / properties / min_charge / default
      Removed value: -null
    • removedInput schema / $defs / RateCardEntry / properties / min_charge / title
      Removed value: -"Min Charge"
    • removedInput schema / $defs / RateCardEntry / properties / task_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / RateCardEntry / properties / task_id / default
      Removed value: -null
    • removedInput schema / $defs / RateCardEntry / properties / task_id / title
      Removed value: -"Task Id"
    • addedInput schema / $defs / RateCardEntry / properties / task_id / type
      Added value: +"string"
    • addedInput schema / $defs / RateCardEntry / properties / trade / $ref
      Added value: +"#/$defs/Trade"
    • removedInput schema / $defs / RateCardEntry / properties / trade / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Trade"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / RateCardEntry / properties / trade / default
      Removed value: -null
    • changedInput schema / $defs / RateCardEntry / properties / trip_charge / anyOf
      Previous value: -[
      -  {
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / RateCardEntry / properties / trip_charge / default
      Removed value: -null
    • removedInput schema / $defs / RateCardEntry / properties / trip_charge / title
      Removed value: -"Trip Charge"
    • changedInput schema / $defs / RateCardEntry / properties / unit_price / anyOf
      Previous value: -[
      -  {
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / RateCardEntry / properties / unit_price / default
      Removed value: -null
    • removedInput schema / $defs / RateCardEntry / properties / unit_price / title
      Removed value: -"Unit Price"
    • addedInput schema / $defs / RateCardEntry / properties / uom / $ref
      Added value: +"#/$defs/Uom"
    • removedInput schema / $defs / RateCardEntry / properties / uom / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Uom"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / RateCardEntry / properties / uom / default
      Removed value: -null
    • removedInput schema / $defs / RateCardEntry / title
      Removed value: -"RateCardEntry"
    • removedInput schema / $defs / Standards / title
      Removed value: -"Standards"
    • removedInput schema / $defs / StandardsOverrides / properties / always_rekey / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / StandardsOverrides / properties / always_rekey / default
      Removed value: -null
    • removedInput schema / $defs / StandardsOverrides / properties / always_rekey / title
      Removed value: -"Always Rekey"
    • addedInput schema / $defs / StandardsOverrides / properties / always_rekey / type
      Added value: +"boolean"
    • removedInput schema / $defs / StandardsOverrides / properties / carpet_policy / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "clean",
      -      "replace_if_damaged",
      -      "always_replace"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / StandardsOverrides / properties / carpet_policy / default
      Removed value: -null
    • addedInput schema / $defs / StandardsOverrides / properties / carpet_policy / enum
      Added value: +[
      +  "clean",
      +  "replace_if_damaged",
      +  "always_replace"
      +]
    • removedInput schema / $defs / StandardsOverrides / properties / carpet_policy / title
      Removed value: -"Carpet Policy"
    • addedInput schema / $defs / StandardsOverrides / properties / carpet_policy / type
      Added value: +"string"
    • removedInput schema / $defs / StandardsOverrides / properties / cleaning_policy / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "standard",
      -      "deep"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / StandardsOverrides / properties / cleaning_policy / default
      Removed value: -null
    • addedInput schema / $defs / StandardsOverrides / properties / cleaning_policy / enum
      Added value: +[
      +  "standard",
      +  "deep"
      +]
    • removedInput schema / $defs / StandardsOverrides / properties / cleaning_policy / title
      Removed value: -"Cleaning Policy"
    • addedInput schema / $defs / StandardsOverrides / properties / cleaning_policy / type
      Added value: +"string"
    • changedInput schema / $defs / StandardsOverrides / properties / markup_pct / anyOf
      Previous value: -[
      -  {
      -    "maximum": 100,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 100,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / StandardsOverrides / properties / markup_pct / default
      Removed value: -null
    • removedInput schema / $defs / StandardsOverrides / properties / markup_pct / title
      Removed value: -"Markup Pct"
    • removedInput schema / $defs / StandardsOverrides / properties / paint_policy / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "touch_up",
      -      "full_if_needed",
      -      "always_full"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / StandardsOverrides / properties / paint_policy / default
      Removed value: -null
    • addedInput schema / $defs / StandardsOverrides / properties / paint_policy / enum
      Added value: +[
      +  "touch_up",
      +  "full_if_needed",
      +  "always_full"
      +]
    • removedInput schema / $defs / StandardsOverrides / properties / paint_policy / title
      Removed value: -"Paint Policy"
    • addedInput schema / $defs / StandardsOverrides / properties / paint_policy / type
      Added value: +"string"
    • removedInput schema / $defs / StandardsOverrides / title
      Removed value: -"StandardsOverrides"
    • removedInput schema / $defs / Trade / title
      Removed value: -"Trade"
    • removedInput schema / $defs / UnitType / title
      Removed value: -"UnitType"
    • removedInput schema / $defs / Uom / title
      Removed value: -"Uom"
    • removedInput schema / $defs / Vendor / properties / contact / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 200,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / $defs / Vendor / properties / contact / default
      Removed value: -null
    • addedInput schema / $defs / Vendor / properties / contact / maxLength
      Added value: +200
    • removedInput schema / $defs / Vendor / properties / contact / title
      Removed value: -"Contact"
    • addedInput schema / $defs / Vendor / properties / contact / type
      Added value: +"string"
    • removedInput schema / $defs / Vendor / properties / name / title
      Removed value: -"Name"
    • removedInput schema / $defs / Vendor / title
      Removed value: -"Vendor"
    • removedInput schema / properties / audit / title
      Removed value: -"Audit"
    • addedInput schema / properties / client_refs / additionalProperties
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / client_refs / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": {
      -      "type": "string"
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / client_refs / default
      Removed value: -null
    • removedInput schema / properties / client_refs / title
      Removed value: -"Client Refs"
    • addedInput schema / properties / client_refs / type
      Added value: +"object"
    • removedInput schema / properties / decisions / title
      Removed value: -"Decisions"
    • removedInput schema / properties / detail / title
      Removed value: -"Detail"
    • removedInput schema / properties / findings / title
      Removed value: -"Findings"
    • removedInput schema / properties / rate_card / title
      Removed value: -"Rate Card"
    • addedInput schema / properties / retain
      Added value: +{
      +  "default": true,
      +  "description": "Optional (contract 0.5.0). false: keep none of this request's text. By default the finding descriptions are kept with contact details and access codes removed, to improve matching; the estimate is the same either way.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / tax_rate / anyOf
      Previous value: -[
      -  {
      -    "maximum": 0.2,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 0.2,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / tax_rate / default
      Removed value: -null
    • removedInput schema / properties / tax_rate / title
      Removed value: -"Tax Rate"
    • removedInput schema / properties / trade_vendors / title
      Removed value: -"Trade Vendors"
    • removedInput schema / title
      Removed value: -"property_turnover_scopeArguments"
    • removedOutput schema / $defs / CostRange / description
      Removed value: -"A low / expected / high estimate. Invariant: low <= expected <= high."
    • removedOutput schema / $defs / CostRange / properties / expected / title
      Removed value: -"Expected"
    • removedOutput schema / $defs / CostRange / properties / high / title
      Removed value: -"High"
    • removedOutput schema / $defs / CostRange / properties / low / title
      Removed value: -"Low"
    • removedOutput schema / $defs / CostRange / title
      Removed value: -"CostRange"
    • removedOutput schema / $defs / Extent / title
      Removed value: -"Extent"
    • removedOutput schema / $defs / FindingResolution / properties / code / title
      Removed value: -"Code"
    • addedOutput schema / $defs / FindingResolution / properties / confidence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedOutput schema / $defs / FindingResolution / properties / finding_id / title
      Removed value: -"Finding Id"
    • removedOutput schema / $defs / FindingResolution / properties / issue_name / description
      Removed value: -"Readable name of `code`."
    • removedOutput schema / $defs / FindingResolution / properties / issue_name / title
      Removed value: -"Issue Name"
    • removedOutput schema / $defs / FindingResolution / properties / line_ids / title
      Removed value: -"Line Ids"
    • removedOutput schema / $defs / FindingResolution / properties / location / description
      Removed value: -"Where, as shown on the lines."
    • removedOutput schema / $defs / FindingResolution / properties / location / title
      Removed value: -"Location"
    • removedOutput schema / $defs / FindingResolution / properties / match_note / description
      Removed value: -"Set when the match left a fixture word unexplained: check this finding."
    • removedOutput schema / $defs / FindingResolution / properties / match_note / title
      Removed value: -"Match Note"
    • addedOutput schema / $defs / FindingResolution / properties / model
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / FindingResolution / properties / needs_review
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / FindingResolution / properties / not_billed_reason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "none",
      +        "ok",
      +        "done"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • changedOutput schema / $defs / FindingResolution / properties / resolution / enum
      Previous value: -[
      -  "exact",
      -  "alias",
      -  "unmapped"
      -]New value: +[
      +  "exact",
      +  "alias",
      +  "ai",
      +  "unmapped",
      +  "not_billed"
      +]
    • removedOutput schema / $defs / FindingResolution / properties / resolution / title
      Removed value: -"Resolution"
    • removedOutput schema / $defs / FindingResolution / properties / suggested_codes / title
      Removed value: -"Suggested Codes"
    • removedOutput schema / $defs / FindingResolution / properties / suggestions / description
      Removed value: -"Suggested codes with readable names, best first."
    • removedOutput schema / $defs / FindingResolution / properties / suggestions / title
      Removed value: -"Suggestions"
    • removedOutput schema / $defs / FindingResolution / properties / text / description
      Removed value: -"The finding as given (description, else code), for tracing."
    • removedOutput schema / $defs / FindingResolution / properties / text / title
      Removed value: -"Text"
    • removedOutput schema / $defs / FindingResolution / properties / uncertain / description
      Removed value: -"The description hedges ('mold?', 'maybe', 'possible'). Refer-outs from uncertain findings are check-first: they add a warning instead of holding phases."
    • removedOutput schema / $defs / FindingResolution / properties / uncertain / title
      Removed value: -"Uncertain"
    • removedOutput schema / $defs / FindingResolution / title
      Removed value: -"FindingResolution"
    • removedOutput schema / $defs / Links / description
      Removed value: -"Where the user gets files. MCP results only; the estimate itself is not stored."
    • removedOutput schema / $defs / Links / properties / downloads / description
      Removed value: -"Format -> URL. POST the property_turnover_scope arguments as JSON."
    • removedOutput schema / $defs / Links / properties / downloads / title
      Removed value: -"Downloads"
    • removedOutput schema / $defs / Links / properties / how_to_get_files / title
      Removed value: -"How To Get Files"
    • removedOutput schema / $defs / Links / properties / web_tool / description
      Removed value: -"The free web tool."
    • removedOutput schema / $defs / Links / properties / web_tool / title
      Removed value: -"Web Tool"
    • removedOutput schema / $defs / Links / properties / web_tool_prefilled / description
      Removed value: -"Opens the web tool with these inputs filled in and estimates them; the user can download the Excel workbook and owner estimate there. Give this link to the user."
    • removedOutput schema / $defs / Links / properties / web_tool_prefilled / title
      Removed value: -"Web Tool Prefilled"
    • removedOutput schema / $defs / Links / title
      Removed value: -"Links"
    • removedOutput schema / $defs / Note / properties / code / title
      Removed value: -"Code"
    • removedOutput schema / $defs / Note / properties / finding_ids / title
      Removed value: -"Finding Ids"
    • removedOutput schema / $defs / Note / properties / line_ids / title
      Removed value: -"Line Ids"
    • removedOutput schema / $defs / Note / properties / message / title
      Removed value: -"Message"
    • removedOutput schema / $defs / Note / title
      Removed value: -"Note"
    • removedOutput schema / $defs / Phase / description
      Removed value: -"Make-ready order. Values sort in sequence order via PHASE_ORDER."
    • removedOutput schema / $defs / Phase / title
      Removed value: -"Phase"
    • removedOutput schema / $defs / PriceBasis / title
      Removed value: -"PriceBasis"
    • removedOutput schema / $defs / PriceTier / description
      Removed value: -"Purchasing channel. Library prices are pm_vendor (a PM buying turns from a local vendor)."
    • removedOutput schema / $defs / PriceTier / title
      Removed value: -"PriceTier"
    • removedOutput schema / $defs / Priority / title
      Removed value: -"Priority"
    • removedOutput schema / $defs / Profile / title
      Removed value: -"Profile"
    • removedOutput schema / $defs / Provenance / properties / ruleset_hash / title
      Removed value: -"Ruleset Hash"
    • removedOutput schema / $defs / Provenance / properties / ruleset_id / title
      Removed value: -"Ruleset Id"
    • removedOutput schema / $defs / Provenance / properties / ruleset_version / title
      Removed value: -"Ruleset Version"
    • removedOutput schema / $defs / Provenance / properties / sources / title
      Removed value: -"Sources"
    • removedOutput schema / $defs / Provenance / title
      Removed value: -"Provenance"
    • removedOutput schema / $defs / RateCardUse / properties / entry / description
      Removed value: -"0-based index into the request's rate_card."
    • removedOutput schema / $defs / RateCardUse / properties / entry / title
      Removed value: -"Entry"
    • removedOutput schema / $defs / RateCardUse / properties / lines / title
      Removed value: -"Lines"
    • removedOutput schema / $defs / RateCardUse / properties / note / title
      Removed value: -"Note"
    • removedOutput schema / $defs / RateCardUse / properties / target / description
      Removed value: -"The entry's task_id or trade."
    • removedOutput schema / $defs / RateCardUse / properties / target / title
      Removed value: -"Target"
    • removedOutput schema / $defs / RateCardUse / title
      Removed value: -"RateCardUse"
    • removedOutput schema / $defs / ReferOutNote / properties / blocks_phases / title
      Removed value: -"Blocks Phases"
    • removedOutput schema / $defs / ReferOutNote / properties / finding_ids / title
      Removed value: -"Finding Ids"
    • removedOutput schema / $defs / ReferOutNote / properties / id / title
      Removed value: -"Id"
    • removedOutput schema / $defs / ReferOutNote / properties / kind / title
      Removed value: -"Kind"
    • removedOutput schema / $defs / ReferOutNote / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / ReferOutNote / properties / professional / title
      Removed value: -"Professional"
    • removedOutput schema / $defs / ReferOutNote / properties / reason / title
      Removed value: -"Reason"
    • removedOutput schema / $defs / ReferOutNote / properties / sources / title
      Removed value: -"Sources"
    • removedOutput schema / $defs / ReferOutNote / properties / unconfirmed / description
      Removed value: -"Every triggering finding was hedged ('maybe', '?'): check first; no phase is held until the condition is confirmed (see warnings)."
    • removedOutput schema / $defs / ReferOutNote / properties / unconfirmed / title
      Removed value: -"Unconfirmed"
    • removedOutput schema / $defs / ReferOutNote / title
      Removed value: -"ReferOutNote"
    • removedOutput schema / $defs / Region / properties / basis / title
      Removed value: -"Basis"
    • removedOutput schema / $defs / Region / properties / cbsa / title
      Removed value: -"Cbsa"
    • removedOutput schema / $defs / Region / properties / cbsa_name / title
      Removed value: -"Cbsa Name"
    • removedOutput schema / $defs / Region / properties / vintage / title
      Removed value: -"Vintage"
    • removedOutput schema / $defs / Region / properties / zip3 / title
      Removed value: -"Zip3"
    • removedOutput schema / $defs / Region / title
      Removed value: -"Region"
    • removedOutput schema / $defs / Responsibility / title
      Removed value: -"Responsibility"
    • removedOutput schema / $defs / RunInfo / properties / capability / title
      Removed value: -"Capability"
    • removedOutput schema / $defs / RunInfo / properties / contract_version / title
      Removed value: -"Contract Version"
    • removedOutput schema / $defs / RunInfo / properties / duration_ms / title
      Removed value: -"Duration Ms"
    • removedOutput schema / $defs / RunInfo / properties / engine_version / title
      Removed value: -"Engine Version"
    • removedOutput schema / $defs / RunInfo / properties / id / title
      Removed value: -"Id"
    • removedOutput schema / $defs / RunInfo / properties / operation / title
      Removed value: -"Operation"
    • removedOutput schema / $defs / RunInfo / properties / received_at / title
      Removed value: -"Received At"
    • removedOutput schema / $defs / RunInfo / properties / ruleset_hash / title
      Removed value: -"Ruleset Hash"
    • removedOutput schema / $defs / RunInfo / properties / ruleset_version / title
      Removed value: -"Ruleset Version"
    • removedOutput schema / $defs / RunInfo / title
      Removed value: -"RunInfo"
    • removedOutput schema / $defs / ScopeLine / properties / allowance / description
      Removed value: -"Quote-required lines only: a non-binding budget range. NOT included in any total; summed separately in totals.allowances."
    • removedOutput schema / $defs / ScopeLine / properties / confidence / title
      Removed value: -"Confidence"
    • removedOutput schema / $defs / ScopeLine / properties / decision / title
      Removed value: -"Decision"
    • removedOutput schema / $defs / ScopeLine / properties / finding_ids / title
      Removed value: -"Finding Ids"
    • removedOutput schema / $defs / ScopeLine / properties / line_id / title
      Removed value: -"Line Id"
    • removedOutput schema / $defs / ScopeLine / properties / location / title
      Removed value: -"Location"
    • removedOutput schema / $defs / ScopeLine / properties / name / title
      Removed value: -"Name"
    • addedOutput schema / $defs / ScopeLine / properties / needs_review
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • removedOutput schema / $defs / ScopeLine / properties / quantity / title
      Removed value: -"Quantity"
    • removedOutput schema / $defs / ScopeLine / properties / quantity_source / title
      Removed value: -"Quantity Source"
    • removedOutput schema / $defs / ScopeLine / properties / refer_out / title
      Removed value: -"Refer Out"
    • removedOutput schema / $defs / ScopeLine / properties / responsibility_by_finding / description
      Removed value: -"Set when the hint is 'mixed': the hint of each finding the line carries."
    • removedOutput schema / $defs / ScopeLine / properties / responsibility_by_finding / title
      Removed value: -"Responsibility By Finding"
    • removedOutput schema / $defs / ScopeLine / properties / rule_ids / title
      Removed value: -"Rule Ids"
    • removedOutput schema / $defs / ScopeLine / properties / task_id / title
      Removed value: -"Task Id"
    • addedOutput schema / $defs / ScopeLine / properties / to_confirm
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • removedOutput schema / $defs / ScopeLine / properties / vendor_note / title
      Removed value: -"Vendor Note"
    • removedOutput schema / $defs / ScopeLine / title
      Removed value: -"ScopeLine"
    • removedOutput schema / $defs / ScopeResult / description
      Removed value: -"Field order puts the answer first (summary, disclaimer, totals, refer-outs, vendor\nscopes), because agents and truncating clients read from the top."
    • removedOutput schema / $defs / ScopeResult / properties / assumptions / title
      Removed value: -"Assumptions"
    • removedOutput schema / $defs / ScopeResult / properties / detail / title
      Removed value: -"Detail"
    • removedOutput schema / $defs / ScopeResult / properties / disclaimer / title
      Removed value: -"Disclaimer"
    • removedOutput schema / $defs / ScopeResult / properties / findings / title
      Removed value: -"Findings"
    • removedOutput schema / $defs / ScopeResult / properties / lines / title
      Removed value: -"Lines"
    • removedOutput schema / $defs / ScopeResult / properties / lines_omitted / description
      Removed value: -"Lines left out in summary detail."
    • removedOutput schema / $defs / ScopeResult / properties / lines_omitted / title
      Removed value: -"Lines Omitted"
    • removedOutput schema / $defs / ScopeResult / properties / omitted_note / description
      Removed value: -"Summary detail: what the omitted lines are (routine turn tasks) and their cost."
    • removedOutput schema / $defs / ScopeResult / properties / omitted_note / title
      Removed value: -"Omitted Note"
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_applied / description
      Removed value: -"Rate card entries that changed a price."
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_applied / title
      Removed value: -"Rate Card Applied"
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_ignored / description
      Removed value: -"Rate card entries that changed nothing, with why."
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_ignored / title
      Removed value: -"Rate Card Ignored"
    • removedOutput schema / $defs / ScopeResult / properties / refer_outs / title
      Removed value: -"Refer Outs"
    • removedOutput schema / $defs / ScopeResult / properties / summary / title
      Removed value: -"Summary"
    • removedOutput schema / $defs / ScopeResult / properties / trade_scopes / title
      Removed value: -"Trade Scopes"
    • removedOutput schema / $defs / ScopeResult / properties / unknowns / title
      Removed value: -"Unknowns"
    • removedOutput schema / $defs / ScopeResult / properties / warnings / title
      Removed value: -"Warnings"
    • removedOutput schema / $defs / ScopeResult / title
      Removed value: -"ScopeResult"
    • removedOutput schema / $defs / SourceRef / properties / id / title
      Removed value: -"Id"
    • removedOutput schema / $defs / SourceRef / properties / title / title
      Removed value: -"Title"
    • removedOutput schema / $defs / SourceRef / properties / url / title
      Removed value: -"Url"
    • removedOutput schema / $defs / SourceRef / title
      Removed value: -"SourceRef"
    • removedOutput schema / $defs / Suggestion / properties / code / title
      Removed value: -"Code"
    • removedOutput schema / $defs / Suggestion / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / Suggestion / title
      Removed value: -"Suggestion"
    • removedOutput schema / $defs / Totals / properties / allowances / description
      Removed value: -"Budget allowance for quote-required lines (refer-outs, manual quotes). Shown outside the totals: subtotal and total never include it."
    • changedOutput schema / $defs / Totals / properties / note / default
      Previous value: -"must, should and could are work lines only. visit_charges (minimum call-out and trip fees, once per trade) are added on top: subtotal = must + should + could + visit_charges; total = subtotal + tax. allowances are outside the total."New value: +"must, should and could are work lines only. visit_charges (minimum call-out and trip fees, once per trade) are added on top: subtotal = must + should + could + visit_charges; total = subtotal + tax. allowances and to_confirm (uncertain items) are outside the total."
    • removedOutput schema / $defs / Totals / properties / note / description
      Removed value: -"How the totals add up."
    • removedOutput schema / $defs / Totals / properties / note / title
      Removed value: -"Note"
    • addedOutput schema / $defs / Totals / properties / to_confirm
      Added value: +{
      +  "$ref": "#/$defs/CostRange"
      +}
    • removedOutput schema / $defs / Totals / title
      Removed value: -"Totals"
    • removedOutput schema / $defs / Trade / title
      Removed value: -"Trade"
    • removedOutput schema / $defs / TradeScope / properties / line_ids / title
      Removed value: -"Line Ids"
    • removedOutput schema / $defs / TradeScope / title
      Removed value: -"TradeScope"
    • removedOutput schema / $defs / Uom / title
      Removed value: -"Uom"
    • removedOutput schema / $defs / Vendor / properties / contact / title
      Removed value: -"Contact"
    • removedOutput schema / $defs / Vendor / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / Vendor / title
      Removed value: -"Vendor"
    • removedOutput schema / properties / client_refs / description
      Removed value: -"Your own ids, echoed when you sent client_refs."
    • removedOutput schema / properties / client_refs / title
      Removed value: -"Client Refs"
    • removedOutput schema / properties / input_hash / description
      Removed value: -"Only with audit=true."
    • removedOutput schema / properties / input_hash / title
      Removed value: -"Input Hash"
    • removedOutput schema / properties / result_hash / description
      Removed value: -"Only with audit=true."
    • removedOutput schema / properties / result_hash / title
      Removed value: -"Result Hash"
    • removedOutput schema / properties / run / description
      Removed value: -"Only with audit=true."
    • removedOutput schema / title
      Removed value: -"PropertyTurnoverScopeMcpResult"
  9. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond the annotations: it is deterministic and source-cited, and it briefly characterizes the return content (tasks by trade, cost ranges, priorities, vendor scopes, refer-outs, assumptions, unknowns). It does not discuss permissions, rate limits, or latency, but those are less central here.

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?

The description is front-loaded with the core purpose and packs exclusions, inputs, outputs, and determinism into a compact block. It is dense but efficient, with no obvious filler sentences.

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 complex 15-parameter tool with nested schemas and an output schema, the description covers purpose, key inputs, return categories, alternatives, exclusions, and the deterministic contract. An agent has enough context to select and invoke it correctly, relying on the structured schema for field-level details.

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 description coverage is 100%, so the schema already documents the 15 parameters in detail. The description only summarizes the main inputs (property ZIP/bedrooms/bathrooms, findings with issue codes, optional rate_card/decisions/detail), adding little beyond what the schema and nested definitions provide. A baseline 3 is appropriate.

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 precise verb and resource: turning move-out inspection findings into a priced make-ready scope for a US rental unit. It distinguishes itself from sibling tools by naming property_turnover_quick_estimate for a first estimate and referencing property_turnover_issue_codes for issue codes.

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

Usage Guidelines5/5

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

It explicitly names an alternative for a different use case ('For a first estimate use property_turnover_quick_estimate') and provides a clear not-for list (hazard diagnosis, deposit legal advice, remodel bids, non-US properties). This gives the agent both when-to-use and when-not-to-use guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.