# Verification and compatibility

Recorded environment: Windows, Unity 6000.0.83f1, built-in rendering pipeline.

## Current backend snapshot (2026-10-21)

Latest regression: single-row/single-column `INDEX` with position arrays now supports omitted `column_num`, per-cell reference errors, spill placement, and save/reopen. The lookup group passes 23 assertions in native Unity. Multidimensional omitted-column and zero-index-array modes remain incomplete; native Excel acceptance is unverified. Evidence: `Docs/Testing/2026-10-21/OmittedVectorIndexImplementation.json`.

Unity 6000.0.83f1 on Windows passed 112 backend groups with 11,834 successful
assertions. This includes 108 general-workbook groups and 4 sample game-data
integration groups. The sample groups passed 212 assertions comparing the source
XLSX, registered binary, decrypted bytes, generated Load/GetData APIs, every typed
field, and XLSX export/reload. Test projects used a unique product name so user save
files could not override sample data. No runtime Save API was invoked.

The separate .NET runner and Unity results together provide passing evidence for
120 backend groups; this is mixed-runtime coverage, not 120 groups in one native
run. Assertion totals include localization checks and are not feature counts.

Plain global, local and sheet-qualified defined-name aliases can now follow a
partially cut range through multiple aliases when used by supported aggregates.
Aliases retain their names and definitions; local shadows remain independent.
Shape-dependent uses such as INDEX through an affected alias still reject the
operation atomically. Relative-name origin semantics remain incomplete.

Recovery journals reject duplicate or missing state/baseline fields, unknown
structure or encoding, and malformed UTF-8. Legacy unencoded snapshots remain
readable. Rejection preserves the source and diagnostic journal. Separate owned
process tests passed 39 checks after forced termination; these are backend process
tests, not an interactive Unity crash-recovery acceptance.

Shape line opacity can be changed without replacing the existing theme color or
luminance transforms. Undo/redo and save/reopen preserve the other drawing XML.
Interactive object-popup and native Excel appearance acceptance remain pending.

Conditional expression/comparison rules now edit supported multicolor fills and
expose them to displayed-fill filters. The 0.??% format supports optional-decimal
alignment and quoted/escaped affixes without changing numeric values. Rectangle
linear gradients support 2–256 stops and per-stop ARGB entry. Reading a gradient
and editing its angle or RGB retains the original finer DrawingML alpha value
when the preview alpha byte is unchanged. New alpha entry remains 8-bit.
Interactive popup acceptance and native Excel visual equivalence are unverified.

Recent supported paths include absolute external names with a worksheet qualifier,
explicit source refresh, names in documents with table formulas, scalar-to-array
name transitions, blocked-spill preservation, and conversion of unreferenced plain
tables while retaining unrelated table references. Relative/formula/recursive and
workbook-only external names, table-reference materialization during conversion,
and broader unrecognized formula/document combinations remain limited.

The backend runs did not operate the interactive editor UI or approve a release.
Separately, the Windows Mono player executed both shipped sample scenes and
passed 54 runtime assertions, with no build errors or warnings in its latest run.
The Windows IL2CPP build was attempted and failed because the Unity IL2CPP support
module is not installed. Native Microsoft Excel roundtrips, macOS execution and
visual rendering acceptance remain incomplete.
Automatic system-color following and exact font/layout fidelity also remain
unverified. Earlier screenshots remain historical. Source coverage is 100/117
implemented with 17 partial capabilities, and detailed coverage is 49/81; neither
metric means complete Excel compatibility. Independent native-speaker review of
the translated guides has not been performed.

## Historical verification snapshot (2026-10-20)

The following results and scope descriptions refer to earlier snapshots. They do not
establish acceptance of the current working tree or the additions above.

A prior complete C# and workbook regression snapshot passed 24,558 assertions. This count
includes translated-label consistency checks; it does not count manual workflows.
That Windows snapshot passed 6,837 native checks and all three
sample scenes in Play Mode, generating its workbook fixtures inside the isolated
project rather than reading ignored files from a previous development run. A later export run, when present in the development
report, validates its own snapshot. No test count implies universal compatibility.

General XLSX/CSV editing is independent of the typed game-data schema. It includes
cell/range editing, sparse cross-sheet copy/cut, supported formula recalculation,
formatting, structure, sort/filter, freeze panes, worksheet and name management.
Shared formulas expand to independent equivalent formulas only when editing;
opening leaves original bytes unchanged. Formula checks cover whole rows/columns,
global/local absolute defined names,
SUMIFS/COUNTIFS/AVERAGEIFS, scalar XLOOKUP and documented dynamic arrays including
SEQUENCE, FILTER and SORT. Supported spill entry, resizing, fill, sorting and
structural editing preserve validated ownership. Restricted aggregate partial-cut
and scoped absolute-name cases rewrite references; unsafe shape-dependent changes
are rejected atomically. Relative defined names and binary XLOOKUP search remain
unsupported. The game numeric engine is separate.

Original PNG/JPEG image insertion, basic shape insertion, top-level object move,
resize/delete and six basic chart types are implemented. Charts retain live cell
references, refresh supported caches and allow title/anchor changes. Supported
series names/ranges, RGB/theme/brightness/opacity and pie/doughnut point styling
are covered by backend preservation tests. Object pointer move/resize, Shift aspect locking, arrow nudging, Esc cancellation
and shape-text editing are implemented. Coordinate tests and XML/media comparisons
cover resize directions, undo and preservation. Actual pointer input is unverified.
Multi-axis autofit uses a single undo transaction. Group-child
and advanced object editing remain unsupported. Tests cover undo/redo, inserted
binary media in recovery snapshots and save/reopen. Independent openpyxl parsing
recognized the new image and six charts. This is not actual Excel application
rendering, complete Excel chart support or pixel-identical preview.
Imported XY scatter charts additionally have a basic numeric-spacing preview for
marker, straight-line and line-with-marker styles with automatic linear axes.
Scatter series names and equal-length numeric X/Y ranges can be edited, including
cross-sheet ranges. Undo/Redo, recovery and save/reopen preserve these changes;
invalid/non-numeric or mismatched ranges reject atomically. Scatter insertion
supports a header row, first numeric X column and 1–12 numeric Y columns with up
to 200 data rows, creating marker style. Non-numeric or entirely unpaired data
rejects without adding objects. Color editing is not supported. Smooth, logarithmic,
reversed and explicitly bounded axes remain unsupported. See the current guide
for the documented limits; this preview is not full Excel scatter rendering.

Unsaved sessions and drafts are journaled under Library/DesignDataTable/Recovery.
A separate owned process was force-terminated and its journal restored by another
process while the original SHA-256 stayed unchanged. Recovery supports changed or
missing originals via Save As; conflict checking blocks source replacement. A
locked old journal must not turn a successful source save into a failed save.
An invalid uncommitted draft no longer prevents restoring other unsaved changes;
the draft remains available for correction. Retained Undo/Redo stacks survive
native window snapshot serialization, including clean documents, and dirty-document
recovery. Owned backend forced-termination tests cover both XLSX and CSV. This
does not certify an actual interactive Unity crash or domain-reload event.
CRLF, LF and standalone CR cell text survive edit, Undo/Redo, save/reopen and
recovery. Native CSV formulas calculate again when reopened.
Failed edit, Undo/Redo and session-restore operations retain the previous document,
history stacks, saved-state identity and source fingerprint when restoration or
recalculation rejects an invalid snapshot. Source files are not written by these
rejected operations. Corrupt saved snapshots and invalid recovery fingerprints are
rejected before committing session identity.
Snapshot loading validates the root, entry names and structure, duplicate XML or
binary entries and all decoded payloads before replacing existing state. DTDs are
rejected. Invalid later entries cannot partially clear or replace the current XML,
binary data or removed-part metadata. Normal snapshot round-trips remain exact.
On Windows, a shared-read source lock that prevents file replacement is tested for
XLSX and CSV. Failed saves retain the exact pending package and formula caches,
both history stacks, saved-state identity and recovery journal; temporary output
is removed. Releasing the lock permits retry, followed by normal Undo/Redo.
This lock test does not certify macOS or Linux file-sharing behavior.
Actual Unity editor crash/restart recovery is a separate, unverified UI case.
Native headless EditorWindow lifecycle tests also verify cell, format and object
commands queue and persist recovery. Asset moves retain pending edits and migrate
existing recovery/drafts. These tests are not actual pointer/keyboard interaction.

Preservation tests compare unrelated image/drawing parts during value/format saves
and validate intentional reference changes. General saves back up originals in
Tools/WorkbookBackups. Signatures, macros, pivots, slicers, ActiveX, OLE, protected
sheets and unsupported legacy array/data-table features conservatively block unsafe edits.

The 100,000-cell/10,000-formula benchmark is a .NET backend measurement, not Unity
frame timing. Nine localized HTML guides and the English PDF describe current
scope; all 22 English PDF pages were rendered and inspected, including unchanged
pages from the reviewed previous snapshot. Game-scene illustrations
are not screenshots of the new general spreadsheet editing UI.

## Pending interactive and environment verification

