Optionaloptions: RenderWorkbookOptionsThe workbook report's job is routing — which sheet do I go to, and is anything broken? Every line earns its place against that, and a broken book must not read clean.
One short summary per sheet, one line per layer. Content, formulas and styles each have
their own extent, so a single Used column could only report the widest of them — a column
style running to XFC made a 33-row model read as sixteen thousand columns. Each layer line
carries its extent and its counts: blocks against cells is the fragmentation signal, formula
regions and distinct formulas say how many ideas the model has, and distinct fonts and formats
say whether the styling is a convention. A layer that is empty has no line. The structure
behind each line is the sheet report's, and the content line carries that sheet's call
(wb.getSheet("Sales") lists the blocks): a reader routes by copying an address off the roster,
so the call to the fuller report sits on the line the address is read from. Twins — sheets
whose formula partitions are identical, where the audit is the diff between them — are named on
the sheet.
Every sheet is summarized: an agent asked about a sixty-sheet book needs sixty summaries, and there is no cheaper call that gives them. Labels and extents align across sheets, so reading down still compares them.
Two kinds of broken, kept apart deliberately: an error is a successfully calculated error
VALUE (#DIV/0! from =1/0 — the Error kind), a calc failure is the engine failing to
evaluate at all (mostly circular references — CalcError). A book with zero of one and three
of the other is still badly broken, so each gets its own section and neither hides the other.
Tables, pivot tables and the floating layer each get a line, by type — tables, charts,
shapes — the same names their sections carry on the sheet's report, so a line here is the
heading to look for there.
What the author wrote on a sheet is quoted under it. Text on a shape is a note to the reader
— what a block means, which cell to change — and this is the report every reader runs first, so
the shapes line says how many carry text and the first few follow it, located and
unparaphrased. Under the sheet rather than in a section of the book's: a note is about the sheet
it sits on, and that is where a reader deciding whether to open the sheet will see it.
Sheet ids are a session concept, not a document concept, and are not stable across runs — they do not appear here. Hidden sheets are marked inline where they exist rather than summarized in an always-zero count line: a hidden sheet with data is a classic miss, and the mark is what surfaces it.
Pure rendering — the agent-priming preamble the pre-migration SDK report carried
(PROMPT_STRING) belongs to the host that primes the agent, not to the report.
Renders a markdown summary of a workbook: identity, a summary per sheet, what is broken, names and code.