{
  "$schema": "../_schema.json",
  "format": "xlsx",
  "element": "workbook",
  "container": true,
  "operations": {
    "add": false,
    "set": true,
    "get": true,
    "query": true,
    "remove": false
  },
  "paths": {
    "positional": [
      "/"
    ]
  },
  "note": "Root container. Get returns sheet list and workbook-level metadata. Set exists for workbook-wide properties (defaultFont, defaultFontSize, calc.mode, calc.iterate, author, title, subject). Sheets are mutated via /SheetName paths.",
  "children": [
    {
      "element": "sheet",
      "pathSegment": "{SheetName}",
      "cardinality": "1..n"
    }
  ],
  "extends": "_shared/root-metadata",
  "properties": {
    "defaultFont": {
      "type": "string",
      "description": "default font for all cells (fontname alias). Not implemented in ExcelHandler — Add/Set/Get all return n/a today; manage cell fonts directly.",
      "aliases": [
        "fontName",
        "fontname"
      ],
      "add": false,
      "set": false,
      "get": false,
      "examples": [
        "--prop defaultFont=Calibri"
      ],
      "readback": "n/a",
      "enforcement": "report"
    },
    "defaultFontSize": {
      "type": "length",
      "description": "default font size. Not implemented in ExcelHandler — Add/Set/Get all return n/a today; manage cell fonts directly.",
      "aliases": [
        "fontSize",
        "fontsize"
      ],
      "add": false,
      "set": false,
      "get": false,
      "examples": [
        "--prop defaultFontSize=11"
      ],
      "readback": "n/a",
      "enforcement": "report"
    },
    "author": {
      "type": "string",
      "description": "document author (core properties).",
      "aliases": [
        "creator"
      ],
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop author=\"Alice\""
      ],
      "readback": "author string",
      "enforcement": "report"
    },
    "title": {
      "type": "string",
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop title=\"Q1 Report\""
      ],
      "readback": "title string",
      "enforcement": "report"
    },
    "calc.mode": {
      "type": "enum",
      "values": [
        "auto",
        "manual",
        "autoExceptTables"
      ],
      "description": "workbook formula calculation mode. 'auto' recalculates on every change, 'manual' requires F9, 'autoExceptTables' skips data tables.",
      "aliases": [
        "calcmode"
      ],
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop calc.mode=manual",
        "--prop calcmode=auto"
      ],
      "readback": "calc mode name",
      "enforcement": "report"
    },
    "calc.iterate": {
      "type": "bool",
      "description": "enable iterative calculation for circular references.",
      "aliases": [
        "iterate"
      ],
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop calc.iterate=true",
        "--prop iterate=false"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "calc.iterateCount": {
      "type": "number",
      "description": "maximum number of iterations when calc.iterate is enabled.",
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop calc.iterateCount=100"
      ],
      "readback": "integer",
      "enforcement": "report"
    },
    "calc.iterateDelta": {
      "type": "number",
      "description": "maximum change between iterations to consider the calculation converged.",
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop calc.iterateDelta=0.001"
      ],
      "readback": "number",
      "enforcement": "report"
    },
    "calc.fullPrecision": {
      "type": "bool",
      "description": "if true, calculations use full precision rather than the displayed value.",
      "add": false,
      "set": true,
      "get": true,
      "examples": [
        "--prop calc.fullPrecision=true"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "lastModifiedBy": {
      "type": "string",
      "aliases": [
        "lastmodifiedby"
      ],
      "add": false,
      "set": true,
      "get": true,
      "description": "from docProps/core.xml lastModifiedBy field.",
      "examples": [
        "--prop lastModifiedBy=\"Alice\""
      ],
      "readback": "author string",
      "enforcement": "report"
    },
    "created": {
      "type": "string",
      "add": false,
      "set": false,
      "get": true,
      "description": "creation timestamp ISO-8601.",
      "readback": "ISO-8601 timestamp",
      "enforcement": "report"
    },
    "modified": {
      "type": "string",
      "add": false,
      "set": false,
      "get": true,
      "description": "last modification timestamp ISO-8601.",
      "readback": "ISO-8601 timestamp",
      "enforcement": "report"
    },
    "extended.application": {
      "type": "string",
      "add": false,
      "set": false,
      "get": true,
      "description": "from docProps/app.xml application identifier (e.g. \"Microsoft Excel\").",
      "readback": "application string",
      "enforcement": "report"
    },
    "category": {
      "type": "string",
      "add": false,
      "set": true,
      "get": true,
      "description": "docProps/core.xml Category field.",
      "examples": [
        "--prop category=Reports"
      ],
      "readback": "category string",
      "enforcement": "report"
    },
    "description": {
      "type": "string",
      "add": false,
      "set": true,
      "get": true,
      "description": "docProps/core.xml Description field.",
      "examples": [
        "--prop description=\"Annual revenue summary\""
      ],
      "readback": "description string",
      "enforcement": "report"
    },
    "keywords": {
      "type": "string",
      "add": false,
      "set": true,
      "get": true,
      "description": "docProps/core.xml Keywords field.",
      "examples": [
        "--prop keywords=\"finance,2026\""
      ],
      "readback": "keyword list string",
      "enforcement": "report"
    },
    "revisionNumber": {
      "type": "string",
      "add": false,
      "set": true,
      "get": true,
      "description": "docProps/core.xml Revision field — workbook save counter.",
      "examples": [
        "--prop revisionNumber=3"
      ],
      "readback": "revision number string",
      "enforcement": "report"
    },
    "activeTab": {
      "type": "number",
      "add": false,
      "set": false,
      "get": true,
      "description": "workbook BookViews activeTab — index of the sheet active when the file opens.",
      "readback": "integer (0-based)",
      "enforcement": "report"
    },
    "firstSheet": {
      "type": "number",
      "add": false,
      "set": false,
      "get": true,
      "description": "workbook BookViews firstSheet — index of the leftmost visible sheet.",
      "readback": "integer (0-based)",
      "enforcement": "report"
    },
    "calc.fullCalcOnLoad": {
      "type": "bool",
      "add": false,
      "set": false,
      "get": true,
      "description": "CalculationProperties FullCalculationOnLoad flag — force a full recalc when the workbook opens.",
      "readback": "true|false",
      "enforcement": "report"
    },
    "calc.refMode": {
      "type": "string",
      "add": false,
      "set": false,
      "get": true,
      "description": "CalculationProperties ReferenceMode (A1 or R1C1).",
      "readback": "reference mode string",
      "enforcement": "report"
    },
    "workbook.backupFile": {
      "type": "bool",
      "add": false,
      "set": false,
      "get": true,
      "description": "WorkbookProperties BackupFile flag — Excel keeps a backup .bak alongside saves.",
      "readback": "true|false",
      "enforcement": "report"
    },
    "workbook.codeName": {
      "type": "string",
      "add": false,
      "set": false,
      "get": true,
      "description": "WorkbookProperties CodeName — VBA project workbook codename (e.g. ThisWorkbook).",
      "readback": "codename string",
      "enforcement": "report"
    },
    "workbook.date1904": {
      "type": "bool",
      "aliases": ["date1904"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProperties Date1904 flag — true means dates use the 1904 epoch (Mac legacy). This is the attribute that actually controls the workbook date system; set it to toggle the epoch.",
      "examples": [
        "--prop workbook.date1904=true"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "workbook.dateCompatibility": {
      "type": "bool",
      "aliases": ["datecompatibility"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProperties DateCompatibility flag (a distinct OOXML attribute, NOT the 1904-epoch toggle — use workbook.date1904 to change the date system).",
      "examples": [
        "--prop workbook.dateCompatibility=true"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "workbook.filterPrivacy": {
      "type": "bool",
      "aliases": ["filterprivacy"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProperties FilterPrivacy flag — when true, Excel hides personal info from filter saves.",
      "examples": [
        "--prop workbook.filterPrivacy=true"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "workbook.showObjects": {
      "type": "enum",
      "values": ["all", "placeholders", "none"],
      "aliases": ["showobjects"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProperties ShowObjects — visibility of embedded objects (charts, pictures, shapes) in the workbook view.",
      "examples": [
        "--prop workbook.showObjects=all",
        "--prop workbook.showObjects=none"
      ],
      "readback": "all|placeholders|none",
      "enforcement": "report"
    },
    "workbook.lockStructure": {
      "type": "bool",
      "aliases": ["lockstructure"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProtection LockStructure flag — when true, sheets cannot be added/deleted/renamed/reordered.",
      "examples": [
        "--prop workbook.lockStructure=true"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "workbook.lockWindows": {
      "type": "bool",
      "aliases": ["lockwindows"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProtection LockWindows flag — when true, workbook window size and position are locked.",
      "examples": [
        "--prop workbook.lockWindows=true"
      ],
      "readback": "true|false",
      "enforcement": "report"
    },
    "workbook.password": {
      "type": "string",
      "aliases": ["workbookpassword"],
      "add": false,
      "set": true,
      "get": true,
      "description": "WorkbookProtection legacy password (ECMA-376 short hash). Set the plaintext to apply; pass empty or 'none' to clear. Get returns '***' when present (the plaintext is not recoverable from the stored hash). Known weak — back-compat only.",
      "examples": [
        "--prop workbook.password=secret",
        "--prop workbook.password=none"
      ],
      "readback": "*** if set, otherwise omitted",
      "enforcement": "report"
    }
  }
}