The observed Unity desktop is still covered by an UnrealPak Windows Security
network-permission dialog. That dialog was not manipulated. Spreadsheet keyboard,
mouse, IME, popup geometry, close/reload and multi-monitor tests remain unverified.
Backend tests never count as those interactive checks. No updated 100% completion
or full Microsoft Excel compatibility is claimed.

Other Unity versions, macOS/Linux, IL2CPP and URP/HDRP were not executed in this
upgrade. Supported release environment selection is still pending. Package export
and source-byte verification certify only the recorded package snapshot. Asset
Store acceptance is not granted by this file or the local verification reports.

## Asset Store Tools archive warning

The installed official Asset Store Tools 11.3.1 validator was run locally for
Tools/Game Toolkits. Its compressed-file check flags the four sample XLSX files
because they have an OOXML ZIP signature. Its source checks archive signatures
and does not exempt the XLSX extension. These files are the actual editable
spreadsheet sources, not unrelated nested content archives. They are deliberately
retained. This warning requires explanation during review; it is not reported as
a passed check or as an exemption granted by Unity.


## Historical development notes

The sections below record earlier implementation snapshots. The current summary
above and the localized user guides supersede earlier statements of unsupported
features. Historical test counts and limitations are not current acceptance credit.

## Cross-platform and general calculation hardening

Path identity preserves case on Unix, while Windows aliases retain their previous
case-insensitive recovery identity. These are code/policy checks on Windows, not
actual macOS filesystem or save validation. Ctrl and Command shortcuts are handled
in code. IME composition defers worksheet shortcuts; actual IME testing is pending.

General workbook calculations now apply negation before powers and evaluate chained
powers left to right, following the Microsoft Excel precedence documentation. The
existing game-data numeric engine retains its legacy default. Newly registered
Excel tables opt into Excel operator precedence, persisted in worksheet metadata
and copied by table editing operations. Power/sign/percent expressions, nested SUM,
runtime bytes and XLSX reload are regression tested. This does not prove every
Excel function imports identically; unsupported numeric functions remain unsupported.

Known standard calculation errors update their caches. Unsupported parser syntax
keeps its previous formula cache rather than overwriting it with an internal error.
Mixed-type sorting distinguishes numbers, text, logical values, errors and actual
blanks. Ctrl/Command+Enter selection entry and Alt+Enter editing were implemented;
only their backend data effects and native lifecycle paths have been verified.

Tools/Verification/Unity/RunValidation.py is a development-only runner for Windows
and macOS. Preparing it on Windows does not certify Mac execution. A matching
installed/licensed editor is required. Windows execution passed; actual Intel and
Apple Silicon Mac runs and interactive tests remain outstanding.


## Combined row visibility

Value filters and manual row hiding now keep separate reasons for hiding a row.
Show Rows does not override a rejecting filter. Clearing filters retains manual
hiding, including after save/reopen, undo/redo and row insertion/deletion.
Filter evaluation respects the stored range's header and bottom boundaries.
Color and icon criteria remain preserved; changing their
visibility is rejected atomically rather than treating them as empty value lists.
Custom comparison filters are now supported as described below. Other advanced
filter editing remains unfinished.

Row visibility reasons are stored in ignorable namespace attributes while standard
OOXML row.hidden remains the state read by other spreadsheet readers. Independent
openpyxl loading reported no warnings and the expected hidden rows. This is not an
Excel application round-trip test. An external file that only stores row.hidden
cannot reveal whether a filtered-out row was also manually hidden; only manual
hiding distinguishable from its existing filter is inferred. Other applications
may discard these optional attributes when saving, so that external round-trip
still requires testing.


## Sparse lookup positions

MATCH now returns the original range offset rather than the ordinal of a stored
cell when searching a sparse whole column. A pre-fix execution returned 2 for a
value at A5; the corrected result is 5. Exact text MATCH supports wildcards and
tilde escapes. Numeric and text lookup keys remain distinct. INDEX now returns
references usable in aggregates, supports single-row vectors and zero row/column
indices. This is not dynamic-array spill or the complete multi-area reference form.

The current source passed 13,223 .NET assertions and 567 Windows Unity checks with
three sample scenes. Twenty-five lookup cases were saved/reopened. An independent
openpyxl reader loaded their cached values without warnings; it did not recalculate
in Excel. Actual UI, macOS and broader sparse blank/error lookup comparison remain
unverified. The preceding release archive passed 517 native and 23 clean-import
checks; it predates this lookup fix and needs re-export before delivery of this fix.


## Object clipboard and command routing

The general editor now routes object copy/cut/paste/delete commands to the selected
object rather than the underlying cell selection. Images, top-level shapes and
charts can be copied between worksheets in the same session. The clipboard captures
a snapshot; cloned chart parts are independent and original image bytes remain
unchanged. Object cuts verify that the object, anchor and dependencies still match,
then remove the original only after successful insertion. Undo/redo, recovery,
save/reopen and preserved two-cell anchors are regression tested. Dependencies
are limited to 256 parts and 32 MB. The clipboard now retains a compact package containing only its selected anchor and
related parts; it holds its source session through a weak reference. In a fixture
with 8 MB unrelated media and 2,048,000 worksheet text characters, the retained
package buffers totaled 5,480 bytes. This is package-buffer accounting, excluding
managed-object overhead and other open editor sessions. Copying did not normalize
shared formulas or change the source session. A detached owner was collected and
the shape snapshot remained usable. These are fixture/backend results; broader
workbook and interactive profiling remain pending.

This is an internal object clipboard, not a native Excel or operating-system image
clipboard. Expired internal tokens are rejected as cell input. Cross-workbook chart
reference conversion, cross-workbook cuts, grouped-child copying and actual input
handling remain unfinished or unverified. Window-command lifecycle checks execute
commands on non-displayed EditorWindow instances; they do not prove keyboard,
pointer, focus, popup or macOS behavior. Independent openpyxl loading confirms the
saved chart/image relationships and cell values without warnings; no Excel application
round-trip was executed. These source changes are not yet in the previous release.


## Custom comparison filters

General XLSX column filters now support equal, notEqual, lessThan,
lessThanOrEqual, greaterThan and greaterThanOrEqual, with one or two conditions
combined through AND/OR. Text equality accepts *, ? and ~ wildcards. The criteria
are written as OOXML customFilters/customFilter elements. Numeric conditions use
calculated raw numbers rather than formatted display strings. Boolean and empty
criteria, simultaneous value filters, manual hiding, undo/redo and save/reopen are
regression tested. Conditions are limited to 32,767 characters. Numeric criteria
use an invariant decimal point. Mixed-type and locale-specific Excel equivalence
still needs broader application-level verification.

The themed column popup has Values and Conditions modes and restores existing
accepted values or custom criteria. Its new labels are translated into all nine
supported editor languages. Popup constructor/lifecycle checks are not rendered
or interactive UI acceptance. An independent openpyxl reader loaded both custom
conditions, their AND attributes, original formula/number format and hidden rows
without warnings. No Excel application recalculation or filter reapplication was
executed. Color/icon filters remain unsupported for editing.
The current source passed 13,660 .NET assertions and 605 Windows Unity checks plus
three sample scenes. The release archive and PDF/HTML feature notes need updating
for the changes since the last release checkpoint.


## Registered table source context

All table editing candidates now retain sourceSheet alongside arithmetic mode,
name and source version. A pre-fix execution lost this binding after Paste and a
multi-sheet TableWorkbook.Write failed with "Select the registered worksheet before
saving". The registered editor's registry fallback can mask some such cases; this
regression test targets the explicit table/source API and preserves its binding.

Ten editing paths (paste, batch fill, fill down, sort, replace, row/column insertion
and deletion) were saved into a registered Game worksheet beside an unregistered
Overview. Runtime bytes matched after reopen and Overview XML remained byte-for-byte
unchanged. Implicit single-sheet loading now records the actual sheet name, so
adding another worksheet later does not make its source binding ambiguous.

Native XLSX import accepts an explicit worksheet, and the registered editor offers
a themed source-sheet picker for multi-sheet imports. Imported data retains the
destination name, theme, source sheet and version. Native XLSX uses its stored
arithmetic mode; metadata-free formats use the destination arithmetic mode. CSV
round-trip tests cover both Excel and legacy game precedence. New picker/status
labels have nine translations. The import picker has not been exercised through
real mouse/keyboard input; actual UI and macOS remain acceptance gates.


## Chart cache metadata preservation

A pre-fix unrelated cell save rewrote numeric caches with General format and
replaced cache metadata. Refresh now detects equivalent values (including numeric
lexical forms such as 0.2500) before editing. Unrelated saves retain original chart
XML bytes. Changed caches retain their formatCode, per-point formatCode, extensions
and chart style while updating values and sparse point counts. Unrecognized chart
range references keep the previous cache; full chart formula-reference evaluation
is still incomplete. New regression cases cover numeric/category changes, blanks,
later unrelated saves and unsupported references.

Current source: 13,821 .NET assertions, 648 Windows Unity checks and three sample
scenes passed. An independent reader loaded the chart with percent formats, style
13 and three opaque extension payloads without warnings. Excel application round
trips and actual chart UI behavior were not tested. A fresh archive/source audit
found 20 source differences from the previous package; that archive is intentionally
not counted as current. ProductAcceptanceAudit.json in development reports separates
backend evidence from missing UI, macOS, document and release acceptance gates.


