{
  "demo": "refused-edit",
  "generated_by": "scripts/examples/refused-edit/run_demo.py",
  "generated_at": "2026-10-30T11:07:35Z",
  "environment": {
    "wolf_version": "wolf 0.2.17 (commit dbd2defe08a522e38bcaff9dfddb64876deca10d)",
    "wolf_commit": "dbd2defe08a522e38bcaff9dfddb64876deca10d",
    "wolf_binary_sha256": "8a4074c33b0ba2c9dc389769f5c74a11f8af70671aae880def29a4d3a173550a",
    "host": "Darwin arm64",
    "python": "3.13.15",
    "openpyxl": "3.1.5",
    "pillow": "12.3.0",
    "libreoffice": "LibreOffice 26.8.0.3 bce0998afefdbc355585ca324285661a2170ba77",
    "pdftoppm": "pdftoppm version 26.08.0",
    "vhs": "vhs version 0.12.1",
    "jq": "jq-1.7.1-apple"
  },
  "fixture": {
    "file": "q3-close.xlsx",
    "sha256": "f4a778a56b0edb331e85d3193b2938ab5030e441c960fa453cecbae23839e240",
    "bytes": 6673,
    "authored_by": "scripts/examples/refused-edit/fixture.py, then wolf recalc with a fixed clock",
    "regions": [
      {
        "region": "North America",
        "q2": 8900,
        "q3": 9600
      },
      {
        "region": "Europe",
        "q2": 5400,
        "q3": 6000
      },
      {
        "region": "APAC",
        "q2": 3800,
        "q3": 4100
      },
      {
        "region": "LATAM",
        "q2": 1300,
        "q3": 1500
      }
    ],
    "values": {
      "regions_q2_total": {
        "number": 19400
      },
      "regions_q3_total": {
        "number": 21200
      },
      "ledger_control": {
        "number": 21750
      },
      "summary_q3_revenue": {
        "number": 21200
      },
      "summary_q2_revenue": {
        "number": 19400
      },
      "summary_growth": {
        "number": 0.09278350515463907
      },
      "summary_variance": null
    },
    "sheet_ids": {
      "sheet:#1": "Regions",
      "sheet:#2": "Summary"
    }
  },
  "task": "Post the final Q3 actuals: Europe 6,240 and APAC 4,410. Then fill the Summary line Variance to ledger.",
  "invariants": [
    {
      "id": "scope",
      "kind": "only-changes",
      "addresses": [
        "table:Regions/row:Europe/col:Q3",
        "table:Regions/row:APAC/col:Q3",
        "sheet:Regions/cell:C8",
        "sheet:Summary/cell:B3",
        "sheet:Summary/cell:B5",
        "sheet:Summary/cell:B7"
      ]
    },
    {
      "id": "no-errors",
      "kind": "no-new-errors"
    },
    {
      "id": "ledger",
      "kind": "reconcile",
      "left": "sheet:Regions/cell:C10",
      "right": "table:Regions/col:Q3",
      "aggregate": "sum",
      "tolerance": 0.005
    }
  ],
  "bad": {
    "request": "bad-request.json",
    "receipt": "bad-receipt.json",
    "ops": [
      {
        "op": "set",
        "target": "table:Regions/row:Europe/col:Q3",
        "value": {
          "number": 6240
        }
      },
      {
        "op": "set",
        "target": "table:Regions/row:APAC/col:Q2",
        "value": {
          "number": 4410
        }
      },
      {
        "op": "set",
        "target": "sheet:Summary/cell:B7",
        "value": {
          "formula": "=SUM(Regions[Q3 Actual])-Regions!C10"
        }
      }
    ],
    "argv": [
      "wolf",
      "transact",
      "--request",
      "bad-request.json"
    ],
    "exit_code": 7,
    "status": "failed",
    "error_codes": [
      "invariant-violated"
    ],
    "errors": [
      "invariant 'scope' (only-changes) failed: sheet:#1/cell:B8, table:Regions/row:APAC/col:Q2, sheet:#2/cell:B4 changed but are not declared",
      "invariant 'no-errors' (no-new-errors) failed: new errors at sheet:#2/cell:B7",
      "invariant 'ledger' (reconcile) failed: 21750 != 21440 (tolerance 0.005)"
    ],
    "committed": false,
    "outputs": [],
    "output_dir_exists": false,
    "input_sha256_before": "f4a778a56b0edb331e85d3193b2938ab5030e441c960fa453cecbae23839e240",
    "input_sha256_after": "f4a778a56b0edb331e85d3193b2938ab5030e441c960fa453cecbae23839e240",
    "input_unchanged": true,
    "unwritten_result_sha256": "bebdd7671be398d17e18cc98165a63ce21c7a4c8bcfb4a7e52bf30a97ac05928",
    "verdicts": [
      {
        "id": "scope",
        "kind": "only-changes",
        "verdict": "failed",
        "detail": "sheet:#1/cell:B8, table:Regions/row:APAC/col:Q2, sheet:#2/cell:B4 changed but are not declared",
        "violations": [
          "sheet:#1/cell:B8",
          "table:Regions/row:APAC/col:Q2",
          "sheet:#2/cell:B4"
        ]
      },
      {
        "id": "no-errors",
        "kind": "no-new-errors",
        "verdict": "failed",
        "detail": "new errors at sheet:#2/cell:B7",
        "violations": [
          "sheet:#2/cell:B7"
        ]
      },
      {
        "id": "ledger",
        "kind": "reconcile",
        "verdict": "failed",
        "detail": "21750 != 21440 (tolerance 0.005)",
        "violations": [
          "sheet:#1/cell:C10"
        ]
      },
      {
        "kind": "address-resolution",
        "verdict": "passed"
      },
      {
        "kind": "parts-preserved",
        "verdict": "passed",
        "detail": "10 of 12 input parts byte-identical"
      }
    ],
    "failed": [
      "scope",
      "no-errors",
      "ledger"
    ],
    "diff_counts": {
      "added": 1,
      "modified": 7,
      "moved": 0,
      "removed": 0
    },
    "diff": [
      {
        "address": "sheet:#1/cell:B8",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 19400
        },
        "after": {
          "number": 20010
        }
      },
      {
        "address": "sheet:#1/cell:C8",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 21200
        },
        "after": {
          "number": 21440
        }
      },
      {
        "address": "table:Regions/row:Europe/col:Q3",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 6000
        },
        "after": {
          "number": 6240
        },
        "cause": 0
      },
      {
        "address": "table:Regions/row:APAC/col:Q2",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 3800
        },
        "after": {
          "number": 4410
        },
        "cause": 1
      },
      {
        "address": "sheet:#2/cell:B3",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 21200
        },
        "after": {
          "number": 21440
        }
      },
      {
        "address": "sheet:#2/cell:B4",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 19400
        },
        "after": {
          "number": 20010
        }
      },
      {
        "address": "sheet:#2/cell:B5",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 0.09278350515463907
        },
        "after": {
          "number": 0.07146426786606708
        }
      },
      {
        "address": "sheet:#2/cell:B7",
        "change": "added",
        "cause": 2
      }
    ]
  },
  "fixed": {
    "request": "fixed-request.json",
    "receipt": "fixed-receipt.json",
    "ops": [
      {
        "op": "set",
        "target": "table:Regions/row:Europe/col:Q3",
        "value": {
          "number": 6240
        }
      },
      {
        "op": "set",
        "target": "table:Regions/row:APAC/col:Q3",
        "value": {
          "number": 4410
        }
      },
      {
        "op": "set",
        "target": "sheet:Summary/cell:B7",
        "value": {
          "formula": "=SUM(Regions[Q3])-Regions!C10"
        }
      }
    ],
    "argv": [
      "wolf",
      "transact",
      "--request",
      "fixed-request.json"
    ],
    "exit_code": 0,
    "status": "succeeded",
    "committed": true,
    "output": "q3-close-wolf.xlsx",
    "output_sha256": "2ce514439fd7224f69063c03981ba084000496a2bcafab5aa614061d0acf6444",
    "input_sha256_after": "f4a778a56b0edb331e85d3193b2938ab5030e441c960fa453cecbae23839e240",
    "input_unchanged": true,
    "verdicts": [
      {
        "id": "scope",
        "kind": "only-changes",
        "verdict": "passed"
      },
      {
        "id": "no-errors",
        "kind": "no-new-errors",
        "verdict": "passed"
      },
      {
        "id": "ledger",
        "kind": "reconcile",
        "verdict": "passed",
        "detail": "21750 = sum 21750"
      },
      {
        "kind": "address-resolution",
        "verdict": "passed"
      },
      {
        "kind": "parts-preserved",
        "verdict": "passed",
        "detail": "10 of 12 input parts byte-identical"
      }
    ],
    "parts_written": [
      "xl/worksheets/sheet1.xml",
      "xl/worksheets/sheet2.xml"
    ],
    "parts_preserved": 10,
    "diff_counts": {
      "added": 1,
      "modified": 5,
      "moved": 0,
      "removed": 0
    },
    "diff": [
      {
        "address": "sheet:#1/cell:C8",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 21200
        },
        "after": {
          "number": 21750
        }
      },
      {
        "address": "table:Regions/row:Europe/col:Q3",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 6000
        },
        "after": {
          "number": 6240
        },
        "cause": 0
      },
      {
        "address": "table:Regions/row:APAC/col:Q3",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 4100
        },
        "after": {
          "number": 4410
        },
        "cause": 1
      },
      {
        "address": "sheet:#2/cell:B3",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 21200
        },
        "after": {
          "number": 21750
        }
      },
      {
        "address": "sheet:#2/cell:B5",
        "change": "modified",
        "property": "value",
        "before": {
          "number": 0.09278350515463907
        },
        "after": {
          "number": 0.12113402061855671
        }
      },
      {
        "address": "sheet:#2/cell:B7",
        "change": "added",
        "cause": 2
      }
    ],
    "values": {
      "regions_q2_total": {
        "number": 19400
      },
      "regions_q3_total": {
        "number": 21750
      },
      "ledger_control": {
        "number": 21750
      },
      "summary_q3_revenue": {
        "number": 21750
      },
      "summary_q2_revenue": {
        "number": 19400
      },
      "summary_growth": {
        "number": 0.12113402061855671
      },
      "summary_variance": {
        "number": 0
      }
    }
  },
  "openpyxl": {
    "script": "openpyxl_edit.py",
    "exit_code": 0,
    "warnings": [],
    "output": "q3-close-openpyxl.xlsx",
    "output_sha256": "add58111caca554ec2b676de6f8d8af6060589092b77ea82401cd04b0a26ce18",
    "cached_values": {
      "formula_cells": 6,
      "without_cached_value": [
        "Regions!B8",
        "Regions!C8",
        "Summary!B3",
        "Summary!B4",
        "Summary!B5",
        "Summary!B7"
      ]
    },
    "recalculated_by": "LibreOffice, isolated profile, recalculate on load",
    "values_after_recalc": {
      "regions_q2_total": 20010,
      "regions_q3_total": 21440,
      "ledger_control": 21750,
      "summary_q3_revenue": 21440,
      "summary_q2_revenue": 20010,
      "summary_growth": 0.0714642678660671,
      "summary_variance": "#NAME?"
    },
    "variance_formula_after_recalc": "=SUM(Regions[q3 actual])-Regions!C10"
  },
  "renders": {
    "wolf": {
      "file": "sheets-wolf.png",
      "width": 791,
      "height": 794,
      "pages": 2
    },
    "openpyxl": {
      "file": "sheets-openpyxl.png",
      "width": 791,
      "height": 794,
      "pages": 2
    },
    "renderer": "LibreOffice PDF export, pdftoppm at 192 dpi"
  },
  "clip": {
    "tape": "scripts/examples/refused-edit/refused-edit.tape",
    "gif": "refused-edit.gif",
    "gif_bytes": 415474,
    "mp4": "refused-edit.mp4",
    "mp4_bytes": 437904,
    "poster": "refused-edit-poster.png",
    "width": 1400,
    "height": 640,
    "duration_seconds": 33.3,
    "run_matches_script": {
      "bad_exit_code": 7,
      "bad_committed": false,
      "fixed_exit_code": 0,
      "fixed_committed": true,
      "input_sha256_after": "f4a778a56b0edb331e85d3193b2938ab5030e441c960fa453cecbae23839e240",
      "output_sha256": "2ce514439fd7224f69063c03981ba084000496a2bcafab5aa614061d0acf6444"
    }
  },
  "card": {
    "file": "card.png",
    "width": 1200,
    "height": 675
  }
}
