Skip to main content
Glama

edit_condition

Adjust an existing takeoff condition's quantity settings — waste percentage, multiplier, wall height, drop/rise, or roll-goods setup — to correct net order quantities and export both net and gross figures accurately.

Instructions

Set a condition's quantity knobs — waste %, multiplier, height_ft (the H knob measure_surface quantifies against), and/or roll_setup (the roll-goods opt-in: seams and order footage figured from the committed rooms, #147). takeoff_summary emits waste-adjusted *_net order quantities and a per-condition multiplier, and every export carries both, but conditions minted through the measure tools start at waste 0 / multiplier 1 — without this tool an agent's takeoff always ships net === gross (#131). waste_pct is the estimator's cut-waste percentage (carpet commonly 5–10); multiplier scales every quantity on the condition (×N identical floors — takeoff_summary applies it before waste). condition must resolve to an EXISTING finish tag — a typo'd tag errors rather than minting an empty condition (the edit_materials remove/patch rule, not its add rule: these knobs mean nothing on a condition that doesn't exist yet). No review gate — quantity config, not traced geometry; undo_last reverses a call in one step (both knobs snapshotted together, restored verbatim).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
drop_ftNoDrop and Rise (#441): the vertical leg DOWN, in feet, every linear run of this condition adds to its plan length. Re-flows existing runs that do not carry their own drop_ft. 0 turns it off
rise_ftNoDrop and Rise (#441): the vertical leg UP, in feet, every linear run of this condition adds to its plan length (LF = plan + rise + drop). Re-flows existing runs that do not carry their own rise_ft; derived base/transitions never take a leg. 0 turns it off
conditionYesFinish tag of an existing condition, e.g. 'CPT-1'
height_ftNoWall height in feet — the canvas's H knob; measure_surface quantifies traced LF × this
waste_pctNoWaste percentage applied to net order quantities, e.g. 10 for 10%
multiplierNoQuantity multiplier (×N identical areas). Note: the canvas treats 0 as 1, so 0 is rejected here rather than silently meaning 'off'
roll_setupNoRoll-goods opt-in (#147): presence of a setup is what makes the condition roll goods — seams figured, cuts packed, order footage beside the measured quantities. Same-material partial edits patch the existing setup; null opts out. The reply echoes the figured order (cuts, order_lf, rolls, order_qty) whenever floor shapes exist on scaled sheets, and export_report's roll_goods block carries the same rows

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rollNoThe figured order (same row export_report's roll_goods carries) — present when the roll-goods condition has floor shapes on scaled sheets
drop_ftNoThe condition's default drop for its linear runs after this write — present once set (#441)
rise_ftNoThe condition's default rise for its linear runs after this write — present once set (#441)
conditionYesThe finish tag passed in
height_ftNoThe condition's wall height after this write — present once set (measure_surface multiplies traced LF by it)
waste_pctYesThe condition's waste % after this write
multiplierYesThe condition's quantity multiplier after this write
roll_setupNoThe condition's roll-goods setup after this write — present while opted in
condition_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.1.25
    • addedInput schema / properties / drop_ft
      Added value: +{
      +  "description": "Drop and Rise (#441): the vertical leg DOWN, in feet, every linear run of this condition adds to its plan length. Re-flows existing runs that do not carry their own drop_ft. 0 turns it off",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / rise_ft
      Added value: +{
      +  "description": "Drop and Rise (#441): the vertical leg UP, in feet, every linear run of this condition adds to its plan length (LF = plan + rise + drop). Re-flows existing runs that do not carry their own rise_ft; derived base/transitions never take a leg. 0 turns it off",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedOutput schema / properties / drop_ft
      Added value: +{
      +  "description": "The condition's default drop for its linear runs after this write — present once set (#441)",
      +  "type": "number"
      +}
    • addedOutput schema / properties / rise_ft
      Added value: +{
      +  "description": "The condition's default rise for its linear runs after this write — present once set (#441)",
      +  "type": "number"
      +}
  2. Changed5 schema fields changedv0.1.9
    • addedInput schema / properties / height_ft
      Added value: +{
      +  "description": "Wall height in feet — the canvas's H knob; measure_surface quantifies traced LF × this",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / roll_setup
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "Opt the condition OUT of roll goods",
      +      "type": "null"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "direction": {
      +          "description": "Run direction; auto lets the engine pick per room",
      +          "enum": [
      +            "auto",
      +            "ns",
      +            "ew"
      +          ],
      +          "type": "string"
      +        },
      +        "doorway_overage_in": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "material": {
      +          "description": "Material class — fresh opt-ins and material changes start from this class's engine defaults (carpet sells sy, others sf)",
      +          "enum": [
      +            "carpet",
      +            "sheet_vinyl",
      +            "rubber"
      +          ],
      +          "type": "string"
      +        },
      +        "price_unit": {
      +          "description": "Sell unit the order quantity is figured in",
      +          "enum": [
      +            "sy",
      +            "sf",
      +            "lf"
      +          ],
      +          "type": "string"
      +        },
      +        "roll_length_ft": {
      +          "description": "Physical roll length; 0 = unlimited",
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "roll_width_ft": {
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        },
      +        "seam_allowance_in": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "wall_overage_in": {
      +          "minimum": 0,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "description": "Roll-goods opt-in (#147): presence of a setup is what makes the condition roll goods — seams figured, cuts packed, order footage beside the measured quantities. Same-material partial edits patch the existing setup; null opts out. The reply echoes the figured order (cuts, order_lf, rolls, order_qty) whenever floor shapes exist on scaled sheets, and export_report's roll_goods block carries the same rows"
      +}
    • addedOutput schema / properties / height_ft
      Added value: +{
      +  "description": "The condition's wall height after this write — present once set (measure_surface multiplies traced LF by it)",
      +  "type": "number"
      +}
    • addedOutput schema / properties / roll
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "The figured order (same row export_report's roll_goods carries) — present when the roll-goods condition has floor shapes on scaled sheets",
      +  "properties": {
      +    "condition_id": {
      +      "type": "string"
      +    },
      +    "cuts": {
      +      "type": "integer"
      +    },
      +    "direction": {
      +      "type": "string"
      +    },
      +    "finish_tag": {
      +      "type": "string"
      +    },
      +    "material": {
      +      "type": "string"
      +    },
      +    "order_lf": {
      +      "description": "Full-width roll footage to order, ×N applied, rounded up to the inch",
      +      "type": "number"
      +    },
      +    "order_qty": {
      +      "type": "number"
      +    },
      +    "order_unit": {
      +      "type": "string"
      +    },
      +    "oversize": {
      +      "description": "true when a cut exceeds the physical roll length (roll_length_ft binds)",
      +      "type": "boolean"
      +    },
      +    "roll_length_ft": {
      +      "type": "number"
      +    },
      +    "roll_width_ft": {
      +      "type": "number"
      +    },
      +    "rolls": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "condition_id",
      +    "finish_tag",
      +    "material",
      +    "roll_width_ft",
      +    "roll_length_ft",
      +    "direction",
      +    "cuts",
      +    "order_lf",
      +    "rolls",
      +    "order_qty",
      +    "order_unit",
      +    "oversize"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / roll_setup
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "The condition's roll-goods setup after this write — present while opted in",
      +  "properties": {},
      +  "type": "object"
      +}
  3. Addedv0.1.8

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers richly: it discloses that there is no review gate, that undo_last reverses a call in one step with both knobs snapshotted together and restored verbatim, that roll_setup presence is what makes a condition roll goods, that multiplier 0 is rejected because the canvas treats 0 as 1, and that takeoff_summary applies multiplier before waste. These are non-obvious behaviors an agent needs to predict side effects.

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 dense and information-rich, with the core purpose front-loaded in the first sentence and behavioral caveats following. It is longer than ideal, but every sentence earns its place by adding non-obvious context (issue references, sibling rules, undo behavior, typical waste ranges). The structure is coherent: purpose, downstream effects, parameter semantics, then caveats.

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?

Given the tool's complexity (7 params, nested roll_setup object, no annotations), the description covers the essential operational context: what the knobs do, how they interact with takeoff_summary and measure_surface, the existing-condition requirement, the undo path, and the roll-goods opt-in semantics. The output schema exists, so return values don't need to be spelled out. An agent has enough to call this tool correctly and avoid common mistakes.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics: it explains the relationship between height_ft and measure_surface, that multiplier scales every quantity and is applied before waste, that waste_pct is the estimator's cut-waste percentage with a typical carpet range, and that roll_setup's presence/absence is the opt-in/out mechanism. It doesn't restate every schema field, but it adds value beyond the schema for the key knobs.

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 opens with a specific verb and resource: 'Set a condition's quantity knobs' and enumerates exactly which knobs (waste %, multiplier, height_ft, roll_setup). It distinguishes itself from siblings like edit_materials and propose_condition_edit by scoping to quantity configuration on existing conditions, and it names related tools (takeoff_summary, measure_surface, undo_last) to orient the agent.

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?

The description gives explicit when-to-use context: conditions minted through measure tools start at waste 0 / multiplier 1, so this tool is needed when an agent wants takeoff to ship net !== gross. It also states a clear exclusion: condition must resolve to an EXISTING finish tag, and a typo'd tag errors rather than minting an empty condition, referencing the edit_materials remove/patch rule. This is strong routing guidance.

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