## Documentation synchronization snapshot

The nine HTML editions now describe custom conditions, sparse lookups, internal
object clipboard limits, source-sheet selection/import arithmetic and chart cache
preservation. The ten-page English PDF was rendered and visually checked. Both
images remain actual sample-scene camera captures; there are no completed live
spreadsheet UI screenshots. A historical package audit found twenty source changes;
current export and clean-import results are recorded separately in development
reports and must be checked against the package hash. Actual Windows input, macOS,
remaining feature gaps and submission validation still prevent a completion claim.


## General-editor function help

The general formula popup now catalogs fifty functions with localized descriptions,
argument syntax, selectable examples and per-function limitations. Search includes
function names, syntax, examples, localized descriptions and limitations. The
catalog reuses shared descriptions where accurate, with general-only COUNTBLANK,
text/date/lookup explanations and general error codes kept separate from game help.
SUM whole-column and absolute-name examples remain available. English function names
and invariant numeric syntax are documented explicitly.

All fifty descriptions and applicable limitations were checked in nine languages.
Fifty-two examples were evaluated against independent expected results, then saved
and reopened; an openpyxl reader loaded their caches without warnings. Current
source passed 15,883 .NET assertions and 1,782 Windows Unity checks including language
and help-catalog assertions, with three sample scenes. Those counts are not distinct
manual UI workflows. Actual popup rendering/input and macOS remain unverified. This
help change requires a new package export after the preceding synchronized release.

## Worksheet errors versus engine limitations

The general editor now distinguishes the seven standard worksheet errors handled
by IFERROR from unsupported functions, unsupported name semantics, circular
references and engine limits. IFERROR and COUNT/COUNTA/COUNTBLANK propagate engine
limitations instead of turning them into apparently valid fallback/count values.
Existing formula caches are retained when the engine cannot evaluate the formula.
Standard error literals containing slashes (#N/A and #DIV/0!) are parsed as complete
error tokens. The general function-help panel explains this distinction in all
nine supported languages. The registered game-table calculator is unchanged.

Regression cases cover all seven worksheet errors, nested IFERROR, lazy fallback,
cell dependencies, actual cycles, an over-limit source formula, count aggregates,
and save/reopen preservation of externally supplied cached results. Execution
results are recorded in the development test reports; actual Mac/UI verification
remains a separate requirement.

Reference: https://support.microsoft.com/en-us/excel/functions/iferror-function

## Installed font rendering and measurement

The general editor resolves workbook font families through Unity's installed OS
font API. The grid, inline editing and row/column auto-fit share the same font,
size, weight and wrapping configuration. Available CJK fallbacks are added for
multilingual text. A missing family uses the editor default without rewriting the
original workbook font name. The formatting panel explains this in nine languages.
Per-window native fonts are cached and released when the editor window disables.

Windows-native checks exercise distinct font metrics, wrapped text height, CJK
glyph availability, generated text geometry, saved style roundtrips and disposal.
Hidden-window AutoFit command checks are backend integration evidence, not actual
mouse/keyboard or screenshot validation. Actual product UI and macOS font/layout
verification remain pending.

Unity API reference: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Font.CreateDynamicFontFromOSFont.html

## Unified numeric, date and time display

Literal values, cached formula values and recalculated formula values now use the
same general-editor formatter. Common built-in number/date/time format IDs are
resolved consistently. Date tokens distinguish months from minutes, preserve
quoted/escaped literals, and support English month/day names, AM/PM, elapsed
[h]/[m]/[s], fractional seconds and the 1900/1904 date systems. Serial 60 retains
Excel's numeric 1900-02-29 display. Numeric sections handle negative parentheses,
color-code removal from the text display, quoted semicolons and hidden zero values.
Color directives remain in the workbook; the later named-color support section
below describes the implemented rendering subset and remaining limits.

The formatting popup includes date/time examples, a nine-language support notice
and scrollable content with the apply button outside the scroll area. English date
names and invariant numeric notation are explicit. Locale/conditional/fraction
formats beyond this support remain preserved and may display raw values. Full
Excel number-format compatibility is not claimed. Actual UI and macOS remain
unverified. Regression cases cover direct values, formulas, save/reopen and OOXML
built-in IDs; native execution reports are maintained in the development evidence.

Reference: https://support.microsoft.com/en-us/excel/review-guidelines-for-customizing-a-number-format

## Information and selective-error functions

General spreadsheet formulas now include IFNA, ISBLANK, ISNUMBER, ISTEXT,
ISNONTEXT, ISLOGICAL, ISERROR, ISERR, ISNA and TYPE. Information checks keep the
original value kind: numeric text is not converted to a number, an absent cell
is distinct from a formula returning empty text, and standard errors are classified
without hiding unsupported engine calculations, cycles or limits. TYPE supports
scalar number/text/logical/error codes 1/2/4/16. IFNA evaluates its fallback only for
#N/A; other errors propagate. These functions support single values/cell references,
not dynamic arrays or spilling. The registered game-table calculator is unchanged.

The general function-help catalog has 60 entries and 62 examples, with translated
syntax descriptions, limits and search in nine languages. Nine HTML guides and the
English PDF carry matching counts. Regression cases include all seven standard
errors, empty cells/text, numeric text, logical values, lazy branches, unsupported
references and save/reopen. UI and actual macOS verification remain separate gates.

References: https://support.microsoft.com/en-us/excel/functions/is-functions
and https://support.microsoft.com/en-us/excel/functions/ifna-function

## Local diagnostics and bug reports

Both editor File menus and Window > Design Data Table > Report a bug open the
localized report form. Users review their own descriptions and export a ZIP for
manual submission; no automatic upload occurs. Bounded JSONL events omit workbook
names/paths, cell/formula contents, full exception messages and Unity Editor.log.
Recording can be disabled using a UserSettings preference that survives Library
replacement. Atomic export preserves existing files. Nine HTML editions and the
English PDF explain the workflow and limits. Windows backend tests cover rotation,
retention, excluded private data, opt-out persistence, JSON parsing, export failure
and nonfatal logging storage errors. These do not prove actual popup pointer or
keyboard interaction, nor macOS execution; those remain unverified.

## Named number-format colors

Numeric sections now display Black, Blue, Cyan, Green, Magenta, Red, White and
Yellow for literal and calculated numeric values. Positive/negative/zero sections
select their own color. Original font colors and number-format strings remain
stored unchanged. Text, numeric-looking formula text and errors retain their
source font color. Quoted or escaped color names are literals. Indexed palette
and conditional colors are not inferred. Tests cover section selection, eight
names, quoted text, formula types, persistence and Unity's actual grid color
conversion helper. These are backend checks, not an observed grid screenshot.

## Predicate-based number-format sections

Number formats can choose sections with <, <=, >, >=, = and <> comparisons.
One or two explicit predicates must be followed by an unconditional fallback.
The first match controls numeric text and named colors; predicates can precede
or follow the color directive. Missing fallback, repeated/malformed predicates
and unsupported layouts preserve the source and fall back to raw display.
This does not implement worksheet conditionalFormatting rules. A checked-in
70-case corpus was generated by the independent SheetJS SSF 0.11.2 formatter;
direct display, literal/formula parity and save/reopen are compared with it.
This is not an executed Microsoft Excel oracle. Existing game-data calculations
remain separate. Actual rendered UI and macOS still require acceptance testing.

References: https://learn.microsoft.com/en-us/troubleshoot/microsoft-365-apps/excel/format-cells-settings
and https://github.com/SheetJS/ssf

## Fraction display

Mixed # ?/?, # ??/?? and # ???/??? fractions, improper ?/? forms, fixed
denominators (up to four digits), parentheses and named/conditional number-format
sections are supported. Variable denominators select a nearest rational bounded
by 9, 99 or 999. Fixed denominators round half up and are not reduced. Unsupported
complex affixes, more than three placeholder digits and magnitudes above 1e12
retain source formatting with raw display. Literal and calculated numbers use the
same path. The original numeric values, formulas and format strings are preserved.

The 160-case corpus uses independent Python Fraction.limit_denominator and Decimal
half-up expectations. 150 outputs agree with SheetJS SSF 0.11.2; 10 approximation
differences are retained explicitly for actual Excel verification. No Excel app
execution or full fraction compatibility is claimed. The oracle library is used
only in development and is not a production dependency. Actual UI/Mac gates remain.

Reference: https://support.microsoft.com/en-us/excel/display-numbers-as-fractions

## Numeric top/bottom filters

Column filter popups include Top / bottom, item count (integer 1–255) and percent
(0–100). Ranking uses all numeric values and numeric formulas in the original
filter range before combining other columns with AND; ties are included and
percent item counts round up. Text, numeric-looking text, booleans, blanks and
errors are excluded. Manual hiding is retained. Standard top10 attributes and
the calculated filterVal boundary persist; criteria reopen for editing. A change
to a cell requires reapplying the filter. Undo/redo and clearing preserve the
manual/filter visibility distinction. Zero percent hides all data rows. Existing
unsupported color/icon criteria are preserved without guessing.
Actual popup pointer input, Microsoft Excel reapplication and macOS are unverified.

References: https://support.microsoft.com/en-us/excel/filter-data-in-a-workbook-in-the-browser
and https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.top10

## Sparse rows and sorting hidden rows

A failing executable regression reproduced absent XML rows remaining visible under
a numeric ranking filter. Rejected blank rows inside the filter range now receive
row visibility metadata without adding cell values. Accepting blank rows and
clearing filters reveal them. Manual/filter hiding remains distinct after saving.
A 10,001-row/two-cell fixture exercises gaps and reopens with 9,999 hidden rows.

Sorting reorders visible destinations only. Filtered and manually hidden rows keep
their original cells and positions; records, styles and translated formulas move
between visible rows. The operation remains one undo transaction and survives
save/reopen. This follows the documented rule that hidden rows are not moved when
sorting rows. Real Excel application and actual editor UI acceptance remain pending.

Reference: https://support.microsoft.com/en-us/excel/sort-data-in-a-range-or-table-in-excel

## Date-group filters

Standard dateGroupItem criteria are read and written for year/month/day/hour/
minute/second precision. Groups combine with OR, including retained literal-value
criteria and optional blanks. Other columns combine with AND. Numeric serials and
numeric formulas use the workbook 1900/1904 system, including serial 60's synthetic
1900-02-29 and 1904 serial zero. Invalid groups are rejected without mutation.
The popup supports adding/removing groups, precision and date/time components.
Manual visibility, undo/redo and save/reopen retain their existing semantics.
Gregorian/unspecified calendars only; alternate calendars are preserved without
evaluation. Text dates are not coerced. Actual Excel/UI/macOS acceptance remains unverified;
typed ISO cell support is described below.

Reference: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.filters

## Typed ISO dates and deterministic clock rendering

Cells explicitly typed t=d are parsed as numeric dates for general calculations,
styled display, sorting and grouped-date filters. RawValue and t=d remain original
on unrelated saves; the game-data reader still receives the original DateTime text.
Plain string dates are not coerced. Unqualified values retain their written clock
time; Z and offset timestamps use UTC. Date-only and minute/second precision are
accepted in supported 1900/1904 serial ranges. Invalid/range-exceeding inputs keep
their text and return #VALUE! in formulas. General style keeps the ISO text.
Actual Excel timezone equivalence and macOS execution remain unverified.

A failing display check reproduced 12:34:00 as 12:33:59 from fractional-day
roundoff. Date formatting now constructs integer days and rounded clock ticks
separately. Regression coverage includes the Microsoft 1976-11-22T08:30Z example,
offset equivalence, fractional seconds, invalid dates, grouped filtering, raw
source preservation and game-data DateTime reading. Popup callback availability
also guards date-only callers without a ranking action.

Reference: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cellvalue

### General SUBTOTAL calculations
SUBTOTAL supports codes 1-11 and 101-111 for range references, filtered/manual row visibility, nested subtotal exclusion, count/error behavior and stable sample/population statistics. Hidden columns remain included. External ambiguous hidden rows produce unsupported results for 1-11 and retain saved caches; 101-111 exclude all hidden rows. Live Microsoft Excel equivalence and real popup UI are not certified. Native validation evidence is recorded separately.


### Stored RGB, theme and indexed color filters
General spreadsheet filters support RGB fill/font colors and no fill, combined with other column criteria. Differential formats are reused; style and row changes undo atomically. Blank/missing rows and manual hiding are handled. Pattern/gradient colors, table/conditional styles, number-format font colors and icon filters remain incomplete; unsupported edits preserve the source. Actual filter popup input, Microsoft Excel application interoperability and macOS execution remain unverified.


### Theme, indexed and tint display
Cell display and color filtering share a color resolver for RGB, twelve theme slots, saved sysClr lastClr values, default/custom palettes and HLS tint. Original theme/tint/indexed source attributes remain unchanged. Cell display also honors row/column inherited styles. Missing/conflicting definitions and system indices 64/65 remain unresolved; no arbitrary replacement is used. Ninety independent tint cases and 64 independent indexed colors are covered; actual Microsoft Excel rounding and live UI/macOS fidelity are not certified.

### Imported conditional colors
General spreadsheet display supports font/fill colors for eight cellIs comparisons and supported expression formulas. Global priorities, stopIfTrue, first-area relative references and blank-cell shading are evaluated without adding source data. Calculated conditional colors feed color filters. Unrelated saving preserves original conditional rule XML including unsupported data bars. Unsupported differential properties, mixed types, color scales, bars, icons remain incomplete; warnings and atomic color-filter rejection prevent guessed results. Actual Excel, live UI and macOS equivalence are unverified.


### Conditional color rule authoring
The themed ribbon popup adds comparison/expression color rules to exact rectangular or disjoint selections, with font/fill preview and stopIfTrue. The sheet-wide list removes and reorders rules; additions, differential styles, removal and priority changes support atomic Undo/Redo and save/reopen. Unsupported originals remain unless explicitly removed. Supported existing color rules can be loaded and updated; unsupported contents remain read-only. The popup has nine-language labels; actual pointer/keyboard/layout and macOS acceptance remain unverified.


### Conditional rule content editing
Supported color rules load and update range, type, formulas, colors and stopIfTrue without changing priority. Shared multi-rule groups split only the selected rule when changing its area. Formula-only updates reuse original theme/tint differential styles and preserve original styles/theme bytes. Unsupported properties are not editable. Loaded-rule signatures reject stale edits. Updates support atomic undo/redo and save/reopen; no-fill differs from no override. Actual manager input/layout, Microsoft Excel application equivalence and macOS execution remain unverified.

### Imported color scales
Two/three-color scales support min/max, number, percent and inclusive-percentile thresholds, combining numeric values and supported formula results across target areas. Blanks, text, logical values and worksheet errors are excluded. Interpolated fills feed color filters; edits/Undo invalidate the population cache and original scale XML survives unrelated saving. Relative/mixed-reference formula/degenerate/non-increasing thresholds and unsupported population formulas are preserved and reported unsupported. Scale creation/editing is implemented; actual manager input/layout and Excel color-rounding/UI/macOS equivalence remain unverified. The independent Decimal interpolation corpus contains 147 cases.


### Color scale authoring
The conditional popup adds a color-scale tab with two/three stops, min/max/number/percent/percentile kinds, stop values/colors and a gradient preview. Supported existing scales load and update without changing priority; ranges split safely from siblings. Conversion between two/three stops preserves untouched endpoint theme/tint colors. Conversion to/from basic rules removes incompatible child elements. Undo/Redo, atomic invalid-draft rejection and save/reopen are covered. Relative/mixed-reference formula/degenerate thresholds and actual input/layout/Excel/macOS remain incomplete.


### Formula color-scale thresholds
Legacy SpreadsheetML cfvo formula values support absolute cell/range references, cross-sheet references, numeric expressions and supported absolute defined names. Referenced cells refresh the scale; formulas retain text through updates, Undo/Redo and save/reopen. Relative/mixed references, nested relative names, cycles, nonnumeric results and unsupported functions reject before mutation. Imported unsupported rules preserve their source XML. Degenerate/reversed thresholds, actual Excel application equivalence and actual popup/macOS interaction remain unverified or unsupported.


### Imported legacy data bars
Legacy SpreadsheetML dataBar rules display a gradient bar, numeric range length and showValue. Thresholds support min/max/num/percent/percentile and supported absolute formulas. Default lengths are 10-90%, custom valid percentages respected. Edits/Undo invalidate calculation; unrelated saving preserves original XML. This supersedes earlier blanket data-bar display limitations only for this subset. Extended x14 axes/negative colors/direction/borders, degenerate thresholds and actual Excel pixel/gradient equivalence remain incomplete. Actual grid UI and macOS execution remain unverified. Formula basis: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.databar?view=openxml-3.0.1


### Legacy data-bar authoring
The themed conditional popup includes a data-bar tab: lower/upper thresholds, color, length percentages and showValue. Supported rules load/update with retained priority, sibling ranges and unchanged theme/tint attributes. Bars/scales/basic rules convert without obsolete child elements; Undo/Redo and save/reopen are covered. Invalid drafts reject atomically and stale loaded rules require reload. Unknown or extended metadata stays read-only. Actual pointer/input/layout, x14 axes/negative colors/direction/borders, degenerate thresholds, actual Excel equivalence and macOS remain incomplete/unverified.


### Conditional font flags
Bold/italic differential flags are supported for cell-value and expression rules, imported and authored. Nullable flags distinguish absent/base, explicit on and explicit off. Highest-priority specified property wins independently, including false; stopIfTrue remains honored. Formula/color-only updates retain unchanged flags and original theme color elements. Grid, inline text and auto-fit use evaluated flags. Undo/Redo and save/reopen are covered. Other differential font properties (underline, strike, family/size), actual grid/popup input/layout, real Microsoft Excel typography and macOS remain unsupported/unverified.


### Conditional number formats
Cell-value/expression rules read/create/edit inline differential numFmt records. Priority selects the first matching number format, while explicit font colors remain higher than format colors. Numeric values/formula results display through the existing engine; numeric-looking text remains text. Original cells/formulas/base styles stay unchanged. Formula-only edits preserve original numFmt records, format changes allocate an unused ID. Undo/Redo, override removal and save/reopen are covered. Metadata outside supported numFmt attributes stays read-only. Existing number-format limitations (locale/indexed directives and raw fallback), number-format color-filter rejection, actual grid/popup UI, real Excel and macOS remain incomplete/unverified.


### Numeric number-format font-color filters
Filters support eight named colors in selected numeric sections, numeric predicates, formula results and matching conditional number formats; explicit conditional font color takes precedence. Other columns combine with AND; save/reopen and Undo covered. Values changed after filtering require reapplying criteria, as in Excel. ColorN/locale/malformed or multiple color directives, unsupported numeric calculations and colored text sections reject before mutation. Quoted literal color text is ignored. Actual filter-popup UI, Microsoft Excel interoperability and macOS remain unverified. Reference: https://support.microsoft.com/en-us/excel/reapply-a-filter-and-sort-or-clear-a-filter


### HLOOKUP and shared legacy lookup handling
General workbook calculation adds HLOOKUP and routes VLOOKUP through the same vertical/horizontal handler. Three/four arguments, exact first match and wildcard/tilde escaping, typed comparison, ascending approximate last qualifying match, index errors and no-match errors are covered. Unsorted approximate input reports unsupported. Blank return values use zero. Table range references/absolute names supported; inline array constants supported; spill arrays unsupported. General help now has 63 functions/67 examples. Original formulas/results save/reopen. Broad blank/error-key, locale collation and mixed-type Excel application equivalence remain unverified. Typed game FormulaEngine unchanged. Reference: https://support.microsoft.com/en-us/excel/functions/hlookup-function


### Inline array constants
Rectangular inline constants support English comma/semicolon delimiters, numeric/scientific/negative constants, quoted/doubled-quote text, booleans and seven worksheet errors. Shared aggregate/INDEX/MATCH/legacy/XLOOKUP paths read immutable array views; scalar INDEX returns values and row/column views can feed aggregates. TYPE reports array code 64. Reference-only conditional aggregates, COUNTBLANK and SUBTOTAL reject array constants. Ragged/nested/missing/nonconstant entries reject with syntax errors, and formula size/depth limits apply. Multiple output/vector operations and dynamic spilling remain unsupported with source caches preserved. Save/reopen and named constants covered. General help: 63 functions/67 examples. Actual Excel, locale and array coercion corpus remains incomplete.


### SUMPRODUCT and consumed array arithmetic
SUMPRODUCT supports equal-shaped ranges/constants, nonnumeric-array entries as zero and error propagation. Arithmetic/concatenation/comparison/unary/percent operations work elementwise for equal shapes or scalar/single-element arrays; results feed aggregates/INDEX/lookups without spilling. Worksheet errors remain per-element and engine limits propagate. Direct SUMPRODUCT mismatched dimensions return VALUE; nonscalar operator broadcasting remains unsupported. Materialization cap 100,000 cells; direct sparse full-column SUMPRODUCT supported within a one-million element-operation budget. Save/reopen covered. General help: 63 functions/67 examples. Dynamic output, row/column broadcasting, wider mixed-type coercion and actual Excel/UI/macOS corpus remain incomplete. Typed game engine unchanged. Reference: https://support.microsoft.com/en-us/excel/functions/sumproduct-function

### AND / OR range coercion — 2026-10-20

General spreadsheet AND and OR ignore text and empty cells inside references and array constants, including numeric-looking text. An input set with no numeric/logical entries returns #VALUE!. Both functions accept 1–255 arguments and evaluate all entries so later worksheet errors propagate. Sparse whole-column references use stored entries. Direct scalar arguments retain scalar coercion; logical text TRUE/FALSE is accepted. Typed game FormulaEngine was not modified. Regression coverage includes literal arrays, boolean/numeric cells, empty strings, whole columns, argument limits, IFERROR and XLSX save/reopen. Microsoft references: https://support.microsoft.com/en-us/excel/functions/and-function and https://support.microsoft.com/en-us/excel/functions/or-function . Actual Excel application execution and interactive formula-help UI remain unverified.

### Conditional IF arrays — 2026-10-20

General spreadsheet IF accepts condition arrays consumed by aggregates, SUMPRODUCT and INDEX. Matching branch dimensions and scalar/single-entry branches are supported, with nested IF, omitted false branches, per-element worksheet errors and lazy branch evaluation. Selected blank references produce numeric zero. Computed arrays remain bounded to 100,000 cells; mismatched nonscalar shapes are explicitly unsupported. Direct multi-cell output/dynamic spilling, vector information functions and wider locale/type coercion remain incomplete. IF now rejects more than three arguments. Twenty-four regression formulas cover original formulas/results through XLSX save/reopen. Typed game FormulaEngine is unchanged. Microsoft reference: https://learn.microsoft.com/en-us/troubleshoot/microsoft-365-apps/excel/logical-and-or-in-sum-if . Nine-language guides include conditional arrays and AND/OR range handling; actual Excel and interactive UI remain unverified.

### IFERROR / IFNA elementwise arrays — 2026-10-20

IFERROR and IFNA process each element of a general-workbook array result, preserving valid values. IFNA replaces only #N/A; IFERROR handles the seven standard worksheet errors. Selected replacement arrays must match the input dimensions or be scalar/single-entry; replacement evaluation is lazy. Empty source/replacement references produce empty strings. Engine LIMIT/CYCLE/DEPTH/UNSUPPORTED errors remain visible rather than becoming fallback values. Materialized arrays are bounded to 100,000 entries, and dynamic spill remains unsupported. Twenty-six formulas cover the Microsoft quota/division example, nested IF/IFNA/IFERROR, preserved nonmatching errors, blanks, shape limits, finite-number failures, invalid arity and XLSX save/reopen. Typed game FormulaEngine is unchanged. References: https://support.microsoft.com/en-us/excel/functions/iferror-function and https://support.microsoft.com/en-us/excel/functions/ifna-function . Actual Microsoft Excel application and interactive UI verification remain pending.

### IS predicate arrays — 2026-10-20

ISBLANK, ISERR, ISERROR, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER and ISTEXT evaluate each element of range/constant-array arguments. Use SUM(IF(ISERROR(Items),"",Items)) to sum valid entries, or SUMPRODUCT(--ISNUMBER(A1:A6)) to count numeric entries. Numeric text is not coerced. Actual blank references stay null for ISBLANK, while empty strings remain text. Standard worksheet errors become predicate results; engine LIMIT/DEPTH/CYCLE/UNSUPPORTED failures remain visible. Results can feed aggregates/IF/INDEX; direct multi-value spill remains unsupported, with a 100,000-cell array cap. TYPE retains its existing scalar/constant-array handling. Twenty-six formulas cover all eight predicates, error distinctions, 2D arrays, defined-name input, blank versus empty string, invalid arity, engine limits and XLSX save/reopen. Typed game FormulaEngine is unchanged. References: https://support.microsoft.com/en-us/excel/functions/is-functions and https://support.microsoft.com/en-gb/excel/guidelines-and-examples-of-array-formulas?nochrome=true . Actual Excel application and interactive UI remain unverified.

### Numeric/text/date scalar functions on arrays — 2026-10-20

The general editor now evaluates matching-shaped ranges/arrays elementwise for ABS, INT, SIGN, SQRT, POWER, MOD, ROUND, ROUNDUP, ROUNDDOWN, LEN, UPPER, LOWER, TRIM, LEFT, RIGHT, MID, SUBSTITUTE, VALUE, DATE, YEAR, MONTH, DAY and NOT. Single scalar/one-entry arguments extend over the selected shape. Existing scalar implementations, supported signatures, date system and invalid-arity behavior remain in use. Standard worksheet errors and non-finite element results are retained for IFERROR/IS predicates; engine failures propagate. Arrays remain limited to 100,000 cells, and unequal nonscalar shapes/dynamic spill remain unsupported. Forty-nine regression formulas cover every listed function, multiple varying arguments, nested composition, blank text cells, error replacement, finite checks, 1900 serial 60/61, shape/size limits and XLSX save/reopen. Typed game FormulaEngine is unchanged. References: https://support.microsoft.com/en-gb/excel/guidelines-and-examples-of-array-formulas?nochrome=true and https://support.microsoft.com/en-gb/excel/functions/abs-function . Actual Excel application, locale/Unicode corpus and interactive UI remain unverified.

### Compatible row/column broadcasting — 2026-10-20

General array operators, 23 elementwise numeric/text/date functions, and selected IF/IFERROR/IFNA branches now combine compatible row/column dimensions. Each dimension must match or have length one; one-length dimensions repeat. Result indexing uses output rows/columns rather than flattened input offsets. Direct separate SUMPRODUCT arrays still require identical dimensions. Expanded output is capped at 100,000 cells before allocation. Incompatible dimensions larger than one remain unsupported instead of guessed/padded. Twenty-eight new formulas cover outer products, arithmetic, comparisons, concatenation, multiple function arguments, conditional/error branches, INDEX coordinates, lazy branches, SUMPRODUCT distinction, incompatible dimensions, output-size guards and XLSX save/reopen; four former unsupported expectations now verify supported results. Implementation reference: https://handsontable.com/docs/hyperformula/guide/arrays.html (independent engine documentation, not an executed Excel equivalence oracle). Excel array syntax reference: https://support.microsoft.com/en-gb/excel/guidelines-and-examples-of-array-formulas?nochrome=true . Dynamic spilling, missing-dimension padding, broader actual Excel/locale/Unicode corpus and interactive UI remain unverified. Typed game FormulaEngine is unchanged.

### SUBSTITUTE occurrence and LEFT/RIGHT arity — 2026-10-20

SUBSTITUTE accepts a fourth positive integer occurrence argument, replacing only the chosen literal, case-sensitive, non-overlapping match. Omitted occurrence retains all-match replacement. Out-of-range occurrences preserve the text; a maximum-possible-match guard prevents enormous occurrence numbers from causing long loops or integer overflow. Compatible array arguments, including row/column occurrence arrays, use the existing broadcasting path. Zero/negative occurrence and invalid argument counts return VALUE. Fractional occurrence semantics lack an executed Excel oracle and remain explicitly unsupported rather than guessed. LEFT/RIGHT reject extra arguments instead of silently ignoring them. Thirty-one regression formulas include the three Microsoft examples, literal metacharacters, overlapping search text, blank/empty text, numeric-text occurrence, large occurrence, errors and XLSX save/reopen. General function help now has 63 functions/68 executable examples with nine-language descriptions and limitations. Typed game FormulaEngine is unchanged. Reference: https://support.microsoft.com/en-us/excel/functions/substitute-function . Actual Excel/UI/macOS and fractional-occurrence behavior remain unverified.

### Independent comparison oracle and blank text coercion — 2026-10-20

General comparison operators preserve operand types: numbers, text, then logical values, with case-insensitive ordinal comparison within text. Actual blank references are compared as zero, empty text or FALSE according to the other operand; formula-produced empty strings remain text. Numeric-looking text is not equal to a numeric operand. LEN/LEFT/RIGHT/UPPER/SUBSTITUTE and concatenation now treat actual blank references as empty text, while bare references retain existing numeric-zero behavior. Numeric arithmetic/COUNTIF and lookup-specific null semantics are preserved. Thirty-eight fixture expectations were generated by actually executing the pinned HyperFormula 3.5.0 bundle locally (development-only GPL-3.0-only dependency in ignored .local, no product dependency). The oracle rewrites bare TRUE/FALSE to TRUE()/FALSE() outside quoted strings for its syntax; original Excel-style formulas remain in the fixture. Tests validate formulas/results through XLSX save/reopen. Broader locale/collation, mixed-type cellIs formatting and actual Microsoft Excel execution remain unverified. Typed game FormulaEngine is unchanged. Reproduction: node Tools/Verification/FormulaOracle/CompareValues.cjs after obtaining the pinned local bundle recorded in ComparisonEngineOracle.json. Reference: https://handsontable.com/docs/hyperformula/guide/arrays.html .

### TRUE / FALSE / NA / N / T — 2026-10-20

The general editor supports TRUE(), FALSE(), NA(), N(value) and T(value). The parser distinguishes boolean literals from function calls. TRUE/FALSE/NA take no arguments; N/T take exactly one. NA produces a standard worksheet N/A error. N retains numbers/date serials, maps TRUE/FALSE to 1/0 and other values to zero; T retains text and produces empty text for nontext. Standard errors propagate and engine limitations remain visible. N/T participate in the editor's elementwise array path, increasing those functions to 25. The general help catalog now contains 68 functions/73 executable examples with nine-language descriptions. Fifty new formulas cover 36 independently executed HyperFormula scalar/T-array cases plus 14 explicit type/array/error/arity checks; all retain formulas/results through XLSX save/reopen. Oracle limitations are recorded: HyperFormula 3.5.0 lacks TYPE and reduces N arrays to the first entry, so those outputs are not imported as product expectations. Elementwise N is checked against explicit scalar mapping; actual Excel vector-N equivalence remains unverified. Typed game FormulaEngine is unchanged. References: https://support.microsoft.com/en-us/excel/functions/n-function , https://support.microsoft.com/en-us/excel/functions/t-function , https://support.microsoft.com/en-us/excel/functions/na-function .

### Dynamic spill foundation (not a completed user feature) — 2026-10-20

Internal EvaluateArray returns a bounded, read-only row/column candidate result with typed values and per-element worksheet errors. It preserves numeric-zero reference blanks, defined ranges and INDEX view offsets; engine LIMIT/CYCLE/DEPTH/UNSUPPORTED failures remain visible. Internal PlanArray checks populated cells (including zero, FALSE, formula-empty and explicit empty text), merged intersections, caller-supplied reserved/owned regions, worksheet edges and chart sheets. Style-only blank cells remain intact. Evaluation and planning do not mutate workbook cells, dimensions, files or the existing scalar Value/Calculate/Save policy. This is infrastructure for the requested dynamic spill feature, not live spilling: grid ownership/child edit guards, table/protection and imported array metadata, dependency discovery, spill references, OOXML dynamic-array persistence and real UI/Excel interoperability are still pending. The general user guide correctly continues to describe dynamic spill as unsupported. Tests cover materialized coordinates/errors, engine limits/cycles, blockers, model/file preservation and unchanged save behavior. Reference: https://support.microsoft.com/en-us/excel/dynamic-array-formulas-and-spilled-array-behavior . Typed game FormulaEngine is unchanged.

Native verification found a real Mono/.NET difference: double.Parse of literal 1e309 threw OverflowException in Unity while .NET returned infinity. The parser now uses TryParse plus finite checks and creates a deferred standard NUM error, so IFERROR can handle it at evaluation time. Both direct candidate NUM and IFERROR fallback are regression-tested; the failed native run is retained as evidence.

### Imported spill reservations — 2026-10-20

The reader now retains worksheet table ranges via internal relationships and existing array-formula rectangles. Candidate spill planning blocks intersections automatically, including an existing array anchor: legacy array metadata alone never grants ownership to a new dynamic spill. Any sheetProtection element conservatively blocks multi-cell candidates; this is not a full locked-cell permission implementation. Missing, malformed, external or wrong-type table relationships, inconsistent tableParts metadata and invalid array anchors/ranges yield a metadata-warning conflict. Parsing and planning leave original package bytes unchanged. Single-cell scalar evaluation and ordinary save/edit policy are unchanged. Live spilling, dynamic ownership metadata, child guards, dependency/spill references and dynamic-array persistence remain incomplete.


### Spill references and formula encoding — 2026-10-20

Candidate array results can now be consumed through a single-cell anchor followed by #, or ANCHORARRAY/_xlfn.ANCHORARRAY. SUM/INDEX/SUMPRODUCT, elementwise expressions, cross-sheet anchors and dependency chains retain typed values and per-element errors without synthesizing grid cells. Occupied/merged/out-of-bounds/table collisions report SPILL; IFERROR and information predicates recognize it. Engine cycles, limits and unsupported protection/imported-array metadata remain visible. Non-array scalar anchors report REF. New formulas encode the spill operator as _xlfn.ANCHORARRAY in OOXML while quoted string literals remain unchanged. Existing formulas are not rewritten on read. These reference calculations do not activate live grid spilling, dynamic array ownership/persistence or child-cell editing protections. Legacy imported arrays remain reservations. Actual Excel execution and wider spill interoperability remain unverified. Sources: https://support.microsoft.com/en-us/excel/spilled-range-operator and https://xlsxwriter.readthedocs.io/working_with_formulas.html .


### Imported dynamic-array ownership metadata — 2026-10-20

The reader follows the workbook sheetMetadata relationship and validates cell cm indices through cellMetadata rc records, XLDAPR metadata types, futureMetadata blocks and the 2017 dynamicarray properties extension. Only validated dynamic anchors receive separate ownership rectangles; array formulas lacking this chain remain legacy reservations. Counts, index bounds, namespaces, extension identity, collapsed/dynamic flags and overlapping regions are checked conservatively. More than 4096 array rectangles blocks candidate planning rather than running an unbounded pairwise ownership check. A verified anchor can consume its own cached children through spill references, but never a child formula or another owned region. An imported result whose dimensions differ from its original region remains unsupported until resizing and writable persistence are implemented. An independently generated XlsxWriter workbook verifies cached 2/4/6/8 values, source recalculation and scalar dependent references. Invalid metadata does not grant ownership. Original package bytes and no-op save remain unchanged; editing existing array-bearing sheets remains protected. This is read/calculation support, not live grid reflow or writable dynamic-array support. References: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cellmetadata and https://xlsxwriter.readthedocs.io/working_with_formulas.html .


### Atomic dynamic-array package storage — 2026-10-20

Internal StoreDynamicArray writes a validated same-size candidate as an array formula with cm ownership, typed result cells and the workbook sheetMetadata relationship/content type. New packages receive XLDAPR metadata; existing validated metadata is reused without rewriting it. Metadata path and relationship id collisions preserve existing parts. Unrelated cells and cached-cell styles are retained; rich value metadata/unknown cell children, protected or signed/macro/embedded packages, conflicts and unsupported resizing are rejected. Shared formulas are normalized before changing an anchor. Any failure restores package state. Dependent scalar/chart caches are refreshed and full recalculation is requested. Tests verify numeric/logical/text/error result types, whitespace, original metadata preservation, repeated writes, orphan-part collision handling, blocked values and transaction rollback. This package primitive is not yet connected to automatic user editing, live grid ownership, resizing or recovery; existing session array edit guards remain active. Actual Excel execution remains unverified.


### Dynamic array resize, shrink and removal — 2026-10-20

Internal ReplaceDynamicArrayFormula authorizes a validated existing anchor to grow or shrink atomically. New regions are checked against occupied cells, merges, tables and other arrays. Shrink removes obsolete owned values while retaining cell formatting; RemoveDynamicArray clears the anchor and owned caches while keeping shared metadata records and unrelated cells. Both operations retain the transaction rollback behavior. Referencing an active array's own cached child now raises CYCLE rather than consuming stale output. Existing default read planning still rejects unrequested shape changes. Legacy CSE array anchors are not partially recalculated: saved caches supply read/dependent values, and missing caches remain unsupported. General cache persistence now retains SPILL instead of coercing it to VALUE. These are package primitives; session/UI editing, undo/recovery and clipboard/structural ownership integration remain pending. Actual Excel execution remains unverified.


### Live cell-entry path for dynamic arrays — 2026-10-20

WorkbookEditSession.EditCells connects interactive workbook input to typed array storage, source-driven refresh, child-cell protection and atomic undo/redo. Formula bar, inline input, external text cell application and clear-selection commands use this path; Ctrl+Enter opts into the same selection path. Validated dynamic anchors display their top-left computed value and persisted children extend the grid model. Derived children are read-only in formula/inline entry and excluded from recovery input drafts. Full state restore retains ownership and cached values. Reflow repeats bounded passes for direct cached-child dependencies and rejects nonconvergence; # references recurse through anchors. Creation validates ownership again after writing to detect self-child cycles. Existing raw authoring Apply remains unchanged, and CSV keeps its plain source format. Tests cover create/source updates, replacement/shrink, source-dependent shape changes, direct inter-array dependencies, full clear, undo/redo, state recovery, actual save/reopen and no-op failure rollback. Conflicting edits are currently rejected atomically rather than retaining a blocked formula with a live SPILL placeholder. Internal clipboard/fill/structural commands, arbitrary cyclic dependency graphs, user guide updates, actual pointer/keyboard input and broader Excel interoperability remain pending.


### Fresh owned-child dependency calculation — 2026-10-20

Direct references to a validated dynamic array child now evaluate the owning anchor, rather than trusting stale stored child values. Typed text/numeric/error results survive projection; obsolete children project blank during a shrink. Formula-bearing children and invalid/protected ownership remain unsupported. Active owner checks precede memoized results, so direct-child cycles across two/three arrays, across sheets and through IFERROR remain engine CYCLE errors. Array candidate results are reused within an immutable calculation instance; memoized result storage evicts its entries above one million result-cell slots without changing formula support. Existing per-array calculation limits remain unchanged. A 50 by 50 aggregate case verifies 2500 fresh child values and reports observed timing without a machine-dependent pass threshold. Interactive cycle edits roll back the whole transaction. Raw cached cells and original workbook bytes are not mutated by calculation. Actual UI input, broader Excel comparison and remaining command integration still require acceptance.


### Clipboard copy on dynamic-array workbooks — 2026-10-20

PasteCells now uses a scoped transaction when the workbook contains verified dynamic arrays. Whole-array and anchor-only copies create independent ownership and recalculate results; selected generated-child styles survive. Child-only copies become ordinary typed values. Sparse destination gaps remain unchanged. Declaring a copied anchor cannot authorize overwriting unselected destination values; partial child edits and unsupported metadata are rejected. Ordinary non-array cuts on these workbooks still move values/styles and rewrite dependent references. Shared-formula clones are expanded into standalone formulas; copied dynamic refs receive target coordinates. Derived caches are rebuilt after the complete clipboard transaction, and undo/redo restores the entire operation. Cutting a source array, including a partial child selection, remains explicitly blocked pending full ownership/reference movement. Actual Excel/OS clipboard input and UI acceptance remain unverified. Tests cover full/anchor/child copies, styles, sparse gaps, ordinary cut references, rejection rollback, undo/redo and actual save/reopen.


### Complete dynamic-array cut and movement — 2026-10-20

Selecting a validated array anchor for cut expands its logical selection to all owned children, preserving the array footprint and generated-cell styles. The caller clipboard dictionary is not mutated. Source arrays are validated together before any ownership is removed, so dependent arrays in a disjoint selection can move in one transaction. Original references outside the selected source stay connected; cross-sheet moves qualify their source context. Anchor operators and direct-child references follow the destination, including overlapping moves. Only vacated source cells/styles are cleared. Child-only cuts and partial modifications of another array remain blocked. Tests verify same-sheet/cross-sheet/overlapping movement, sparse dependent-array cohorts, source references, undo/redo, rejection rollback and actual save/reopen. This supersedes the earlier array-cut limitation. Real Excel/OS clipboard and pointer/keyboard acceptance remain unverified.


### Current chart-series editing scope - 2026-10-20

This section supersedes older blanket statements that existing series cannot be edited. General XLSX object tools edit names, numeric value references and category references of supported bar, line, pie, area, doughnut and radar series. Ranges are equal-length single rows/columns of up to 200 cells, optionally on another worksheet in the same workbook. Radar requires at least three nonblank nonnegative values; pie/doughnut require nonnegative values and a positive sum; area requires nonnegative values. Invalid edits roll back atomically. Existing chart styles, cache extension metadata, source headers and drawing anchors are retained. Series style/color editing, literal series and complex/combination charts remain unsupported. Registered game-data saves retain their existing chart-preservation behavior.

Evidence: Docs/Testing/2026-10-20/Goal100ChartSeries.json and Goal100ChartSeriesInputs.json; independent openpyxl/OOXML checks cover saved references and sparse cache indices for six chart types. Fresh Windows Unity 6000.0.83f1 runs passed 6,164 checks and all three sample scenes; clean package import passed 23 checks. These do not certify real pointer/keyboard input, actual Excel application round trips, macOS or every Excel feature. Nine localized HTML guides and the English PDF state these limitations explicitly.

### Basic chart-series RGB colors - 2026-10-20

General workbook object tools can set opaque solid RGB for bar/area fills and line/radar strokes. Simple explicit RGB is displayed in series previews and legends. Other line width/dash settings, effects, chart data, drawing anchors and unrelated extension XML are retained. The selected color definition is deliberately replaced; unknown extension-bearing color fills are rejected atomically. Undo/redo and save/reopen are covered by tests for all four supported kinds. Pie/doughnut point colors, theme transformations, gradients, marker styles and advanced chart styling are not fully reproduced. Unresolved imported colors use the automatic preview palette. This supersedes the earlier blanket statement that no series color editing is available. Actual picker interaction, Excel application round trips and macOS remain unverified.

### Simple chart theme colors and preservation errors - 2026-10-20

Chart previews now resolve simple untransformed scheme colors through the workbook's actual theme relationship, including nondefault theme paths, accents and default text/background aliases. RGB theme entries and system lastClr fallbacks are supported. Unknown color transforms, custom chart color-map overrides and ambiguous color choices retain automatic preview fallback rather than inventing a transformed color. Unrelated cell saves preserve theme and chart bytes. Explicit RGB changes can be undone back to the original theme reference. Color definitions containing unknown extensions reject edits atomically and preserve source/session bytes. A missing workbook.unsupported localization key discovered during this rejection test was added in all nine languages; exception construction also has a fixed safe fallback for unknown keys. Theme editing, full color transforms, actual picker input, Excel and macOS execution remain unverified or unsupported as stated in the guide.

### Pie and doughnut point colors - 2026-10-20

General object tools expose a scrollable category list for the selected pie/doughnut series. A selected point can receive an opaque solid RGB fill. Explicit point RGB and simple theme colors are displayed in slices/rings and the category legend. Other points, line attributes, point extension XML, cached chart data and drawing anchors are preserved. Undo/redo and actual save/reopen are covered. Color fills with unknown extensions and duplicate equivalent point indices reject edits atomically without source/session changes. Unsupported color transforms, advanced point effects, actual picker input and Excel/macOS execution remain incomplete. This supersedes older blanket limitations on pie/doughnut point-color editing.

### DrawingML luminance variants - 2026-10-20

Supported RGB/theme chart series and pie/doughnut points now display integer DrawingML lumMod/lumOff transforms in XML order. Hue and saturation are retained, luminance is clipped to the display range, 200-percent modulation and negative offsets are handled, and rounding occurs after the supported chain. Unknown transforms, extra attributes, nested children and unsupported lexical values retain the automatic palette fallback rather than showing a partial transform. Reading is nonmutating; unrelated cell saves preserve original chart/theme bytes, and Undo after RGB application restores the transform XML. Existing spreadsheet cell-tint behavior uses the shared HSL conversion and passed the full suite. Actual Excel/macOS rendering remains unverified.

Reference definitions: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.drawing.luminancemodulation?view=openxml-3.0.1 and https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.drawing.luminanceoffset?view=openxml-3.0.1. PercentageType.Val is an Int32Value in that SDK version; this implementation does not add support for percentage-string lexical forms.

Endpoint note: after an intermediate luminance transform reaches black or white, later luminance changes retain an achromatic result. This matches the current LibreOffice DrawingML color implementation's LumMod/LumOff endpoint handling: https://raw.githubusercontent.com/LibreOffice/core/master/oox/source/drawingml/color.cxx . This source comparison is not an executed Excel or LibreOffice application acceptance test.

### Chart opacity transforms - 2026-10-20

The chart color model now carries opacity separately from RGB for alpha, alphaMod and alphaOff on supported series and pie/doughnut points. Integer transforms follow XML order and clamp opacity to 0-100%; alpha is bounded to 0-100%, alphaMod is nonnegative and alphaOff to -100%-100%. Unknown or invalid mixed transforms use a full fallback. Preview/legend colors retain the opacity, and the simplified area fill multiplies its existing presentation opacity by the imported value. Original XML survives unrelated saves and RGB Undo. The current RGB picker intentionally writes an opaque fill/stroke; transparency editing and advanced blend effects are not implemented. Actual interactive/Excel/macOS rendering remains unverified.

Official opacity definitions: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.drawing.alphamodulation?view=openxml-3.0.1 and https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.drawing.alphaoffset.val?view=openxml-3.0.1 . Fresh Windows UI observation still shows an unrelated Windows Security UnrealPak permission request; no UI input was issued.

### Chart opacity editing - 2026-10-20

The object color picker now exposes alpha and applies selected RGB and opacity in one transaction for supported series and pie/doughnut points. New API overloads accept finite opacity from 0 to 1; the original RGB-only method signatures remain available and opaque. Opacity is rounded to the OOXML integer scale of 1/100,000; fully opaque writes omit the alpha node and zero remains explicitly transparent. Invalid RGB/opacity produces a localized chart.colorinvalid message, retained as a safe diagnostic code. Unknown color extensions remain guarded. Tests cover model, save/reopen, Undo/Redo, unselected data/points/drawing preservation, precision, zero, invalid values and legacy API reflection signatures. Actual picker input, Excel/macOS and full interactive rendering remain unverified. This supersedes the earlier transparency-editing limitation.

### Theme-retaining opacity edits and verified Save-history gap - 2026-10-20

The picker dispatches unchanged RGB to an opacity-only transaction. Supported theme/RGB definitions and luminance transforms remain unchanged; matching opacity is a clean no-op. Dedicated series/point opacity APIs replace only the alpha channel and reject unknown color definitions atomically. Unselected point alpha, other chart XML and drawing bytes are preserved. Undo/Redo is verified before Save, and actual save/reopen is verified separately.

A new save-then-undo test exposed an existing gap: SaveCore clears Undo/Redo. Its recovery baseline and EditorWindow reload state also need coordinated review before preserving history across Save. This requirement remains incomplete; it was not passed or removed from the product goal. See Docs/Testing/2026-10-20/RetainedOpacitySaveUndoGap.json. Actual interactive picker, Excel and macOS acceptance remain incomplete.


### Scatter line and marker colors (2026-10-20)
General XLSX object tools edit visible scatter line/marker solid RGB and opacity. Marker-only and line-only styles leave hidden components intact. Existing shape fill, marker outline, numeric references, drawing bytes and unrelated chart XML are preserved. Opacity-only updates retain known solid base colors; advanced styles and interactive Excel/macOS acceptance remain incomplete.


### Imported scatter linear axes (2026-10-20)
General XLSX previews read finite minimum/maximum axis bounds and independent X/Y reversal by chart axis IDs, including reordered axis XML and single-sided bounds. Line segments are clipped to the visible range, with out-of-range markers omitted. Unrelated saves preserve chart/drawing bytes. Malformed/equal/inverted ranges, logarithmic and smooth charts remain unsupported. Axis configuration editing and actual Excel/UI/macOS acceptance are still incomplete.


### Scatter axis editing (2026-10-20)
The object panel edits finite X/Y bounds and axis reversal for supported scatter charts, with blank automatic bounds and full automatic reset. Input validation and atomic rollback retain source/session state on invalid ranges. Undo/Redo, recovery and save/reopen preserve settings. Only selected scaling min/max/orientation nodes change; unrelated chart XML and drawing bytes remain intact. Unknown extension-bearing bound/orientation nodes reject editing safely. Actual mouse/keyboard interaction and Excel/macOS execution remain unverified.


### Imported scatter logarithmic axes (2026-10-20)
Scatter previews read independent X/Y logarithmic bases from 2 to 1000, with positive manual bounds and reversal retained. Coordinates and clipped straight segments use log space, with geometric tick labels. Nonpositive coordinates leave gaps without changing source cells. Invalid bases/bounds and sources without positive pairs show unsupported cards. Bound editing/reset preserves original log bases; changing bases and smooth curves remain unsupported. Chart/drawing bytes survive unrelated saves. Actual UI/Excel/macOS acceptance remains incomplete; fresh 17:07 KST UI inspection was still obstructed by Windows Security.


### Scatter logarithmic base editing (2026-10-20)
The object panel sets independent X/Y logarithmic bases from 2 to 1000; blank switches that axis to linear. Log bounds must be positive and data must contain a valid positive pair. Existing axis API and automatic-bound reset retain log bases. A new overload changes bases explicitly. Invalid base/bounds reject atomically. Unknown attributes/children on a changed logBase node reject removal/replacement, while bound-only edits preserve it. Undo/Redo, recovery, save/reopen and linear conversion preserve other chart XML and drawing bytes. Actual UI, Excel and macOS acceptance remains incomplete.


### Chart source visibility (2026-10-20)
A separate preview model honors plotVisOnly for resolved local row/column references, including hidden categories, hidden series, filtered source rows, cross-sheet and horizontal ranges. Raw values/references and caches remain intact. Preview point/series palette identity and explicit point styles survive compaction. All-hidden, zero-positive pie data and log charts without drawable positive pairs use a safe empty-data card. Source show-hidden mode includes hidden rows/columns. Undo/Redo, recovery and save/reopen are covered. External/unresolved source visibility and actual Excel/UI/macOS parity remain unverified.


### Chart display options (2026-10-20)
Object tools edit plotVisOnly and dispBlanksAs with gap/zero/span modes. Only genuine local empty cells are zero-filled in preview; text/formula errors are retained as missing, not coerced. Line/radar/connected-scatter use shared tested segment edges to span blanks. Marker-only scatter cannot enable spanning. Radar accepts genuine gaps across at least three positions with nonnegative numeric values. Raw values, formula text, caches and drawing bytes remain intact. No-op, safe metadata guards, Undo/Redo, recovery and save/reopen are tested. Actual UI/Excel/macOS parity remains unverified.

AI context / debugger: general workbook File menu provides a read-only versioned JSON preview, manual copy/export, opt-in selected content and bounded error addresses. Existing private operation logs and bug-report ZIP remain available. No automatic upload/repair or runtime/step-through debugger is claimed. Actual popup input and macOS remain unverified. Chart blank/hidden display settings preserve raw values, caches and drawing parts.

Registered game-table AI diagnostics inspect current unsaved typed data, schema, row widths, formula/type/overflow errors and unique-key duplicates. Inputs are never replaced. Names/selected contents are opt-in. Validation is bounded at 10000 cells, 100 output issues and 256 column definitions with explicit truncation flags; binary freshness is not certified. UI preview is cached until reload or content-option changes; failed inspection cannot be copied/exported. Actual popup interaction and macOS execution remain unverified.

Current general-workbook XLOOKUP supports sorted ascending search mode 2 and sorted descending -2, with exact/next-smaller/next-larger match modes. Sorting is caller responsibility; unsorted inputs are not validated. Binary wildcard mode remains unsupported. Numeric bounds, text, Boolean, horizontal/vertical arrays, 100000-element arrays, cross-sheet recalculation, undo/redo, recovery and saved formula/cache are covered. Separate game-data formula behavior is unchanged. Actual Excel and popup input remain unverified. Reference: https://support.microsoft.com/en-gb/excel/functions/xlookup-function

Current XLOOKUP supports selecting a matching row/column from a 2D return range into dynamic spill output. Existing vector return remains compatible. Nested two-axis lookup, aggregates, mixed/error cells, source recalc, child protection, obstacle reflow, undo/redo, recovery and save/reopen are covered. Stored formulas use _xlfn.XLOOKUP and dynamic array metadata. Lookup-value broadcasting and binary wildcard matching remain outside verified support. General formula changes do not extend the separate game-data engine. Actual Excel/UI/macOS are unverified.

XLOOKUP worksheet-vector results now preserve reference identity. Same-sheet colon ranges can connect XLOOKUP, INDEX and absolute defined-name endpoints for aggregates or direct spill output. Reversed endpoints are bounded inclusively. Constants are not references, cross-sheet dynamic endpoints are rejected, and 3D syntax remains explicitly unsupported with original caches preserved. Unused IF branches remain lazy and range chains have a 255-link bound. Recalculation, undo/redo, recovery, scalar formula text preservation and saved dynamic output are covered; actual Excel/UI/macOS remain unverified.
